Выставление ордеров .Buy/.Sale при помощи CTrade

 

Добрый день!

В алго трейдинге являюсь новичком, решил попробовать написать простой код для открытия позиции по заданной, а не текущей цене. Использую .Sell/.Buy CTrade. Но при отправлении запроса у меня происходит покупка не по указанной мною цене, а по текущей рыночной. С чем может быть проблема?

Заранее спасибо!

#include <Trade\Trade.mqh>

CTrade m_Trade;

double Open_buf_day[];

string my_symbol;
int lot;
int n;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   my_symbol=Symbol();
   ArraySetAsSeries(Open_buf_day, true);
   lot=1;
   n=0;
   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ArrayFree(Open_buf_day);
   lot=NULL;
   n=NULL;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {  
   int error_copy_Open_day=0;
   error_copy_Open_day=CopyOpen(my_symbol, PERIOD_D1, 0, 2, Open_buf_day);
   if (error_copy_Open_day<0) 
   {
      Print("Не удалось скопировать данные!");
      ExpertRemove(); 
   }

   if (n==0)
      {
         double SP=NormalizeDouble(Open_buf_day[1], Digits());
         Print(lot);
         Print(my_symbol);
         Print(SP);
         m_Trade.Sell(lot, my_symbol, SP);
         long o_ticket = m_Trade.ResultOrder();
         Print(o_ticket);
         n=n+1;
      }
  }
//+------------------------------------------------------------------+

Чтобы я не указывал в цене 

m_Trade.Sell(lot, my_symbol, SP);

Всегда идет покупка по рыночной цене

 

Откройте файл Trade.mqh и посмотрите методы

   bool              Buy(const double volume,const string symbol=NULL,double price=0.0,const double sl=0.0,const double tp=0.0,const string comment="");
   bool              Sell(const double volume,const string symbol=NULL,double price=0.0,const double sl=0.0,const double tp=0.0,const string comment="");
   bool              BuyLimit(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,
                              const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment="");
   bool              BuyStop(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,
                             const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment="");
   bool              SellLimit(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,
                               const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment="");
   bool              SellStop(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,
                              const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment="");
 
Alexey Viktorov #:

Откройте файл Trade.mqh и посмотрите методы

Если я правильно понимаю, то при использовании Buy или Sell по умолчанию используется цена равная 0.0. Таким образом при получении такой команды используется покупка "по рынку". 

По другому говоря  Buy или Sell осуществляет покупку только по рынку (в базовом варианте), и никакую цену можно не использовать. А для указания конкретной цены необходимо использовать Limit`ные ордера.

Я правильно Вас понял?

 
m.kodash #:

Если я правильно понимаю, то при использовании Buy или Sell по умолчанию используется цена равная 0.0. Таким образом при получении такой команды используется покупка "по рынку". 

По другому говоря  Buy или Sell осуществляет покупку только по рынку (в базовом варианте), и никакую цену можно не использовать. А для указания конкретной цены необходимо использовать Limit`ные ордера.

Я правильно Вас понял?

Почти правильно. Правильней сказать отложенные ордера. Они могут быть и ***Limit и ***Stop.

 
Alexey Viktorov #:

Почти правильно. Правильней сказать отложенные ордера. Они могут быть и ***Limit и ***Stop.

Спасибо!