Профи MQL5, SOS! Происходят странные вещи! Прошу помощи!

 

Написал пару ботов на TsLab API. Ругаясь, матерясь на документацию.. но в итоге все получилось.  

 Решил вплотную заняться MQL5.  Потрясающая документация с примерами!   Все достаточно подробно и доступно изложено! Просто рай! 

Написал несколько индикаторов, поработал с графикой. Все на высшем уровне!

   Добрался  до торговых функций.   По документации все вроде бы  понятно... Но !!!  Почему то оно все не работает как положено!! 

 

Проверяю работу торговых функций  на ФОРТС Открытие-демо. 

Пример - простой скрипт по  входу в позицию . Проверка работы deviation

void OnStart()
 {
   MqlTradeRequest request={0};
   request.action=TRADE_ACTION_DEAL;      
   request.symbol=_Symbol;   
  request.type=ORDER_TYPE_BUY;                   
   request.volume=1;  
   request.deviation=0;
   request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK)-100*_Point;
   MqlTradeResult result={0};
   OrderSend(request,result);   
  }

  

deviation

Максимально приемлемое отклонение от запрашиваемой цены, задаваемое в пунктах

 

 Рыночный ордер в моем случае должен быть отклонен тк отклонение от цены целых 100 пунктов!!! (SymbolInfoDouble(_Symbol,SYMBOL_ASK)-100*_Point;),при request.deviation=0;  !

   Но он исполняется! Почему ?   Что не так????? 

 

Далее. Проверяю работу отложенных ордеров. Скрипт.

void OnStart()
  {
double price=1.1022;
   MqlTradeRequest request={0};
   request.action=TRADE_ACTION_PENDING;      
   request.symbol=_Symbol;                      
   request.volume=1;  
   request.type=ORDER_TYPE_SELL_LIMIT;
   request.type_filling=ORDER_FILLING_IOC; 
   request.price=price; 
//   request.expiration=ORDER_TIME_GTC;
   MqlTradeResult result={0};
   OrderSend(request,result);   
  }

 ВЫДАЕТ ОШИБКУ  -   [Invalid expiration]

И ни какие "пляски" с type_filling и с expiration   не помогли. 

В чем проблема ?  


 

у брокера исполнение по рынку, какая цена была на момент запроса, ту он дал

по экспирации, на фортс экспирация допустима только в режиме до конца дня 

 
возьмите брокера по проще, там меньше ограничений
 
request.action=TRADE_ACTION_PENDING;
request.symbol=_Symbol;
request.volume=Lots;
request.price=price;
request.sl=0.0;
request.tp=0.0;
request.deviation=0;
request.type=type;
request.type_filling=ORDER_FILLING_RETURN;
request.type_time=ORDER_TIME_DAY;
 
Ром:

ВЫДАЕТ ОШИБКУ  -   [Invalid expiration]

И ни какие "пляски" с type_filling и с expiration   не помогли. 

В чем проблема ?  

По поводу истечения сталкивался с тем, что у разных брокеров этот параметр может реализовываться по разному, например, (для форекс) на сервере MetaQuotes-Demo все работало, т.е. истечение корректно исполнялось, а на сервере ДЦ - нет. Писал заявку в сервисдеск1121148 почему так в декабре прошлого года - до сих пор молчат. По поводу отклонения от цены - пробовали ставить значение отличное от 0?
 

Tapochun:
По поводу истечения сталкивался с тем, что у разных брокеров этот параметр может реализовываться по разному, например, (для форекс) на сервере MetaQuotes-Demo все работало, т.е. истечение корректно исполнялось, а на сервере ДЦ - нет. Писал заявку в сервисдеск1121148 почему так в декабре прошлого года - до сих пор молчат. По поводу отклонения от цены - пробовали ставить значение отличное от 0?

Да, все пробовал - не помогает.... (

Тоже попробую в сервисдеск написать. . Но вряд ли помогут - они потехнической части в основном.

 
Alexander Bereznyak:

у брокера исполнение по рынку, какая цена была на момент запроса, ту он дал

А для чего тогда deviation ?

Alexander Bereznyak:

по экспирации, на фортс экспирация допустима только в режиме до конца дня 

 Тоже пробовал - не помогает( 

 
Alexander Bereznyak:
возьмите брокера по проще, там меньше ограничений
Мне Московская биржа нужна. А там попроще нету брокеров, к сожалению .  У меня есть счет в ФИНАМе , и то не на мое имя.  - но там нету МТ5 для фортс. Там торгую на реале через ТСЛАБ.    А МТ5 - в "Открытии" .    Буду сравнивать тиковые потоки  и проверять исполнение  на фронтран.  - если замечу кухнотворчество( что не должно быть по определению у биржевого брокера ) - будет весело))) 
 

Опа! На демо рынок закрыт!(  Вечерка фортс  не торгуется на демо, видимо.   .. Завтра продолжу. 

 
То ли я упортый, то ли демка "открытия" .   
 
Ром:

Опа! На демо рынок закрыт!(  Вечерка фортс  не торгуется на демо, видимо.   .. Завтра продолжу. 

Добрый вечер!

Установка рыночного или лимитного ордера ( есть цена - лимитный, нет - рыночный ):

void SetMLOrder( const string a_symbol, const ulong magic,
                         ulong &ticket, const double price,
                         const double volume, const bool buy_sell )
{
  MqlTradeRequest request = {0};
  MqlTradeResult  result  = {0};
  ticket = 0;
       
//--- Fill structure
  request.magic = magic;
  request.symbol = a_symbol;
  request.volume = volume; 
  request.type_filling = ORDER_FILLING_IOC;
  request.type_time = ORDER_TIME_DAY;
    
  if ( price == 0 )
  {
    request.action = TRADE_ACTION_DEAL;
    request.comment = "Рыночный ордер...";
//---    
    if ( buy_sell )
    {
      request.type = ORDER_TYPE_BUY;
    }
    else
    {
      request.type = ORDER_TYPE_SELL;
    }
  }
  else
  { 
    request.action = TRADE_ACTION_PENDING;
    request.price = price;
    request.comment = "Лимитный ордер...";
//---    
    if (buy_sell)
    {
      request.type = ORDER_TYPE_BUY_LIMIT;
    }
    else
    {
      request.type = ORDER_TYPE_SELL_LIMIT;
    }   
  }  
//--- Send order
  if ( OrderSend( request, result ) )
  {
    if ( result.retcode == TRADE_RETCODE_PLACED ) 
    {
      ticket = result.order;
    }
  }
  else
  {
    Print( "Установка ордера не выполнена! ", a_symbol );
  }
}

 Установка отложенного ордера:

//+------------------------------------------------------------------+
//| Place order                                                      |
//+------------------------------------------------------------------+
void PlaceOrder( const string a_symbol, const ulong magic,
                 ulong &ticket, const double price,
                 const double volume, const bool buy_sell )
{
  MqlTradeRequest request = {0};
  MqlTradeResult  result  = {0};
  ticket = 0;
     
//--- Fill structure
  request.action = TRADE_ACTION_PENDING;
  request.magic  = magic;
  request.symbol = a_symbol;
  request.volume = volume;
  request.price  = price;
    
  if ( buy_sell )
  {
    request.type = ORDER_TYPE_BUY_LIMIT;
  }
  else
  {
    request.type = ORDER_TYPE_SELL_LIMIT;
  } 
  request.comment = "Отложенный ордер...";      
  request.type_filling = ORDER_FILLING_RETURN;
  request.type_time = ORDER_TIME_DAY;
  
//--- Send order
  if ( OrderSend( request, result ) )
  {
    if ( result.retcode == TRADE_RETCODE_PLACED ) 
    {
      ticket = result.order;
    }
  }
  else
  {
    Print( "Ордер не установлен! ", a_symbol );
  }
}
Причина обращения: