Подскажите, как сформулировать часть алгоритма в советнике. За помощь разработаю сайт!!! - страница 2

 
vlad6k:

я думаю проще .. или запись в файл (переменной) .. или на графике метку создавать со значением переменной .. тогда не промахнешься .. если ордерами следить .. надо от конкретного случая смотреть.. один закрылся второй нет.. я думаю файл было б идеально..


Как думаешь, эту проблему можно решить?

"вариант уважаемого r772ra показал себя замечательно! Осталось решить только одну задачу. При отсутствии ордеров советник открывается не по открытию, а в момент включения..."

 
cichiniov:


Как думаешь, эту проблему можно решить?...

... Осталось решить только одну задачу. При отсутствии ордеров советник открывается не по открытию, а в момент включения..."

Николай, проще рассказать, где берешь траву, имхенько.
 
cichiniov:


При отсутствии ордеров советник открывается не по открытию, а в момент включения..."

сделайте проверку на открытие новой свечи.

тогда и советник проще будет оптимизировать по ценам открытия.

 
cichiniov:


Как думаешь, эту проблему можно решить?

"вариант уважаемого r772ra показал себя замечательно! Осталось решить только одну задачу. При отсутствии ордеров советник открывается не по открытию, а в момент включения..."


ну незнаю.. записал в txt 1 или 0 и все.. открыл файл считал true или false .. как удобней ... интересно как вы говорите.. все условия учли? а сколько еще будет? и смотря как работает советник. . если примитив то наверно и ваш вариант подойдет.. а если будете писать строчек 3000 то думаю потом можно и прозевать ..
 
Я просто ищу совета у знающих! Я просто уверен, что такой каскад проблем, которые мы вместе увидели, возникает очень часть. Так почему бы не решить их вместе! Ну, или давайте вместе искать, где купить траву, раз ЭМКЬЮЭлем заниматься не охота!
 

Да, просто подождите новый бар. Тем более что наверняка именно на открытии бара надо сделать целый ряд действий


datetime t0=0;
bool fs=false;
void OnTick() 
{
  if (t0!=Time[0]) // new bar open / Time[0] for current period or iTime(Symbol(), period, 0) for any  
  {
     t0=Time[0];
     if(!fs) { fs=true; return; }
     
     // любые действия которые надо сделать именно на 1 тике  нового бара
  }
 
cichiniov:

Этот вариант показал себя замечательно! Осталось решить только одну задачу. При отсутствии ордеров советник открывается не по открытию, а в момент включения...

Мда, Игорь конечно молодец но как истинный программист пишет не задумываясь о ресурсах

Вот так гораздо короче будет

bool LastClosedOrderTime(int &oot, int &oct)
{     
   int ot,oht=OrdersHistoryTotal();
   if (oht<1) return(0);
   for(int j=oht-1; j>=0; j--)
   {
      if (OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
      {
         ot=OrderType()+1; if (ot>2) continue;
         // last closed position
         oot=OrderOpenTime();
         oct=OrderCloseTime();
//Print("Last Closed ",OrderSymbol(),"  Ticket #",OrderTicket()," OpenTime ",TimeToStr(oot,TIME_DATE|TIME_MINUTES|TIME_SECONDS)," CloseTime ",TimeToStr(oct,TIME_DATE|TIME_MINUTES|TIME_SECONDS));         
         return(1);
      }
   }
   return(0);
}  

Это всего один цикл, последний открытый ордер в истории

oht-1

Ну а дальше масса вариантов, например

int oot=0,oct=0;

LastClosedOrderTime(int &oot, int &oct);
if(oot>0 && oot<Time[0])  //если на 0 баре не открывались
   OrderSend();