[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 129

 

Приветствую усех, скачала Сову, в тестере всё норм и продаёт и покупает, ставлю на демо в Альпари, только покупает.....

Может быть там не хватает чего то? На реал не ставила не знаю как бы получилось.... 

 

/* Декомпил удален */ 

 

 Хочу чтоб эксперт покупал когда цена подошла к машке, по цене машки + отступ i_thresholdFromMa. Написал так для длинной позиции:

bool OpenBuy(double fastMa)
{
   int ticket = -1;
   
   //if (Bid > fastMa)
   if (High[0] == fastMa || Low[0] == fastMa)
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

 Через параметры функции передаётся значение по ссылке быстрой машки fastMa. Далее по коду я сравниваю значения текушего хая и лоу с значением быстрой машки fastMa.

Если значение хай или лоу равно значению быстрой машки fastMa, то по  логике должен открываться ордер по цене ( значение быстрой машки fastMa + отступ от неё i_thresholdFromMa).

 Функция не работает. В чём причина ? Ошибок в журнал никаких эксперт не передаёт.

 
hoz:

 Хочу чтоб эксперт покупал когда цена подошла к машке, по цене машки + отступ i_thresholdFromMa. Написал так для длинной позиции:

 Через параметры функции передаётся значение по ссылке быстрой машки fastMa. Далее по коду я сравниваю значения текушего хая и лоу с значением быстрой машки fastMa.

Если значение хай или лоу равно значению быстрой машки fastMa, то по  логике должен открываться ордер по цене ( значение быстрой машки fastMa + отступ от неё i_thresholdFromMa).

 Функция не работает. В чём причина ? Ошибок в журнал никаких эксперт не передаёт.

Добрый вечер! У вас уже глубoкая ночь!

Равенства между дробными никогда не зафиксируются! Тики проскочат и сигнала не будет. Поэтому лучше так:

   if (High[0] >= fastMa && Low[0] <= fastMa)
 

Согласен с Борисом, но добавлю: любое сравнение цен лучше делать так:

не Bid>fastMA , а Bid-fastMA>Zero

не High[0]>=fastMA , а High[0]-fastMA>-Zero , ну и так далее:)

В глобальной секции:

#define Zero 0.00000001 , или что-нибудь похожее.

 
tara:

Согласен с Борисом, но добавлю: любое сравнение цен лучше делать так:

не Bid>fastMA , а Bid-fastMA>Zero

не High[0]>=fastMA , а High[0]-fastMA>-Zero , ну и так далее:)

В глобальной секции:

#define Zero 0.00000001 , или что-нибудь похожее.

И я согласен с Алексеем, но я не вдавался в детали, только поправил явную неправильность! Остальное всё найдёт, проверяя, пробуя по своему вкусу.
 

 Алексей и Борис благодарю Вас за ценное замечание.

 #define Zero 0.00000001 , по-моему маловато будет очень :) Полагаю, что пол пункта можно ставить смело сюда или пункт разбежки...

 
hoz:

 Алексей и Борис благодарю Вас за ценное замечание.

 #define Zero 0.00000001 , по-моему маловато будет очень :) Полагаю, что пол пункта можно ставить смело сюда или пункт разбежки...

Попробуйте вместо Zero поставить переменную и так определите необходимый зазор! И скорей всего надо будет её оставить, т.к. в зависимости от состояния рынка будет меняться её значение.
 
borilunad:
Попробуйте вместо Zero поставить переменную и так определите необходимый зазор! И скорей всего надо будет её оставить, т.к. в зависимости от состояния рынка будет меняться её значение.


 Да, если переменная, то это нужно тестить и наблюдать на рынке какая отработка. А пока что  я пишу для того чтоб прогнать в тестере и выявить сильные и слабые места ТС.

У меня вот такая логика получилась:

bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   //if (Bid > fastMa)
   //if (High[0] == fastMa || Low[0] == fastMa)
   if ( (MathAbs(High[0] - fastMa) <= 1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

 Вместо переменной зазора пока что 1 влепил для теста, потом вынесу во внешнюю.

 Как я понимаю, тут это будет самый верный вариант. Ведь важно коснётся цена или нет свечкой до машки, чтоб был сигнал. А у свечи 2 конца (хай и лоу). Значит проверка по 2 её экстремумам. Вот я и написал чтоб зазор был меньше 1.

 Вот тока интересно, открывает на расстоянии  i_thresholdFromMa (отступа) т.е. не от машки, а от экстремума свечи. 

 Попрошу не обращать внимания, на то что условие для входа в функции открытия, есс-но я его вынесу в сигнальную функцию. 

 Вот скрин, например,

Скрин момента 

Красная машка это и есть fastMA.  i_thresholdFromMa (отступ от машки) равен 5 во внешних переменных. По все условиям остальным бай. Тут видно 2 стоповых ордера синеньких под красной fastMa. Что-то я логику не нахожу тут. Ведь ордер посылается канкретно по цене ND(fastMa + i_thresholdFromMa * pt) и у меня в приведённой функции это видно...

 
hoz:


 Да, если переменная, то это нужно тестить и наблюдать на рынке какая отработка. А пока что  я пишу для того чтоб прогнать в тестере и выявить сильные и слабые места ТС.

У меня вот такая логика получилась:

 Вместо переменной зазора пока что 1 влепил для теста, потом вынесу во внешнюю.

 Как я понимаю, тут это будет самый верный вариант. Ведь важно коснётся цена или нет свечкой до машки, чтоб был сигнал. А у свечи 2 конца (хай и лоу). Значит проверка по 2 её экстремумам. Вот я и написал чтоб зазор был меньше 1.

 Вот тока интересно, открывает на расстоянии  i_thresholdFromMa (отступа) т.е. не от машки, а от экстремума свечи. 

 Попрошу не обращать внимания, на то что условие для входа в функции открытия, есс-но я его вынесу в сигнальную функцию. 

 Вот скрин, например,

 

Красная машка это и есть fastMA.  i_thresholdFromMa (отступ от машки) равен 5 во внешних переменных. По все условиям остальным бай. Тут видно 2 стоповых ордера синеньких под красной fastMa. Что-то я логику не нахожу тут. Ведь ордер посылается канкретно по цене ND(fastMa + i_thresholdFromMa * pt) и у меня в приведённой функции это видно...

Если хотите, чтобы позиция открылась раньше, в середине бара, нужно для бая указывать Low бара и для Сэлла High бара.

   if ( MathAbs(fastMa - Low[0]) <= 1 * pt )//для бая

   if ( MathAbs(High[0] - fastMa) <= 1 * pt )// для сэлла
   
 
borilunad:

Если хотите, чтобы позиция открылась раньше, в середине бара, нужно для бая указывать Low бара и для Сэлла High бара.

 

if ( MathAbs(fastMa - Low[0]) <= 1 * pt )//для бая

   if ( MathAbs(High[0] - fastMa) <= 1 * pt )// для сэлла


 Ну раньше не нужно. Я то не в курсе с какой стороны подойдёт свеча к машке. Сверху или снизу.. Это вопрос. Поэтому такой расклад не уместен. Разве нет?

 Тем более как-бы то ни было, у меня вот щяс цена открытия в функции OrderSend() то другая, и в любом случае выше машки:

 Вот я принтую значения в функции:

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ( (MathAbs(High[0] - fastMa) <= 1 * pt ) || ( MathAbs(Low[0] - fastMa) <= 0.1 * pt) )
   {
       if ((fastMa + i_thresholdFromMa * pt) > Ask)            // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником
      Print("fastMa = ", DoubleToStr(fastMa,Digits));
      Print("i_thresholdFromMa = ", DoubleToStr(i_thresholdFromMa * pt,Digits));
       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
      Print("OrderOpenPrice() = ", DoubleToStr(OrderOpenPrice(),Digits));
   }
      if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
 
   return (true);
}

 Вот что показывает журнал:

2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #110 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #110 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #110 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #109 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #109 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #109 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #108 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #108 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: open #108 buy stop 0.10 EURUSD at 1.29820 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: i_thresholdFromMa = 0.00050
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: fastMa = 1.29770
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: delete #107 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: modify #107 buy stop 0.10 EURUSD at 1.29820 sl: 1.29520 tp: 1.30520 ok
2013.02.01 15:37:18     2011.01.12 14:02  D_Aleks_first_pattern EURUSD,H1: OrderOpenPrice() = 1.29820
2013.02.01 15:37:14     D_Aleks_first_pattern EURUSD,H1: loaded successfully

  Тут очевидно, что цена должна быть при открытии заданная мной. Ведь просчёт то идёт. К значение машки прибавляется зазор. И это видно в принте..

Причина обращения: