пишу робота, нужно определить каким именно образом была закрыта последняя позиция, не работает должным образом код. помогите кто понимает.
так вот принт выводит каждый раз цифру 3, хоть с профитом закрылась хоть с лосем. подскажите что не так?
Сначала надо найти сделку DEAL_ENTRY_OUT и только потом определять DEAL_REASON_TP
а разве последняя по умолчанию не будет являться DEAL_ENTRY_OUT? для тестера хотябы. так то да, нужно будет и эту проверку сделать.
а разве последняя по умолчанию не будет являться DEAL_ENTRY_OUT? для тестера хотябы. так то да, нужно будет и эту проверку сделать.
Даже если это проверяется в OnTradeTransaction и то надо проверять входящая или исходящая сделка. Вот пример определения
/*********************TradeTransaction function**********************/ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { //--- if(trans.type == TRADE_TRANSACTION_DEAL_ADD && trans.symbol == _Symbol) { /******************** Если открылась позиция********************/ if(PositionSelectByTicket(trans.position) && PositionGetInteger(POSITION_MAGIC) == mag) { // } //--- /******************** Если закрылась позиция********************/ if(!PositionSelectByTicket(trans.position)) { // Тут для убедительности проверить и принять решение. } } }/*******************************************************************/
Но это вариант для полного закрытия позиции.
А откуда такая функция GetLastDealTicket() ?
Даже если это проверяется в OnTradeTransaction и то надо проверять входящая или исходящая сделка. Вот пример определения
Но это вариант для полного закрытия позиции.
А откуда такая функция GetLastDealTicket() ?
из примера из справки по мт5
//+------------------------------------------------------------------+ //| Возвращает тикет последней сделки в истории или -1 | //+------------------------------------------------------------------+ ulong GetLastDealTicket() { //--- запросим историю за последние 7 дней if(!GetTradeHistory(7)) { //--- сообщим о неудачном вызове и вернем -1 Print(__FUNCTION__," HistorySelect() вернул false"); return -1; } //--- ulong first_deal,last_deal,deals=HistoryOrdersTotal(); //--- если ордера есть, начинаем работать с ними if(deals>0) { Print("Deals = ",deals); first_deal=HistoryDealGetTicket(0); PrintFormat("first_deal = %d",first_deal); if(deals>1) { last_deal=HistoryDealGetTicket((int)deals-1); PrintFormat("last_deal = %d",last_deal); return last_deal; } return first_deal; } //--- не нашли ни одной сделки, вернем -1 return -1; } //+------------------------------------------------------------------+ //| Запрашивает историю за последние дни и вернет false при неудаче | //+------------------------------------------------------------------+ bool GetTradeHistory(int days) { //--- зададим недельный период времени для запроса торговой истории datetime to=TimeCurrent(); datetime from=to-days*PeriodSeconds(PERIOD_D1); ResetLastError(); //--- сделаем запрос и проверим результат if(!HistorySelect(from,to)) { Print(__FUNCTION__," HistorySelect=false. Error code=",GetLastError()); return false; } //--- история получена успешно return true; } //+------------------------------------------------------------------+
вот она, как есть.
из примера из справки по мт5
вот она, как есть.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
пишу робота, нужно определить каким именно образом была закрыта последняя позиция, не работает должным образом код. помогите кто понимает.
так вот принт выводит каждый раз цифру 3, хоть с профитом закрылась хоть с лосем. подскажите что не так?