Как правильно модифицировать ордер?
Показано с 1 по 9 из 9

Тема: Как правильно модифицировать ордер?

  1. #1
    Новичок Аватар для Mike_Kharkov
    Регистрация
    08.07.2014
    Сообщений
    103
    Promo (¢)
    1,685
    Благодарности
    Получено: 8
    Отправлено: 126

    Как правильно модифицировать ордер?

    Всем привет.
    Есть такой кусок кода:

    Код:
          else if(pos_prof_gl >= 0.10)
          {
          Print("НАДО МОДИФИЦИРОВАТЬ ОРДЕР. Профит равен: ", pos_prof_gl, "-ти" );
          
            // модификация существующей позиции.  
          
          // -------+ вызов функции формирования торгового запроса +--------- 
          if(ModifyOrder(prc, price_bid))
            {
             Print("ПОЗИЦИИ МОДИФИКАЦИРОВАНА. Тейк профит равен:", price_bid);
             Print("Час: "        +(string)stm.hour);
             Print("Минута: "     +(string)stm.min);
             Print("Секунда: "    +(string)stm.sec);
            }
           
          else
          {
            Print("Ошибка Модификации!!!");
          }
           
           
           
          }
          
    };
    
    //функция формирующая торговый запрос на открытие позиции и проверку результата открытия  -------------------+
    
    bool SendOrder(double price, double volume, double pos_prof, double prc_bid)
    {  
       
       if(volume >= 99){
       Print("ОШИБКА! Обьем Ордера привысил размер 99 лотов и сейчас ровняется", volume,"-м");
       return(false);
       };
    
       MqlTradeRequest request = {0};
       MqlTradeResult  result  = {0};
       //---заполняем поля торгового запроса
       request.action       = TRADE_ACTION_DEAL;       // Тип выполняемого действия
       request.symbol       = _Symbol;                 // Имя торгового инструмента
       request.magic        = magic_number;
       request.volume       = volume;                  // Запрашиваемый объем сделки в лотах
       request.price        = price;                   // Цена  
       request.type         = ORDER_TYPE_BUY;          // Тип ордера
       request.tp           = price + 40*_Point;       // Цена, по которой сработает Take Profit ордер при движении цены в благоприятном направлении
       request.sl           = price - 270*_Point;      // Цена, по которой сработает Stop Loss ордер при движении цены в неблагоприятном направлении
       request.deviation    = 0;                       // Максимально приемлемое отклонение от запрашиваемой цены, задаваемое в пунктах
       request.type_filling = ORDER_FILLING_FOK;       // Тип ордера по исполнению
       request.type_time    = ORDER_TIME_GTC;
                      
                      
       //---проверим хватает ли средств для открытия позиции
            double margin = 0.0;
                         
       if (!OrderCalcMargin(request.type, request.symbol, request.volume, request.price, margin))
                            return(false);
                         
       if (margin > AccountInfoDouble(ACCOUNT_FREEMARGIN))
                            return(false);
                      
                         
       //---отправка запроса на сервер и проверка результата отправки
       if (OrderSend(request,result))
           {
             if ( result.retcode == TRADE_RETCODE_DONE)
                  {
                     return (true);
                  };
                };
    
                                                      
                         return(false);
       };// функция торгового запроса-------------------------------------------------------------------------------------------------+
          
       
       
       
       
       
     //функция формирующая модификацию торгового запроса и проверки результата -------------------+
    
    bool ModifyOrder(double price, double prc_bid)
    {  
    
       MqlTradeRequest request = {0};
       MqlTradeResult  result  = {0};
       //---заполняем поля торгового запроса
       request.action       = TRADE_ACTION_MODIFY;     // Тип выполняемого действия
       request.symbol       = _Symbol;                 // Имя торгового инструмента
       request.tp           = prc_bid;                 // Цена, по которой сработает Take Profit ордер при движении цены в благоприятном направлении
       request.sl           = price - 270*_Point;      // Цена, по которой сработает Stop Loss ордер при движении цены в неблагоприятном направлении
                      
                      
       //---проверим хватает ли средств для открытия позиции
            double margin = 0.0;
                         
       if (!OrderCalcMargin(request.type, request.symbol, request.volume, request.price, margin))
                            return(false);
                         
       if (margin > AccountInfoDouble(ACCOUNT_FREEMARGIN))
                            return(false);
                      
                         
       //---отправка запроса на сервер и проверка результата отправки
       if (OrderSend(request,result))
           {
             if ( result.retcode == TRADE_RETCODE_DONE)
                  {
                     return (true);
                  };
                };
    
                                                      
       
       return(false);
       
       };// функция модификации торгового запроса-------------------------------------------------------------------------------------------------+

    Вопрос:
    Почему не срабатывает модификация тейк профита?
    (2 принта помеченные оранжевым цветом срабатывают при этом.)

    P.S. Буду благодарен за любые советы..

    Вы не можете благодарить!

  2. #2
    Программист
    Регистрация
    16.08.2012
    Адрес
    Челябинск
    Сообщений
    1,442
    Promo (¢)
    32,975
    Благодарности
    Получено: 485
    Отправлено: 50
    Цитата Сообщение от Mike_Kharkov Посмотреть сообщение
    Почему не срабатывает модификация тейк профита?
    А какой ответ сервера? Там же все написано - в ответе (см. GetLastError())...

    Вы не можете благодарить!

  3. #3
    Теоретик
    Регистрация
    03.04.2013
    Сообщений
    475
    Promo (¢)
    690
    Благодарности
    Получено: 148
    Отправлено: 79
    Mike_Kharkov, Так позицию модифицируешь или отложенный ордер?

    Вы не можете благодарить!

  4. #4
    Новичок Аватар для Mike_Kharkov
    Регистрация
    08.07.2014
    Сообщений
    103
    Promo (¢)
    1,685
    Благодарности
    Получено: 8
    Отправлено: 126
    Цитата Сообщение от wayfarer Посмотреть сообщение
    А какой ответ сервера? Там же все написано - в ответе (см. GetLastError())...
    В журнале у меня следующее выдает:

    1.jpg

    ---------- Сообщение добавлено в 21:30 ----------

    Цитата Сообщение от KLoAF Посмотреть сообщение
    Mike_Kharkov, Так позицию модифицируешь или отложенный ордер?
    Не совсем вопрос понял?

    Вы не можете благодарить!

  5. #5
    Теоретик
    Регистрация
    03.04.2013
    Сообщений
    475
    Promo (¢)
    690
    Благодарности
    Получено: 148
    Отправлено: 79
    Mike_Kharkov, чего-то не могу найти, где видел.... Но, смысл в том, что в MT5 надо разделять между собой сделки, ордера и позиции. Так вот позиции - это то, что есть в рынке, а ордера - это всякого рода отложки. Проблема в том, что для модификации ордера надо брать request.action=TRADE_ACTION_MODIFY, а для позиции request.action=TRADE_ACTION_SLTP;

    Вы не можете благодарить!

  6. #6
    Новичок Аватар для Mike_Kharkov
    Регистрация
    08.07.2014
    Сообщений
    103
    Promo (¢)
    1,685
    Благодарности
    Получено: 8
    Отправлено: 126
    Цитата Сообщение от KLoAF Посмотреть сообщение
    Mike_Kharkov, чего-то не могу найти, где видел.... Но, смысл в том, что в MT5 надо разделять между собой сделки, ордера и позиции. Так вот позиции - это то, что есть в рынке, а ордера - это всякого рода отложки. Проблема в том, что для модификации ордера надо брать request.action=TRADE_ACTION_MODIFY, а для позиции request.action=TRADE_ACTION_SLTP;
    На счет этого я был в курсе.
    (но это не решает в данном случае задачу, на сколько я понимаю..)

    Вы не можете благодарить!
    Последний раз редактировалось Mike_Kharkov; 19.08.2014 в 01:34.

  7. #7
    Теоретик
    Регистрация
    03.04.2013
    Сообщений
    475
    Promo (¢)
    690
    Благодарности
    Получено: 148
    Отправлено: 79
    Mike_Kharkov, вот как раз в этом, имхо, проблема...Если request.action=TRADE_ACTION_SLTP, то необходим минимум след. набор параметров:
    SL & TP Modification
    •action
    •symbol
    •sl
    •tp
    а если request.action=TRADE_ACTION_MODIFY, то
    Modify Pending Order
    •action
    •order
    •price
    •sl
    •tp
    •type_time
    •expiration
    Так что определись, что модифицируешь...

    Вы не можете благодарить!

  8. #8
    Новичок Аватар для Mike_Kharkov
    Регистрация
    08.07.2014
    Сообщений
    103
    Promo (¢)
    1,685
    Благодарности
    Получено: 8
    Отправлено: 126
    Цитата Сообщение от KLoAF Посмотреть сообщение
    Mike_Kharkov, вот как раз в этом, имхо, проблема...Если request.action=TRADE_ACTION_SLTP, то необходим минимум след. набор параметров:
    SL & TP Modification
    •action
    •symbol
    •sl
    •tp
    а если request.action=TRADE_ACTION_MODIFY, то
    Modify Pending Order
    •action
    •order
    •price
    •sl
    •tp
    •type_time
    •expiration
    Так что определись, что модифицируешь...
    В этом смысле - у меня там обычный рыночный ордер работает на покупку, который потом я пытаюсь модифицировать.
    В коде же видно что он рыночный.
    (см. ф-цию торгового запроса..)

    Вы не можете благодарить!

  9. #9
    Теоретик
    Регистрация
    03.04.2013
    Сообщений
    475
    Promo (¢)
    690
    Благодарности
    Получено: 148
    Отправлено: 79
    Цитата Сообщение от Mike_Kharkov Посмотреть сообщение
    В этом смысле - у меня там обычный рыночный ордер работает на покупку, который потом я пытаюсь модифицировать.
    В коде же видно что он рыночный.
    (см. ф-цию торгового запроса..)
    Тогда тебе нужно использовать request.action=TRADE_ACTION_SLTP вместо TRADE_ACTION_MODIFY

    Вы не можете благодарить!

Похожие темы

  1. Может ли двойной клик закрыть ордер?
    от DVS_75 в разделе Торговая платформа MetaTrader 4
    Ответов: 1
    Последнее сообщение: 26.08.2018, 10:10
  2. ордер не правильно посчитал сервер
    от of-pro в разделе Разговоры о трейдинге
    Ответов: 0
    Последнее сообщение: 17.09.2016, 15:57
  3. Если я создам ордер sell как отреагирует рынок?
    от StanisLOVE в разделе Любые вопросы от новичков
    Ответов: 4
    Последнее сообщение: 25.03.2015, 15:39
  4. Открытый ордер
    от хасан в разделе Разговоры о трейдинге
    Ответов: 129
    Последнее сообщение: 11.11.2013, 19:33
  5. Ордер на продажу
    от Ivan05 в разделе Конкурс "Forex Nostradamus"
    Ответов: 0
    Последнее сообщение: 08.03.2013, 12:22

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •