Причина закрытия сделки
пишу робота, нужно определить каким именно образом была закрыта последняя позиция, не работает должным образом код. помогите кто понимает.
так вот принт выводит каждый раз цифру 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
вот она, как есть.
пишу робота, нужно определить каким именно образом была закрыта последняя позиция, не работает должным образом код. помогите кто понимает.
так вот принт выводит каждый раз цифру 3, хоть с профитом закрылась хоть с лосем. подскажите что не так?