Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ром
1633
Ром  

Написал пару ботов на 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   не помогли. 

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


Alexander Bereznyak
22582
Alexander Bereznyak  

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

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

Alexander Bereznyak
22582
Alexander Bereznyak  
возьмите брокера по проще, там меньше ограничений
Alexander Bereznyak
22582
Alexander Bereznyak  
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;
Alexey Kozitsyn
7174
Alexey Kozitsyn  
Ром:

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

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

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

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

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

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

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

Ром
1633
Ром  
Alexander Bereznyak:

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

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

Alexander Bereznyak:

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

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

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

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

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

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

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

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

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 );
  }
}
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий