![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Oh e anche, la funzione standard supporta l'esecuzione degli ordini, la loro archiviazione, perché usavo SeaTrade per aprire fino ad arrivare a una borsa dove gli ordini non volevano essere eseguiti perché non c'era modo di determinare l'archiviazione
SetTypeFilling
SetTypeFilling
Imposta il tipo di ordine compilando
Stabilite voi ciò che ritenete opportuno.
Sì e mi è stato assicurato in un thread precedente dai guru di questo forum che questa informazione arriva sempre... quasi istantaneamente... e se il ticket non viene emesso quando il server risponde positivamente, allora l'ordine è fallito
Provate anche a chiamare l'evento OnTradeTransaction. Da qualche parte ho un esempio di ascolto di tutte le operazioni commerciali. Se non mi sbaglio, Rosh era lì. Cercatelo...
In generale, è una buona idea inserire delle pause tra le operazioni commerciali ;-)
Ora i guru qui insegneranno anche a te ))
Con la tua esperienza, è sconveniente fare queste domande qui.
Cos'è questa sciocchezza?
Prova anche a fare riferimento all'evento OnTradeTransaction. Da qualche parte ho trovato un esempio di ascolto di tutte le operazioni commerciali. Se non mi sbaglio, l'ha postato Rosh. Cercatelo...
SetTypeFilling
SetTypeFilling
Imposta il tipo di ordine compilando
Impostate ciò che ritenete opportuno.
Cos'è questa sciocchezza?
Prova anche a fare riferimento all'evento OnTradeTransaction. Da qualche parte c'era un esempio di ascolto di tutte le operazioni commerciali. Se non mi sbaglio, l'ha postato Rosh. Cercatelo...
In generale, è una buona idea inserire delle pause tra le operazioni commerciali ;-)
Stavo già pensando all'ibernazione, ma non è il modo migliore per uscirne....
La via d'uscita ottimale è aspettare l'arrivo della transazione. In termini di transazione, questo è "TRADE_TRANSACTION_DEAL_ADD".
Vladimir Karputov ne ha scritto molte volte. Cerca anche i rami.
Ecco un'intercettazione che ho trovato.
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//---
static int counter=0; // счетчик вызовов OnTradeTransaction()
static uint lasttime=0; // время последнего вызова OnTradeTransaction()
//---
uint time=GetTickCount();
//--- если последняя транзакция была больше 1 секунды назад
if(time-lasttime>1000)
{
counter=0; // значит, это новая торговая операция и можно сбросить счетчик
if(IS_DEBUG_MODE)
Print(" Новая торговая операция");
}
lasttime=time;
counter++;
Print(counter,". ",__FUNCTION__);
//--- результат выполнения торгового запроса
ulong lastOrderID =trans.order;
ENUM_ORDER_TYPE lastOrderType =trans.order_type;
ENUM_ORDER_STATE lastOrderState=trans.order_state;
//--- имя символа, по которому произошла транзакция
string trans_symbol=trans.symbol;
//--- тип транзакции
ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
switch(trans.type)
{
case TRADE_TRANSACTION_POSITION: // изменение позиции
{
ulong pos_ID=trans.position;
PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f",
pos_ID,trans_symbol,trans.price_sl,trans.price_tp);
}
break;
case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса
{
PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST");
break;
}
case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки
{
ulong lastDealID =trans.deal;
ENUM_DEAL_TYPE lastDealType =trans.deal_type;
double lastDealVolume=trans.volume;
//--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(HistoryDealSelect(lastDealID))
Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket);
PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type),
lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket);
}
break;
case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_FILLED)
{
if(HistoryOrderSelect(lastOrderID))
Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket);
}
break;
default: // прочие транзакции
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_PLACED)
{
if(OrderSelect(lastOrderID))
Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket);
}
break;
}
//--- тикет ордера
ulong orderID_result=result.order;
string retcode_result=this.GetRetcodeID(result.retcode);
if(orderID_result!=0)
PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result);
}
In generale, è un buon tono per inserire delle pause tra gli scambi ;-)
Non capisco cosa significa il tuo sorriso?
Non mi aspettavo di sentirti dire questo. Quali pause, o stai scherzando?
La migliore via d'uscita è aspettare l'arrivo della transazione. In termini di transazione questo è "TRADE_TRANSACTION_DEAL_ADD".
Ecco un'intercettazione che ho trovato.
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//---
static int counter=0; // счетчик вызовов OnTradeTransaction()
static uint lasttime=0; // время последнего вызова OnTradeTransaction()
//---
uint time=GetTickCount();
//--- если последняя транзакция была больше 1 секунды назад
if(time-lasttime>1000)
{
counter=0; // значит, это новая торговая операция и можно сбросить счетчик
if(IS_DEBUG_MODE)
Print(" Новая торговая операция");
}
lasttime=time;
counter++;
Print(counter,". ",__FUNCTION__);
//--- результат выполнения торгового запроса
ulong lastOrderID =trans.order;
ENUM_ORDER_TYPE lastOrderType =trans.order_type;
ENUM_ORDER_STATE lastOrderState=trans.order_state;
//--- имя символа, по которому произошла транзакция
string trans_symbol=trans.symbol;
//--- тип транзакции
ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
switch(trans.type)
{
case TRADE_TRANSACTION_POSITION: // изменение позиции
{
ulong pos_ID=trans.position;
PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f",
pos_ID,trans_symbol,trans.price_sl,trans.price_tp);
}
break;
case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса
{
PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST");
break;
}
case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки
{
ulong lastDealID =trans.deal;
ENUM_DEAL_TYPE lastDealType =trans.deal_type;
double lastDealVolume=trans.volume;
//--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(HistoryDealSelect(lastDealID))
Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket);
PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type),
lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket);
}
break;
case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_FILLED)
{
if(HistoryOrderSelect(lastOrderID))
Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket);
}
break;
default: // прочие транзакции
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_PLACED)
{
if(OrderSelect(lastOrderID))
Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket);
}
break;
}
//--- тикет ордера
ulong orderID_result=result.order;
string retcode_result=this.GetRetcodeID(result.retcode);
if(orderID_result!=0)
PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result);
}
La migliore via d'uscita è aspettare l'arrivo della transazione. In termini di transazione questo è "TRADE_TRANSACTION_DEAL_ADD".
Ecco un'intercettazione che ho trovato.
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
//---
static int counter=0; // счетчик вызовов OnTradeTransaction()
static uint lasttime=0; // время последнего вызова OnTradeTransaction()
//---
uint time=GetTickCount();
//--- если последняя транзакция была больше 1 секунды назад
if(time-lasttime>1000)
{
counter=0; // значит, это новая торговая операция и можно сбросить счетчик
if(IS_DEBUG_MODE)
Print(" Новая торговая операция");
}
lasttime=time;
counter++;
Print(counter,". ",__FUNCTION__);
//--- результат выполнения торгового запроса
ulong lastOrderID =trans.order;
ENUM_ORDER_TYPE lastOrderType =trans.order_type;
ENUM_ORDER_STATE lastOrderState=trans.order_state;
//--- имя символа, по которому произошла транзакция
string trans_symbol=trans.symbol;
//--- тип транзакции
ENUM_TRADE_TRANSACTION_TYPE trans_type=trans.type;
switch(trans.type)
{
case TRADE_TRANSACTION_POSITION: // изменение позиции
{
ulong pos_ID=trans.position;
PrintFormat("MqlTradeTransaction: Position #%d %s modified: SL=%.5f TP=%.5f",
pos_ID,trans_symbol,trans.price_sl,trans.price_tp);
}
break;
case TRADE_TRANSACTION_REQUEST: // отправка торгового запроса
{
PrintFormat("MqlTradeTransaction: TRADE_TRANSACTION_REQUEST");
break;
}
case TRADE_TRANSACTION_DEAL_ADD: // добавление сделки
{
ulong lastDealID =trans.deal;
ENUM_DEAL_TYPE lastDealType =trans.deal_type;
double lastDealVolume=trans.volume;
//--- идентификатор сделки во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(HistoryDealSelect(lastDealID))
Exchange_ticket=HistoryDealGetString(lastDealID,DEAL_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX deal=%s)",Exchange_ticket);
PrintFormat("MqlTradeTransaction: %s deal #%d %s %s %.2f lot %s",EnumToString(trans_type),
lastDealID,EnumToString(lastDealType),trans_symbol,lastDealVolume,Exchange_ticket);
}
break;
case TRADE_TRANSACTION_HISTORY_ADD: // добавление ордера в историю
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_FILLED)
{
if(HistoryOrderSelect(lastOrderID))
Exchange_ticket=HistoryOrderGetString(lastOrderID,ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("(MOEX ticket=%s)",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),trans_symbol,EnumToString(lastOrderState),Exchange_ticket);
}
break;
default: // прочие транзакции
{
//--- идентификатор ордера во внешней системе - тикет, присваиваемый Московской биржей
string Exchange_ticket="";
if(lastOrderState==ORDER_STATE_PLACED)
{
if(OrderSelect(lastOrderID))
Exchange_ticket=OrderGetString(ORDER_EXTERNAL_ID);
if(Exchange_ticket!="")
Exchange_ticket=StringFormat("MOEX ticket=%s",Exchange_ticket);
}
PrintFormat("MqlTradeTransaction: %s order #%d %s %s %s",EnumToString(trans_type),
lastOrderID,EnumToString(lastOrderType),EnumToString(lastOrderState),Exchange_ticket);
}
break;
}
//--- тикет ордера
ulong orderID_result=result.order;
string retcode_result=this.GetRetcodeID(result.retcode);
if(orderID_result!=0)
PrintFormat("MqlTradeResult: order #%d retcode=%s ",orderID_result,retcode_result);
}
E se non si ascolta e non si dorme, c'è un altro modo per far sapere all'EA che siamo in attesa quando l'ordine è positivo ma non c'è ancora una posizione?