
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Oh et aussi, est-ce que la fonction standard supporte l'exécution des ordres, leur classement, parce que j'avais l'habitude d'utiliser SeaTrade pour ouvrir, jusqu'à ce que j'arrive à un échange où les ordres ne voulaient pas être exécutés parce qu'il n'y avait aucun moyen de déterminer le classement.
SetTypeFilling
SetTypeFilling
Définit le type de commande en remplissant
Vous fixez ce que vous jugez bon.
Oui, et les gourous de ce forum m'ont assuré dans un précédent fil de discussion que cette information arrive toujours... presque instantanément... et que si le ticket n'est pas émis lorsque le serveur répond positivement, alors la commande a échoué.
Essayez également d'appeler l'événement OnTradeTransaction. J'ai quelque part un exemple d'écoute de toutes les opérations commerciales. Si je ne me trompe pas, Rosh était là. Cherchez-le...
En général, c'est une bonne idée d'insérer des pauses entre les opérations commerciales ;-)
Maintenant, les gourous d'ici vont vous apprendre aussi ;))
Avec votre expérience, il est inconvenant de poser de telles questions ici.
C'est quoi cette absurdité ?
Essayez également de vous référer à l'événement OnTradeTransaction. Il y avait quelque part un exemple d'écoute de toutes les opérations commerciales. Si je ne me trompe pas, Rosh l'a posté. Cherchez-le...
SetTypeFilling
SetTypeFilling
Définit le type de commande en remplissant
Fixez ce que vous jugez bon.
C'est quoi cette absurdité ?
Essayez également de vous référer à l'événement OnTradeTransaction. Il y avait quelque part un exemple d'écoute de toutes les opérations commerciales. Si je ne me trompe pas, Rosh l'a posté. Cherchez-le...
En général, c'est une bonne idée d'insérer des pauses entre les opérations commerciales ;-)
Je pensais déjà à l'hibernation, mais ce n'est pas la meilleure solution. ....
La meilleure façon de s'en sortir est d'attendre l'arrivée de la transaction. En termes de transaction, il s'agit de "TRADE_TRANSACTION_DEAL_ADD".
Vladimir Karputov a écrit à ce sujet de nombreuses fois. Recherchez également des branches.
Voici une écoute que j'ai trouvée.
//| 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);
}
En général, il est de bon ton d'insérer des pauses entre les échanges ;-)
Je ne comprends pas ce que signifie votre sourire ?
Je ne m'attendais pas à vous entendre dire ça. Quelles pauses, ou vous plaisantez ?
Le meilleur moyen de s'en sortir est d'attendre que la transaction arrive. En termes de transaction, il s'agit de "TRADE_TRANSACTION_DEAL_ADD".
Voici une écoute que j'ai trouvée.
//| 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);
}
Le meilleur moyen de s'en sortir est d'attendre que la transaction arrive. En termes de transaction, il s'agit de "TRADE_TRANSACTION_DEAL_ADD".
Voici une écoute que j'ai trouvée.
//| 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);
}
Et si vous n'écoutez pas et ne dormez pas, y a-t-il un autre moyen de faire savoir à l'EA que nous attendons lorsque l'ordre est positif mais qu'il n'y a pas encore de position ?