Ответить
14.04.2015, 09:19
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Код:
bool CheckDistanceOrders(string sy = "", int op = -1, int mn = -1, ushort pp = 0)
{
   int      i, k = OrdersTotal();
   if(sy == "0") sy = Symbol();
   for(i = 0; i < k; i ++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if((OrderSymbol() == sy || sy == "") && (mn < 0 || OrderMagicNumber() == mn))
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
               if(op < 0 || OrderType() == op)
                  if(pp < MathAbs(OrderOpenPrice() - Close[0]) / _Point)
                     return(false);
   return(true);
}
14.04.2015, 13:39
Аватар для Yura Vakulenko
Yura Vakulenko Yura Vakulenko вне форума Активный участник
Регистрация: 04.12.2013 / Адрес: Швейцария, Cham / Сообщений: 129
Поблагодарили 76 раз(а) / Репутация: 77
по-моему здесь явная ошибка в коде..

int i, k = OrdersTotal();

for(i = 0; i < k; i ++)

переменным i,k присваивается в один момент одно и тоже значение.. как же тогда переменная i может быть меньше k ?
и мне же нужно проверять расстояние только в том случае, если будет получен сигнал на покупку-продажу.. SigPF==1 или SigPF==2 и нужно сравнивать с ценой, которая будет как раз когда будет получен сигнал..

В любом случае, спасибо огромное.. сейчас буду пробовать!

по-моему вернее написать так..

int k = OrdersTotal();
for(int i = 0; i < k; i ++)

и правильно ли использовать в сравнении OrderOpenPrice() - Close[0] именно Close[0] (та как если сигнал будет на покупку, он должен будет откртся по Ask, а если на продажу,)
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko

Последний раз редактировалось Yura Vakulenko; 14.04.2015 в 14:22.
14.04.2015, 14:41
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Цитата:
по-моему вернее написать так..

int k = OrdersTotal();
for(int i = 0; i < k; i ++)
Будет верно и так и так. В моем случае:
int i, k = OrdersTotal(); - это объявление переменных для дальнейшего их использования. Просто k сразу присваивается значение.
При этом i не равен k.
Цитата:
и мне же нужно проверять расстояние только в том случае, если будет получен сигнал на покупку-продажу.. SigPF==1 или SigPF==2
Используете функцию когда это нужно, не понял проблемы...
Цитата:
и правильно ли использовать в сравнении OrderOpenPrice() - Close[0] именно Close[0] (та как если сигнал будет на покупку, он должен будет откртся по Ask, а если на продажу,)
Это уже как Вам надо, так и пишите.
14.04.2015, 14:44
Аватар для Yura Vakulenko
Yura Vakulenko Yura Vakulenko вне форума Активный участник
Регистрация: 04.12.2013 / Адрес: Швейцария, Cham / Сообщений: 129
Поблагодарили 76 раз(а) / Репутация: 77
ок, понял вас Матрос! большое вам спасибо! буду сейчас пробовать!
Музыка веков в звуках рояля - https://soundcloud.com/yura-vakulenko
15.04.2015, 04:56
Аватар для vladradon
vladradon vladradon вне форума Местный житель
Регистрация: 12.02.2015 / Сообщений: 360
Поблагодарили 164 раз(а) / Репутация: 171
  • Отправить сообщение для vladradon с помощью Skype™
Сообщение от: Yura Vakulenko
Это всего одна функция. Это не советник. просто все очень подробно расписал..

там нету ничего сложного в функции, просто не могу додуматся как написать.. может знатоки подскажут код..
Обратитесь ко мне в скайп - ник тот же. Помогу в режиме реального времени и Вы сами с моей помощью напишете код под Вашу стратегию. Там не обойтись одной функцией. Просто алгоритм мне нет смысла расписывать - он будет зависеть от других параметров, которые Вы используете.
15.04.2015, 19:25
Аватар для Palesandr
Palesandr Palesandr вне форума Интересующийся
Регистрация: 19.03.2014 / Сообщений: 9
Поблагодарили 3 раз(а) / Репутация: 4
всем привет
вопрос такой
Код:
ObjectSetString(0,"Btn3",OBJPROP_TEXT,"Большой текст");
есть кнопка с настройкой, т.е. с текстом на кнопке. размер кнопки меньше надписи. как перенести слово "текст " на новую строку?
16.04.2015, 18:10
Аватар для andrey555888
andrey555888 andrey555888 вне форума Интересующийся
Регистрация: 23.12.2009 / Сообщений: 6
Поблагодарили 0 раз(а) / Репутация: -1

По умолчанию как вставить в советик функцию мартингейл

Подскажите пожалуйста поэтапно как вставить в советник функцию мартингейл
16.04.2015, 19:30
Аватар для Cemen4yk1
Cemen4yk1 Cemen4yk1 на форуме Местный житель
Регистрация: 18.09.2014 / Сообщений: 232
Поблагодарили 253 раз(а) / Репутация: 254
Сообщение от: andrey555888
Подскажите пожалуйста поэтапно как вставить в советник функцию мартингейл
слишком широкий вопрос, мартингейл бывает очень разный, ну если элементарный вариант:
если цена ушла против последнего/верхнего/нижненго ордера на какоето кол пунктов то открываем усредняющий ордер в туже сторону объёмом предыдущего ордера * на экспоненту
сопутствующие функции (находим цену откр нужного ордера, находим его объём)
16.04.2015, 19:48
Аватар для andrey555888
andrey555888 andrey555888 вне форума Интересующийся
Регистрация: 23.12.2009 / Сообщений: 6
Поблагодарили 0 раз(а) / Репутация: -1
Спасибо за ответ.Я имел в виду как технически вставить код мартина в любой советник например этот

//+------------------------------------------------------------------+
int LossCount = 0;
double LotsArray[]={0.1,0.2,0.4,0.8,1.6,3.2};

...

double Lots()
{
double Lot = Lots;
int total = OrdersHistoryTotal();
for (int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC)
{
if (OrderProfit() > 0)
{
Lot=LotsArray[0];
LossCount = 0;
}
else
{
Lot=LotsArray[LossCount+1];
LossCount++;
}
}
}
return(Lot);
}
//+------------------------------------------------------------------+
17.04.2015, 04:45
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Эта функция перебирает ордера в истории на предмет убыточного закрытия.
Если это так, то с каждым новым убыточным ордером Lot берется из массива выше, индекс элемента массива будет равен числу последних подряд убыточных сделок.
Если сделка в профит, счетчик сбрасывается.
Перед тем как выставить ордер - вызываете эту функцию, она вернет размер нужного Вам лота.
Все как бы просто. Только, мне кажется, раз у Вас возник такой вопрос, то Вы не готовы к тому чтоб ковырять чужой код.
17.04.2015, 14:00
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
У меня возникла проблема.
Я пишу советника по типу "скальпер".
В тестере на котировках дукаскопи все ОК!
В реале, на новостях почему-то начинает открывать до хрена сделок с интервалом 2-3 пипса. В программе указано открывать на пол-ширины канала, т.е. пипсов 50-100.
Что нужно в программе прописать? Почему такая ерунда происходит?
17.04.2015, 18:52
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Сложно сказать. Может кусок кода поможет?
18.04.2015, 03:37
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
Ну, ХЗ, конечно
Вот
PHP код:
double iProfit Point*fabs(OrderProfit() + OrderCommission() + OrderSwap())/(OrderLots()*dTickVal);
                  
int iOrderTime int(TimeCurrent() - OrderOpenTime());
                     if(
OrderType() == OP_BUY && fOpenBuy1 && iProfit dTFATR/(dKTF*dKTZ dKTZ)) return(false); 
И на SELL аналогично.
Т.е. по моему разумению близко ордера не должны открываться.
Мало того! Я написал индикатор, который показывает ширину канала в пунктах и я вижу, что этих пунктов много, никак не 3-5. (это пятизнак, если что)
18.04.2015, 05:58
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
iProfit, так понимамю, профит в пунктах.
Не понятно что делает функция fabs, зачем она? Что-то нормализует, видимо.
Point, видимо, равен _Point. Если все так, то он там не нужен.
Я бы вычислял профит в пунктах так:
position.profit_current = OrderProfit() + OrderCommission() + OrderSwap();
position.profit_point = position.profit_current / (symb.tickvalue * position.volume) и тут нет _Point.
Но может я ошибаюсь и все нормально.

А может в (iProfit < dTFATR/(dKTF*dKTZ + dKTZ)) знак < надо поменять на >.
Мне выражение справа тоже ни о чем не говорит.

Попробуйте вывести значение переменных в Print(), это должно все прояснить.

Последний раз редактировалось matro3; 18.04.2015 в 06:01.
18.04.2015, 06:11
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
matro3
Понимаете, в чем дело - индикатор показывает geyrnjd 150, а ордера открываются с 2-3 пипса.
Тут дело такое - открываем в сторону тренда, а если что не так, то глушим убытки и открываемся в другую сторону.
В тестере все ОК, а в реале такая вот ерунда.
Ну, и конечно же, это безобразие на новостях.
Ну, дык! Скальпер же!
Просто, столько много сделок в неправильную сторону приносит убытки, ога!

И я не знаю, как это отследить. На новостях слишком все быстро летает
18.04.2015, 06:44
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Очень часто я думал что с моим кодом творится какая-то чертовщина, пока не находил свою ошибку. Робот есть робот. Раз он открывает, значит условие выполняется.

Давайте разберем этот код:
double iProfit = Point*fabs(OrderProfit() + OrderCommission() + OrderSwap())/(OrderLots()*dTickVal);
if(OrderType() == OP_BUY && fOpenBuy1 && iProfit < dTFATR/(dKTF*dKTZ + dKTZ)) return(false);
Полагаю он и отвечает за все это безобразие?..
Итак, наше условие: если IProfit (что вычисляет эта переменная?) меньше dTFATR/(dKTF*dKTZ + dKTZ)) (это ширина канала?), то сделке не бывать. Все верно?
Если последнее это ширина того самого канала, то он странно вычисляется. Может и нет, но выглядит так )....
Дайте пояснения к этим переменным.
18.04.2015, 06:52
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
matro3
Спасибо, что заинтересовались моей проблемой.

dTFATR - это сам канал и есть. Как можно догадаться по названию, он вычисляется на основе индикатора ATR.
А эти всякие dKTF и dKTZ - небольшие коэффициенты, примерно, около единицы, хотя на новостях могут быть и больше единицы, но не более двух.
ВотЪ.
Я проверял.
Ну, в принципе, логично, что на новостях надо лупить больше сделок.

Главное - в тестере-то все рулит!
Я, блин, миллионер уже по тестеру!

Пользуюсь TickStory - на этом форуме есть тема. Этот тикстори тащит котировки дукаскопи и вот на них все классно работает, а в реале - хрен
18.04.2015, 06:54
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
Я могу сюда выложить весь советник, но, боюсь, будут обсуждения не по теме - почему так криво и косо
18.04.2015, 07:07
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
Если не лень, то посмотри здесь пожалуйста http://forexsystemsru.com/sovetniki-...tml#post988027
Это мой советник целиком и полностью
18.04.2015, 07:09
Аватар для matro3
matro3 matro3 вне форума Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
А в обычном тестере работает также?
Ну и на новостях безбожно растет спрэд. Вероятно в этом дело?
Я не уверен что могу Вам помочь )
Ищите, какое-то вычисление на новостях дает не тот результат что ожидается.
А значит спред виноват. Выставьте в тестере спрэд побольше и посмотрите, что будет.

Не увидел сообщение выше. Сейчас посмотрю.
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 00:50. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO