Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Отвечая на вопрос темы "Как правильно работать в MT5 с OrderSend"
Есть простой ответ
Пока рзработчики не исправят недочёт, то
ulong order_ticket; //Тикет ордера
//---
if(OrderSend(request,result))
{
if(result.retcode==TRADE_RETCODE_DONE)
{
pre_ticket=result.order;
}
}
//----------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch(trans.type)
{
case TRADE_TRANSACTION_ORDER_UPDATE:
if((pre_ticket>0) && (trans.order==pre_ticket))
{
switch(trans.order_state)
{
case ORDER_STATE_PLACED:
order_ticket = pre_ticket;
break;
}
}
break;
}
}
А когда исправят, то
//---
if(OrderSend(request,result))
{
if(result.retcode==TRADE_RETCODE_DONE)
{
order_ticket=result.order;
}
}
что-то у меня общее впечатление, что 5-ка сырая-сырая...
Никто не застрахован от ошибок.
Другое дело, что ошибки очень долго исправляются.
Отвечая на вопрос темы "Как правильно работать в MT5 с OrderSend"
Есть простой ответ
Пока рзработчики не исправят недочёт, то
ulong order_ticket; //Тикет ордера
//---
if(OrderSend(request,result))
{
if(result.retcode==TRADE_RETCODE_DONE)
{
pre_ticket=result.order;
}
}
//----------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch(trans.type)
{
case TRADE_TRANSACTION_ORDER_UPDATE:
if((pre_ticket>0) && (trans.order==pre_ticket))
{
switch(trans.order_state)
{
case ORDER_STATE_PLACED:
order_ticket = pre_ticket;
break;
}
}
break;
}
}
А если пачка OrderSend?
А когда исправят, то
А если пачка OrderSend?
Для любителей ПАЧЕК
ulong order_ticket_1 = 0; //Тикет ордера
ulong order_ticket_2 = 0; //Тикет ордера
ulong order_ticket_3 = 0; //Тикет ордера
ulong order_ticket_4 = 0; //Тикет ордера
ulong order_ticket_5 = 0; //Тикет ордера
uint num_order = 0;
//---
if(OrderSend(request,result))
{
if(result.retcode==TRADE_RETCODE_DONE)
{
pre_ticket=result.order;
num_order++;
}
}
//----------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch(trans.type)
{
case TRADE_TRANSACTION_ORDER_UPDATE:
if((pre_ticket>0) && (trans.order==pre_ticket))
{
switch(trans.order_state)
{
case ORDER_STATE_PLACED:
switch(num_order)
{
case 1:
order_ticket_1 = pre_ticket;
pre_ticket = 0;
break;
case 2:
order_ticket_2 = pre_ticket;
pre_ticket = 0;
break;
case 3:
order_ticket_3 = pre_ticket;
pre_ticket = 0;
break;
case 4:
order_ticket_4 = pre_ticket;
pre_ticket = 0;
break;
case 5:
order_ticket_5 = pre_ticket;
pre_ticket = 0;
break;
}
break;
}
}
break;
}
}
void OnTick()
{
if(pre_ticket == 0)
{
OrderSend();////////
}
}
Или так
ulong pre_ticket = 0; //Претикет ордера
ulong order_ticket_1 = 0; //Тикет ордера
ulong order_ticket_2 = 0; //Тикет ордера
ulong order_ticket_3 = 0; //Тикет ордера
ulong order_ticket_4 = 0; //Тикет ордера
ulong order_ticket_5 = 0; //Тикет ордера
uint num_order = 0;
//---
if(OrderSend(request,result))
{
if(result.retcode==TRADE_RETCODE_DONE)
{
pre_ticket=result.order;
num_order++;
}
}
//----------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch(trans.type)
{
case TRADE_TRANSACTION_ORDER_UPDATE:
if((pre_ticket>0) && (trans.order==pre_ticket))
{
switch(trans.order_state)
{
case ORDER_STATE_PLACED:
switch(num_order)
{
case 1:
order_ticket_1 = pre_ticket;
pre_ticket = 0;
OrderSend();
break;
case 2:
order_ticket_2 = pre_ticket;
pre_ticket = 0;
OrderSend();
break;
case 3:
order_ticket_3 = pre_ticket;
pre_ticket = 0;
OrderSend();
break;case 4:
order_ticket_4 = pre_ticket;
pre_ticket = 0;
OrderSend();
break;
case 5:
order_ticket_5 = pre_ticket;
pre_ticket = 0;
break;
}
break;
}
}
break;
}
}
Не исправят. Это фишка.
Жаль, что разработчики никак не комментируют ситуацию с OrderSend()
"Фишка" ли это или поправят?...
Не исправят. Это фишка.
В СД ответили, что со следующего билда OrderSend() будет работать как надо :)
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Как правильно работать в MT5 с OrderSend
Renat Fatkhullin, 2016.10.10 22:44
Абсолютно синхронная.
Это означает, что функция ждет ответа в полный круг на свой запрос. И получает ответ "да, исполнено". Максимально быстро.
Вы совершенно не понимаете окружения и путаете понятия. Вы пытаетсь приплюсовать к понятию OrderSend процесс "должен достать из историисделок или открытых позиций полностью оформленную структуру сделки или позиции".
Тем не менее мне ответили, что я ниписал выше.
Может быть Вы не очень убедительно написали или не так привели доводы о недочёте функции.