Помогите новичку с MQL5 - страница 2

 
g_Hab:
Проверил, не работает( Хорошо, как узнать время закрытия сделки?
если в тестере проверяете то Sleep в тестере не работает
 
g_Hab:
Проверил, не работает( Хорошо, как узнать время закрытия сделки?
Определите время закрытия по времени свечи, в кот сделка закрылась. Курите ваши 6 мин тоже по свечам. Если по реалтайм, то в тестере, подозреваю, ничего не будет работать. Хотя ЧЕЗ, что в тестере будет с функцией Time...
 
g_Hab:
Проверил, не работает( Хорошо, как узнать время закрытия сделки?
сделки не имеют времени закрытия, имеют время исполнения сделки
 
Sergey Gritsay:
если в т
Sergey Gritsay:
если в тестере проверяете то Sleep в тестере не работает
 Sleep проверял на демосчете, но он внутри OnTick не работает с минутными выдержками наверное, сделки открывались без задержек.
 

Попробовал записать в переменную формата datetime значение DEAL_ENTRY_OUT В результате записалось вот это Alert: 1970.01.01 00:00:01    

Может это потому, что сегодня нет реальных торгов, посмотрю что запишет завтра на демосчете, или  я что то не так сделал?


 

DEAL_ENTRY_OUT это направление сделки, как время использовать нельзя, надо выбрать все сделки в истории с помощью функции HistorySelect(),

затем в цикле перебрать все доступные сделки и найти сделку самую последнюю по времени (функция HistoryDealGetInteger() с модификатором DEAL_TIME),

проверить её направление (функция HistoryDealGetInteger() с модификатором DEAL_ENTRY), проверить пренадлежность к торгуемому символу

(функция HistoryDealGetString() с модификатором DEAL_SYMBOL), если используете Magic то надо проверить и его (функция HistoryDealGetInteger() с модификатором DEAL_MAGIC),

если все параметры совпадают и в рынке нет позиции по инструменту, фиксируем время совершения сделки (функция HistoryDealGetInteger() с модификатором DEAL_TIME) и

от полученного времени отмеряете необходимую паузу

 
Спасибо. Как же это все сложно для меня. Ну ладно, есть правильный путь, буду разбираться.
 

 Подскажите, все эти функции для эксперта писать в OnTick или OnInit? Или это отдельные функции в программе, но тогда их вызывать из OnTick?

Такой код  Alert ( HistorySelect(0,TimeCurrent()) ); выдает результат true, хотя вроде должен перебрать всю историю ордеров.

Может есть какой-нибудь пример реализации задержки по времени, не получается самостоятельно разобраться. Ну или можно изменить алгоритм без задержки временной, но тогда надо знать момент закрытия сделки, чтобы робот пропустил бар на котором сделка закрылась, а потом снова начал торговать. Пробовал вот так  if (HistoryDealGetInteger(ticket,DEAL_ENTRY)==DEAL_ENTRY_OUT), но здесь надо знать тикет последнего ордера. Что такое тиккет, как программно узнать? Справочник читал, не понимаю, там пример приводится по известному тиккету находят ордер, а у меня тиккет неизвестен. Может кто поможет конкретным примером?

 
g_Hab:

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

double  GetProfit(string symbol,double &loss,double&profit,double &net_profit)
  {
   loss=0;
   profit=0;
   net_profit=0;

   if(HistorySelect(StartData,EndData))
     {
      int deals=HistoryDealsTotal();
      for(int i=0;i<deals;i++)
        {
         ulong deal_ticket=HistoryDealGetTicket(i);
         if(HistoryDealGetString(deal_ticket,DEAL_SYMBOL)!=symbol)continue;
         if(HistoryDealGetInteger(deal_ticket,DEAL_ENTRY)!=DEAL_ENTRY_OUT)continue;
         double pr=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT);
         if(pr>0)profit+=pr;
         if(pr<0)loss+=pr;
         net_profit+=pr;
        }
     }
     return(net_profit);
  }