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

 
Igor Makanu:

скорее всего Вам нужен вариант №1, тогда в индикаторе в цикле расчета, где перебираете бары используете примерно такую конструкцию:

нужное время у Вас находится в Time[i] после проверки условия

Спасибо за ответ. Я использую функцию CheckTimer(), в которую передаю startTime,endTime в виде даты. TimeDayOfWeek() возвращает значения от 1 до 5 я так понимаю. Как мне их перевести в формат даты, чтобы использовать в функции CheckTimer()? Или мне надо будет и эту функцию переделывать?

 
Gerkl:

Спасибо за ответ. Я использую функцию CheckTimer(), в которую передаю startTime,endTime в виде даты. TimeDayOfWeek() возвращает значения от 1 до 5 я так понимаю. Как мне их перевести в формат даты, чтобы использовать в функции CheckTimer()? Или мне надо будет и эту функцию переделывать?

Может так

int   shift = iBarShift(NULL,PERIOD_W1,Time[i]);  
  
datetime startTime = iTime(NULL,PERIOD_W1,shift); 
datetime endTime = startTime + PeriodSeconds(PERIOD_W1); 
 
Alekseu Fedotov:

Может так

Спасибо, но так показывает всю неделю с воскресенья по воскресения, а мне нужно с понедельника по пятницу (торговую неделю).


Week

 

Как лучше всего в один советник засунуть 10 копий того же советника, но с разными параметрами?


Думаю так...
Весь код советника засунуть в одну функцию.
А входные параметры советника просто сделать параметрами функции.

 В ОнТик просто 10 раз ф-ю прописать, с разными параметрами.


А ордера разделить через comment.
Ордерам разный копий советника разные комменты прописывать.

 
multiplicator:

Как лучше всего в один советник засунуть 10 копий того же советника, но с разными параметрами?


Думаю так...
Весь код советника засунуть в одну функцию.
А входные параметры советника просто сделать параметрами функции.

 В ОнТик просто 10 раз ф-ю прописать, с разными параметрами.


А ордера разделить через comment.
Ордерам разный копий советника разные комменты прописывать.

Лучше Меджики разные сделать

 
Vladimir Pastushak:

Лучше Меджики разные сделать

почему лучше?
просто, может там еще будет торговать другой советник.
 
Gerkl:

Спасибо, но так показывает всю неделю с воскресенья по воскресения, а мне нужно с понедельника по пятницу (торговую неделю).

если предложенный вариант Вас устраивает, ну добавьте время в секундах 5 дней = 5 * 24 * 60 * 60 и получите время начала дня пятницы

сложно предположить, что Вам требуется, но всегда надежнее использовать время открытия бара на ТФ


multiplicator:
почему лучше?
просто, может там еще будет торговать другой советник.

потому что комментарий ордера не надежно, некоторые серверы затирают комментарий в 0 часов или дописывают туда служебную информацию

магик надежно, Вам что цифр жалко? магик это тип int - в справке прочитайте какое максимальное число можно в int хранить.... на несколько миллиардов советников Вам хватит магик-номеров... не жадничайте, тратьте магик-номера     ))))

 
Igor Makanu:

потому что комментарий ордера не надежно, некоторые серверы затирают комментарий в 0 часов или дописывают туда служебную информацию

магик надежно, Вам что цифр жалко? магик это тип int - в справке прочитайте какое максимальное число можно в int хранить.... на несколько миллиардов советников Вам хватит магик-номеров... не жадничайте, тратьте магик-номера     ))))

у меня сложился стереотип: один советник - один магик-номер.


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

 

Здравствуйте! Нужен совет. В этом советнике, закрывающем все позиции по ПрофитЭквити есть частые проскальзывания. То есть профит доходит до указанного значения, сделки то закрываются , то нет, ни с первого раза вообщем

extern double EquityProfit  = 1.2;

int start()
  {
   Comment("" ,AccountName(),"\n""ACCOUNT"  ,AccountNumber(),"\n""FREE MARGIN"  ,AccountFreeMargin(),"\n""EQUITY"  ,AccountEquity(),"\n""BALANCE"  ,AccountBalance());

   if(AccountEquity() > AccountBalance()*EquityProfit)
     {
      int total=OrdersTotal();

      for(int i=total-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS)==true)
           {
            int type=OrderType();

            bool result=false;

            switch(type)
              {
               case OP_BUY       : result=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),5,Red);
               break;
               case OP_SELL      : result=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),5,Red);
              }

            if(result==false)
              {
               Sleep(0);
              }
           }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
 
Vladimir Baskakov:

Здравствуйте! Нужен совет. В этом советнике, закрывающем все позиции по ПрофитЭквити есть частые проскальзывания. То есть профит доходит до указанного значения, сделки то закрываются , то нет, ни с первого раза вообщем

Вам изначально надо зафиксировать превышение эквити с помощью флага

А затем закрывать все ордера до тех пор пока их не станет 0 и перевернуть флаг

Сейчас у Вас часть ордеров закрылась часть нет, значения эквити изменились и на следующие тике эквити меньше заданного по этому условие не работает как надо

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