Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 494

 
Nickolay72:
 Количесто ордеров в принципе цель второстепенная,до вчера у меня открывалось по одному ордеру,и пока ордер есть,следующий не открывался.А как заставить советника открывать ордера согласно приказу-когда предыдущий бар открылся выше(ниже) канала?Сейчас большинство ордеров убыточные,потому что открываются не по условиям.
 if (CountTrades()==0) CheckForOpen();
   else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

Если анализировать вот этот кусок кода, то согласно ему у вас в случае если функция CountTrades() возвращает ноль то выполняется условие if (CountTrades()==0) CheckForOpen(); и вызывается функция CheckForOpen(). На следующем тике если ордер был открыть функция CountTrades() по идее вернет значение 1 и тогда уже будет выполнятся условие else 

....  
else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

  Если окажется что CountTrades()<max_trades то будет еще раз выполнена функция CheckForOpen(). Судя по коду значение переменной  max_trades равно 3. Таким образом у вас будет открыто 4-ре ордера.

Если советник открывает ордера не правильно, то проверяйте логику где вы указываете условия при которых должны открываться позиции в функции CheckForOpen() .  И еще проверьте условия времени работы советника if (CurrTime < EaStartTime || CurrTime >= EaEndTime). Я бы на вашем месте использовал функцию  if (TimeHour(TimeCurrent()) = час начала работы && TimeMinute(TimeCurrent()) = минуты начала работы ). Час и минуты начала работы задаются в переменных типа int или uint.

 
Artyom Trishkin:
Если Open бара номер 1 выше/ниже канала.
Чьерт побьери,только что увидел,что у меня торговля вокруг нижней границы канала завязана.Просто скопировал приказы,а низ на верх не исправил.Сейчас попробую исправленный вариант.Спасибо)
//-----Ставим ордер на покупку.
 if(PriceCurrentOpen<PriceLow&&PriceCurrentOpen<PriceCurrentClose&&SignalCurrent<MacdCurrent&&SignalMAPrevious<SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_BUY,Lots,Ask,slippage,0,0,"5",magic,0,Blue);
   if(ticket>0)
    return; 
 }
//-----Ставим ордер на продажу.
 if(PriceCurrentOpen>PriceLow&&PriceCurrentOpen>PriceCurrentClose&&SignalCurrent>MacdCurrent&&SignalMAPrevious>SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_SELL,Lots,Bid,slippage,0,0,"5",magic,0,Red);
   if(ticket>0)
    return;

	          
 
Vitalii Ananev:

Таким образом у вас будет открыто 4-ре ордера.

Если советник открывает ордера не правильно, то проверяйте логику где вы указываете условия при которых должны открываться позиции в функции CheckForOpen() .  И еще проверьте условия времени работы советника if (CurrTime < EaStartTime || CurrTime >= EaEndTime). Я бы на вашем месте использовал функцию  if (TimeHour(TimeCurrent()) = час начала работы && TimeMinute(TimeCurrent()) = минуты начала работы ). Час и минуты начала работы задаются в переменных типа int или uint.

Открывал по 3 ордера,но не так как я задумывал.Хотел до трех ордеров,но по одному ордеру на каждый новый бар.Бывают такие моменты,когда несколько баров подряд дают положительные сигналы.

А по времени проблем нет,работает в строго отведенный период времени. 

 
Nickolay72:

Открывал по 3 ордера,но не так как я задумывал.Хотел до трех ордеров,но по одному ордеру на каждый новый бар.Бывают такие моменты,когда несколько баров подряд дают положительные сигналы.

А по времени проблем нет,работает в строго отведенный период времени. 

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

Карпутову     2016.01.13_05:14 МСК. Здравствуйте, господин Карпутов! Я написал в MQL4

.mq4 файл, получил .ex4 файл. Но в тестере стратегий он не работает. Конечная

цель у меня была написать советник для МТ4. В MQL5 у меня получался .mq5 и

.ex5 файлы. И .ex5 файл открывал сделки. В четвёртой версии есть отличия от

пятой и я ещё полохо ориентируюсь в MQL языке, поэтому плохо получается.     

Сейчас я не стал сильно разбираться что не так, файл журнала тестера сохранён. Я

попробую перевести что написал тестер. А пока прошу Вас может Вы подскажете

что же не так написано в программном коде? Пока Вы ответите, я попробую сам

разобраться.
     Я с удивлением обнаружил у себя в четвёртой версии эдитора вариант написания

советника примерно то, что собирался написать. Но это не я писал. Прилагаю

файлы журнала тестера и скриншот. 05:30 МСК.   Журнал тестераКарпутовуКарпутову

Файлы:
20160112.log  7 kb
 
Николай Никитюк:

     2016.01.13_05:14 МСК. Здравствуйте, господин Карпутов! Я написал в MQL4

.mq4 файл, получил .ex4 файл. Но в тестере стратегий он не работает. 

А чего вы код в виде картинок выложили? )) Кто в них будет разбираться?
 
Николай Никитюк:


Вставьте, пожалуйста, свой код в сообщение правильно: Правильно вставляем код на форуме
 

Где найти описание ошибок?

Я вот не пойму, что не нравится компилятору, зачем он меня предупреждает?

check operator precedence for possible error; use parentheses to clarify precedence


if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)
               calcBarX++;

 и тут

expression has no effect


         for(calc_day;calc_day>0; calc_day--)
           {
            if(iLow(Symbol(),TF_3Day,calc_day)<iLow(Symbol(),TF_3Day,calc_day+1)) calc_day_OK++;
            else break;
           }

 
-Aleks-:

Где найти описание ошибок?

Я вот не пойму, что не нравится компилятору, зачем он меня предупреждает?

Вообще-то компилятор кроме текста ошибки ещё сообщает номер строки кода в которой ошибка и позицию в строке.
 
Karputov Vladimir:
Вообще-то компилятор кроме текста ошибки ещё сообщает номер строки кода в которой ошибка и позицию в строке.
Это так - в первом случае на знаки сравнения по очереди - видимо между "или" надо поставить скобку, а во втором случае  ругается на скобку в которой логическое выражение записано.
Причина обращения: