Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 117

 
Yedelkin:

 А без "если"? ...

Без "если" не бывает. )))
 
tol64:  Без "если" не бывает. )))
 :)
 

Здравствуйте, не могу понять, почему не выставляются стопы?

input int         StopLoss=499;      // Stop Loss
input int         TakeProfit=999;   // Take Profit
input int         EA_Magic=12345;   // Magic Number советника
input double      Lot=0.1;          // Количество лотов для торговли

int OnInit()
  {
//--- Для работы с брокерами, использующими 5-ти значные котировки,
//--- умножаем на 10 значения SL и TP
   STP = StopLoss;
   TKP = TakeProfit;
   if(_Digits==5 || _Digits==3)
     {
      STP = STP*10;
      TKP = TKP*10;
     }
   return(0);
  }
void OnTick()
  {
//---
  
   MqlTick         latest_price;       // Будет использоваться для текущих котировок
   SymbolInfoTick(Symbol(),latest_price); // Получаем текущие цены
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult  mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
  
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // последняя цена ask
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type = ORDER_TYPE_BUY;                                       // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);

 

 
Top2n: Здравствуйте, не могу понять, почему не выставляются стопы?

 Во-первых, требуется инициализация:

MqlTradeRequest mrequest={0};   // Будет использоваться для отсылки торговых запросов
MqlTradeResult  mresult={0};    // Будет использоваться для получения результатов выполнения торговых запросов

Во-вторых, возможность выставления sl и tp зависит от режима исполнения рыночных ордеров, установленного брокером. Посмотрите, сколько в Справочнике есть таких режимов и проверьте, какой режим установлен у брокера.

 
Yedelkin:

 Во-первых, требуется инициализация:

Во-вторых, возможность выставления sl и tp зависит от режима исполнения рыночных ордеров, установленного брокером. Посмотрите, сколько в Справочнике есть таких режимов и проверьте, какой режим установлен у брокера.

я обнулил через ZeroMemory(mrequest);

про режимы исполнения ордеров не очень понял,  брокер альпари, думаю все по стандарту. Блин ерунда какая та, не хочет и все. Вывел через comment sl и  tp? показывает нынешнюю цену + sl. все так понимаю норма!

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
Top2n:

я обнулил через ZeroMemory(mrequest);

про режимы исполнения ордеров не очень понял,  брокер альпари, думаю все по стандарту. Блин ерунда какая та, не хочет и все. Вывел через comment sl и  tp? показывает нынешнюю цену + sl. все так понимаю норма!

В журнале какие-нибудь сообщения есть?
 
Top2n про режимы исполнения ордеров не очень понял,  брокер альпари, думаю все по стандарту. Блин ерунда какая та, не хочет и все. Вывел через comment sl и  tp? показывает нынешнюю цену + sl. все так понимаю норма!

 Я Альпари не отслеживаю, но, по-моему, все вопросы с непостановкой указанных Вами уровней были связаны именно с Альпари. Попробуйте выставить свой ордер на демосчете MQ - и у Вас всё получится.

Насчет режимов исполнения ордеров. Вы пользуетесь функцией https://www.mql5.com/ru/docs/trading/ordersend Прочтите внимательно вот этот раздел Справочника: https://www.mql5.com/ru/docs/constants/structures/mqltraderequest и ответьте для себя на вопрос: "сколько режимов исполнения предусмотрено для рыночных ордеров". Если не сможете ответить на этот вопрос - спрашивайте.

Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 
tol64: В журнале какие-нибудь сообщения есть?
 Разработчики пока что не предусмотрели возможность отражения в журнале сообщений о невозможности выставления уровней sl и tp в режимах Market Execution и Exchange Execution. Да и незачем это. Программист сам должен определять, какой режим установлен брокером.
 
Yedelkin:
 Разработчики пока что не предусмотрели возможность отражения в журнале сообщений о невозможности выставления уровней sl и tp в режимах Market Execution и Exchange Execution. Да и незачем это. Программист сам в должен определять, какой режим установлен брокером.
Всё равно, чтобы не гадать нужно анализировать все ошибки и коды возврата. Легче и быстрее разобраться потом, что делать дальше. ))
 
tol64:  Всё равно, чтобы не гадать нужно анализировать все ошибки и коды возврата. Легче и быстрее разобраться потом, что делать дальше. ))
...Особенно когда знаешь, что "ошибок и кодов возврата" в данном конкретном случае попросту не предусмотрено :) Не спорю, сама по себе постановка вопроса, - правильная, но в данном конкретном случае - не поможет :/