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

 
Valeriy Yastremskiy #:

А по алгоритму с тремя уровнями это ну не знаю. глупости или невнимательность или ошибки алгоритма. уровни всегда 1 меньше 2 меньше 3. И условия больше всех, это больше 3, меньше всех это меньше 1, и меньше 3 и больше 2, и меньше 2 и больше 1. Одно сравнения в первом и последнем ифе.

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

 При разборе оператора while выяснил то-что пример в книге нерабочий(не компилируется), хотя человек в видеоуроке именно с таким кодом запускал его. Видать много изменений и дополнений в правилах кодирования произошло уже...

То-есть, этот код в примере запускался именно как советник, и действительно цикличность не останавливалась как и сейчас. При запуске его как Скрипт - цикличность завершается.

Тоже, немного запутался в операторе return, со скобками, возвратом значения. Сначала думал что достаточно пустых скобок, а потом вычитал, что хоть какой-то значение в них должно быть)

В учебнике есть фраза мол, зацикленность - Эта ситуация особенно опасна при торговле советниками и скриптами. Я так понимаю, что его в советниках лучше не использовать)))

    //void OnTick()                  // Запускается только из папки \\Советники. И цикл НЕ останавливается...
  // void OnStart()                  // Запускается только из папки \\Скрипт, и цикл Останавливается!!!
    int OnStart()                   // Запускается только из папки \\Скрипт, и цикл Останавливается!!!
{
 Alert("!!!!!!!!!Запуск!!!!!!!");      //----------------------------------------------------------+
 int a=0;                              //  То-что сейчас активно - это пример из учебника
 while(a<10)                           //  он даже не компилируется из-за 
 {                                     //     оператора return
  Alert("....Начался цикл....");       // 
  a++;                                 //  
  Alert(a);                            //----------------------------------------------------------+
  }
  Alert("_______Цикл окончен______");
  
 return;                                 // При Типе спец функции void без скобок.
 //return(0);                                //При Типе спец функции int со скобками, и значением внутри.
   
  }
 
to_ha #:

 При разборе оператора while выяснил то-что пример в книге нерабочий(не компилируется), хотя человек в видеоуроке именно с таким кодом запускал его. Видать много изменений и дополнений в правилах кодирования произошло уже...

То-есть, этот код в примере запускался именно как советник, и действительно цикличность не останавливалась как и сейчас. При запуске его как Скрипт - цикличность завершается.

Тоже, немного запутался в операторе return, со скобками, возвратом значения. Сначала думал что достаточно пустых скобок, а потом вычитал, что хоть какой-то значение в них должно быть)

В учебнике есть фраза мол, зацикленность - Эта ситуация особенно опасна при торговле советниками и скриптами. Я так понимаю, что его в советниках лучше не использовать)))

Если условие а<10 будет вдруг по недосмотру всегда истинным, получится зацикливание и возможно синий экран с потерей данных)))

 
JRandomTrader #:
Если (в общем случае) мы ничего не знаем о взаиморасположении этих уровней, то проверять надо все три.

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

Так то оба работают, но легче делать меньше действий)))

 
Valeriy Yastremskiy #:

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

Так то оба работают, но легче делать меньше действий)))

Я не говорю о практическом смысле алгоритма, рассматриваю его как не совсем удачный учебный пример с тремя условно независимыми условиями.

 

здравствуйте всем!

собираю советник торгующий одновременно двумя противоположными ордерами.

оба ордера закрываются пока по стопу/тейку

сейчас хочу сделать так: если один ордер закрылся по тейку, то второй автоматически должен закрыться по текущей цене.

Закрытие второго (по текущей цене) будет через функцию:

void CloseOrder() 
  {
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic1)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderClose(OrderTicket(),OrderLots(),Bid,slippage)) Start  = TimeCurrent();
              }
            if(OrderType()==OP_SELL)
              {
               if(OrderClose(OrderTicket(),OrderLots(),Ask,slippage)) Start  = TimeCurrent();
              }
           }
        }
     }
  }

не могу сообразить как составить условие для запуска этой функции.

Подскажите пожалуйста как сформулировать что то типа:

if(TakeProfit==???........)

{

//---если да, то закроем  второй ордер по текущей цене, не дожидаясь стопа или тейка

      CloseOrder();

}

 
законопослушный гражданин #:

здравствуйте всем!

собираю советник торгующий одновременно двумя противоположными ордерами.

оба ордера закрываются пока по стопу/тейку

сейчас хочу сделать так: если один ордер закрылся по тейку, то второй автоматически должен закрыться по текущей цене.

Закрытие второго (по текущей цене) будет через функцию:

не могу сообразить как составить условие для запуска этой функции.

Подскажите пожалуйста как сформулировать что то типа:

if(TakeProfit==???........)

{

//---если да, то закроем  второй ордер по текущей цене, не дожидаясь стопа или тейка

      CloseOrder();

}

Вообще по OrderCloseTime()!=0 выбранного по ордер селект ордера и анализ профита, если больше нуля, то да. Если меньше. то это закрытие по СЛ. 

 
Valeriy Yastremskiy #:

Вообще по OrderCloseTime()!=0 выбранного по ордер селект ордера и анализ профита, если больше нуля, то да. Если меньше. то это закрытие по СЛ. 

спасибо. буду разбираться

 
законопослушный гражданин #:

не могу сообразить как составить условие для запуска этой функции.

Подскажите пожалуйста как сформулировать что то типа:

if(TakeProfit==???........)

Вы сначала нужную логику сформулируйте. К примеру: (остался) один рыночный ордер, или - закрыт номер с тикетом Х.

 

День добрый, подскажите как вытащить ChartID графика М1, если открыто скажем еще М5,М15 и т.д.

Ну или как вариант как найти ChartID графика на котором есть объект с именем "arrow_1".

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