Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1230

 
Igor Makanu:

ошибок много в Вашем примере

должно быть:

тут цены не нормализованные  OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen); 

тут вообще не понятна логика зачем выход из OnTick() если условие ложное

наверное нужно продолжить цикл перебора ордеров  и просто посчитать сколько ордеров

имхо, или топик с "Только полезные функции от КимIV" поиском найдите или в КБ посмотрите как делают советников с подсчетом ордеров и выставлением новых ордеров, Ваш пример очень прямолинеен в логике и в дальнейшем его сложно будет модифицировать под другие задачи... ну может быть трейлинг он захочет прикрутить

Это еще рано)))) Сразу много будет. Там со смыслом не до понимание))))) А так да, конечно после вычислений для всего что сендордер нормализация необходима)))

Там условие по заказу, если на текущем инструменте нет ордеров с нашим магик, выставляем ордер. А потом условие будет не доходить до выставления ордера, пока он не закроется.

ПС не люблю условие Если не.

 

Приветствую! Подскажите, как правильно читается выражение

string sym=(symbol==NULL ? Symbol() : symbol);
 
Galim_V:

Приветствую! Подскажите, как правильно читается выражение

Если переменная symbol пустая то вернуть значение текущего симовола графика в переменную sym , а если не пустая то передать ее значение в переменную sym

 
Vladimir Pastushak:

Если переменная symbol пустая то вернуть значение текущего симовола графика в переменную sym , а если не пустая то передать ее значение в переменную sym

Благодарю!

 
Galim_V:

Приветствую! Подскажите, как правильно читается выражение

Читается так: Присвоить переменной значение Symbol() если symbol равен NULL иначе присвоить значение symbol.

Эквивалент этой записи

string sym;
if(symbol == NULL)
sym = Symbol();
else
sym = symbol;
Разница только в количестве строк.
 
Alexey Viktorov:

Читается так: Присвоить переменной значение Symbol() если symbol равен NULL иначе присвоить значение symbol.

Эквивалент этой записи

Разница только в количестве строк.

Спасибо!

 
Valeriy Yastremskiy:

А что тогда, у вас например открыто окно не евробакс, а еврофунт, вы сравниваете символ выбранного ордера с евробаксом, если истина, значит на евробаксе есть ордер, и если и с нашим магик, то ретурн из функции Онстарт, а если нет, то выставляем ордер на евробаксе, но клоз, Хай, аск, бид у вас будут для еврофунт. будет ошибка при открытии ордеров, так как бид и аск для этих инстументов разные. А Symbol() возвратит символ текущего окна и ошибки не возникнет.

И используйте шаблон из метаэдитор, там есть кнопочка Создать слева вверху. Функцию онстарт используют до сих пор, но это не правильно, а ОнСтарт это для скриптов. Правильный шаблон.

Правильный код. У Вас пропущен комментарий к ордеру, и магик в вашем коде не учитывается. В предупреждениях к строке открытия замечание Неявное приведение типа числа к строке!!!

Да, работает, как надо. Спасибо!  

Не знал что так важно создавать по шаблону. ОнСтарт- действительно. Основная структура у меня неправильная была. Что ж, теперь буду знать.

 
Alexey Belyakov:

Да, работает, как надо. Спасибо!  

Не знал что так важно создавать по шаблону. ОнСтарт- действительно. Основная структура у меня неправильная была. Что ж, теперь буду знать.

Ну и все что вставляете в функции работы с ордерами надо нормализовывать. Если после запятой будет 6 знаков на пятизнаке, ордер не выставится и выдаст ошибку.

топик с "Только полезные функции от КимIV" поиском найдите или в КодоБазе поищите.

Igor Makanu написал выше еще ошибки. А с функций Кима действительно полезно начинать. Понятные комменты.

 

Помогите плиз. Почему при тестировании выдает ошибку  - "" 2020.08.13 13:09:11.393 2018.08.01 00:00:00  123456 GBPUSD,M30: array out of range in '123456.mq4' (59,13)"""    ????


#property copyright "2020, Grey."

#property link      "uirnP0215@mail.ru"

#property version   "1.00"

#property strict


input double lots  = 0.01;

input int    Magic = 1546;



double ibufUP[];

double ibufDN[];


//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {


   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---


  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   CountFractals();

   if(ibufUP[3]>0)

     {

      if(!OrderSend(Symbol(), OP_SELL, lots, Bid, 30, 0, 0, "", Magic, 0, clrRed))

         Print("Не удалось открыть ордер на продажу");

     }

   if(ibufDN[3]>0)

     {

      if(!OrderSend(Symbol(), OP_BUY, lots, Bid, 30, 0, 0, "", Magic, 0, clrGreen))

         Print("Не удалось открыть ордер на покупку");

     }



  }

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

void CountFractals()

  {

   for(int i=150; i>=0; i--)

     {

      ibufUP[i] = iFractals(NULL, 0, MODE_UPPER, i);

      ibufDN[i] = iFractals(NULL, 0, MODE_LOWER, i);

     }

  }

//+------------------------------------------------------------------+



 
Madmas:

Помогите плиз. Почему при тестировании выдает ошибку  - "" 2020.08.13 13:09:11.393 2018.08.01 00:00:00  123456 GBPUSD,M30: array out of range in '123456.mq4' (59,13)"""    ????


#property copyright "2020, Grey."

#property link      "uirnP0215@mail.ru"

#property version   "1.00"

#property strict


input double lots  = 0.01;

input int    Magic = 1546;



double ibufUP[];

double ibufDN[];


//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {


   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---


  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   CountFractals();

   if(ibufUP[3]>0)

     {

      if(!OrderSend(Symbol(), OP_SELL, lots, Bid, 30, 0, 0, "", Magic, 0, clrRed))

         Print("Не удалось открыть ордер на продажу");

     }

   if(ibufDN[3]>0)

     {

      if(!OrderSend(Symbol(), OP_BUY, lots, Bid, 30, 0, 0, "", Magic, 0, clrGreen))

         Print("Не удалось открыть ордер на покупку");

     }



  }

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

void CountFractals()

  {

   for(int i=150; i>=0; i--)

     {

      ibufUP[i] = iFractals(NULL, 0, MODE_UPPER, i);

      ibufDN[i] = iFractals(NULL, 0, MODE_LOWER, i);

     }

  }

//+------------------------------------------------------------------+



Для начала в ф-ции CountFractals счетчик декремента поставь.

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