Добрый день!
В написании торговых роботов являюсь начинающим, в данный момент изучаю эту тему. Столкнулся с небольшими сложностями, а именно, при помощи класса CTrade выставляю ордер:
Если я правильно понимаю, .Buy использует алгоритм отложенного ордера и по этому Trade.ResultPrice() это цена которую я заказал брокеру, Trade.RequestPrice() это цена которую подтвердил брокер, а вот если график сдвинулся то фактическая цена исполнения будет совершенно другой, и мне необходимо узнать данную цену исполнения ордера.
Я так понимаю, что цену исполнения ордера я могу узнать через COrderInfo, CDealInfo или CHistoryOrderInfo? Какой из данных классов для этого использовать проще всего или может есть какой то другой способ узнать цену исполнения ордера зная тикет ордера?
Или может у класса CTrade есть какой то алгоритм способный дать цену исполнения?
Заранее спасибо!
С почином! А не надо гадать, надо зайти в коды нужного класса и просто посмотреть, что и как там реализовано. Например:
bool CTrade::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="") { //--- check volume if(volume<=0.0) { m_result.retcode=TRADE_RETCODE_INVALID_VOLUME; return(false); } //--- check symbol string symbol_name=(symbol==NULL) ? _Symbol : symbol; //--- check price if(price==0.0) price=SymbolInfoDouble(symbol_name,SYMBOL_ASK); //--- return(PositionOpen(symbol_name,ORDER_TYPE_BUY,volume,price,sl,tp,comment)); }
Как видно в последней строке, в PositionOpen передается тип ордера ORDER_TYPE_BUY. Если вы не знаете, это перечисление (enum) и его легко посмотреть в справке редактора. Курсор на ORDER_TYPE_BUY, жамкаем на F1 и впитываем мудрость Метаквотов )):
ORDER_TYPE_BUY
Рыночный ордер на покупку
Для отложенников будут другие значения, в справке все прокомментировано. И когда вы посылаете рыночный ордер, он срабатывает максимально быстро, обычно десятки-сотни мс. После чего открывается позиция, а ордер уходит в историю. Вот у позиции и надо смотреть параметры:
double CPositionInfo::PriceOpen(void) const { return(PositionGetDouble(POSITION_PRICE_OPEN)); }
Успехов в изучении MQL5, как говорил Лао-Цзы, путь в тысячу ли начинается с первого шага!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
В написании торговых роботов являюсь начинающим, в данный момент изучаю эту тему. Столкнулся с небольшими сложностями, а именно, при помощи класса CTrade выставляю ордер:
Если я правильно понимаю, .Buy использует алгоритм отложенного ордера и по этому Trade.ResultPrice() это цена которую я заказал брокеру, Trade.RequestPrice() это цена которую подтвердил брокер, а вот если график сдвинулся то фактическая цена исполнения будет совершенно другой, и мне необходимо узнать данную цену исполнения ордера.
Я так понимаю, что цену исполнения ордера я могу узнать через COrderInfo, CDealInfo или CHistoryOrderInfo? Какой из данных классов для этого использовать проще всего или может есть какой то другой способ узнать цену исполнения ордера зная тикет ордера?
Или может у класса CTrade есть какой то алгоритм способный дать цену исполнения?
Заранее спасибо!