Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Скачай документацию одним файлом. Это просто!
Ром
1634
Ром 2015.06.02 16:07 

Написал пару ботов на 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
21475
Alexander Bereznyak 2015.06.02 16:22  

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

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

Alexander Bereznyak
21475
Alexander Bereznyak 2015.06.02 16:24  
возьмите брокера по проще, там меньше ограничений
Alexander Bereznyak
21475
Alexander Bereznyak 2015.06.02 16:26  
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
6445
Alexey Kozitsyn 2015.06.02 16:57  
Ром:

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

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

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

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

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

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

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

Ром
1634
Ром 2015.06.02 19:12  
Alexander Bereznyak:

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

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

Alexander Bereznyak:

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

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

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

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

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

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

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

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

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