не получается закрыть ордер противоположным

 

Доброго времени суток! из названия проблемы все понятно. Беру стандартный код из справки и вставляю его. при закрытии выдает ошибку. подскажите рабочий код) вот код из справки:

void OnStart()
  {
//--- объявление запроса и результата
   MqlTradeRequest request;
   MqlTradeResult  result;
   int total=PositionsTotal(); // количество открытых позиций   
//--- перебор всех открытых позиций
   for(int i=total-1; i>=0; i--)
     {
      //--- параметры ордера
      ulong  position_ticket=PositionGetTicket(i);                                    // тикет позиции
      string position_symbol=PositionGetString(POSITION_SYMBOL);                      // символ 
      int    digits=(int)SymbolInfoInteger(position_symbol,SYMBOL_DIGITS);            // количество знаков после запятой
      ulong  magic=PositionGetInteger(POSITION_MAGIC);                                // MagicNumber позиции
      double volume=PositionGetDouble(POSITION_VOLUME);                               // объем позиции
      double sl=PositionGetDouble(POSITION_SL);                                       // Stop Loss позиции
      double tp=PositionGetDouble(POSITION_TP);                                       // Take Profit позиции
      ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);  // тип позиции
      //--- вывод информации о позиции
      PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                  position_ticket,
                  position_symbol,
                  EnumToString(type),
                  volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                  DoubleToString(sl,digits),
                  DoubleToString(tp,digits),
                  magic);
      //--- если MagicNumber совпадает
      if(magic==EXPERT_MAGIC)
        {
         for(int j=0; j<i; j++)
           {
            string symbol=PositionGetSymbol(j); // символ новой позиции
            //--- если символы новой и искомой позиций совпадают
            if(symbol==position_symbol && PositionGetInteger(POSITION_MAGIC)==EXPERT_MAGIC)
              {
               //--- установка типа встречной позиции
               ENUM_POSITION_TYPE type_by=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
               //--- выход, если типы исходной и встречной позиций совпадают
               if(type==type_by)
                  continue;
               //--- обнуление значений запроса и результата
               ZeroMemory(request);
               ZeroMemory(result);
               //--- установка параметров операции
               request.action=TRADE_ACTION_CLOSE_BY;                         // тип торговой операции
               request.position=position_ticket;                             // тикет позиции
               request.position_by=PositionGetInteger(POSITION_TICKET);      // тикет встречной позиции
                                                                             //request.symbol     =position_symbol;
               request.magic=EXPERT_MAGIC;                                   // MagicNumber позиции
               //--- вывод информации о закрытии встречной
               PrintFormat("Close #%I64d %s %s by #%I64d",position_ticket,position_symbol,EnumToString(type),request.position_by);
               //--- отправка запроса
               if(!OrderSend(request,result))
                  PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки

               //--- информация об операции   
               PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
              }
           }
        }
     }
  }

 
vitaliy9999999:

Доброго времени суток! из названия проблемы все понятно. Беру стандартный код из справки и вставляю его. при закрытии выдает ошибку. подскажите рабочий код)

откройте два встречных ордера. Возьмите код из справки и поместите в скрипт. Выбросьте все второстепенное. Добавьте вывод промежуточных значений функцией Alert ...

 
vitaliy9999999:

Доброго времени суток! из названия проблемы все понятно. Беру стандартный код из справки и вставляю его. при закрытии выдает ошибку. подскажите рабочий код) вот код из справки:


Пожалуйста, при вставке код пользуйтесь подсказкой: Правильно вставляем код на форуме.

Также рекомендую использовать Стилизатор кода (быстрое применение в редакторе MetaEditor: "Ctrl" + ",").


Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым...
 
Vladimir Karputov:

Пожалуйста, при вставке код пользуйтесь подсказкой: Правильно вставляем код на форуме.

Также рекомендую использовать Стилизатор кода (быстрое применение в редакторе MetaEditor: "Ctrl" + ",").


конечно оффтоп, но господа, на программистском форуме заводить отдельную инструкцию по вставке кода на форум..это какой-то перебор, за гранью добра и зла.

Уже сколько лет сайт и форум пополняются фичами, фичечками и фичульками..Кроме одной - простой вставки, разметки и оформления кода MQL. Или у нас в перспективе C# и незачем тратить ресурсы веб-мастеров ?

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