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
Je n'ai jamais manipulé d'événement OnTradeTransaction () auparavant, il n'y avait pas besoin de le faire car la logique de trading n'avait pas besoin de prendre en compte ce qui avait déclenché l'événement. SL ou TP. Suggérez-vous que c'est une preuve de mon expérience commerciale ?))))
Je lis très attentivement, mais je ne vois personne donner une réponse sensée sous la forme d'un code fonctionnel. Ou est-ce un putain de grand secret et une grande magie - la connaissance secrète et la capacité de déterminer ce qui fonctionne ?
Je n'écris pas d'EAs sur commande, surtout pour le FOREX.
Vous avez maintenant toutes les connaissances nécessaires pour écrire un code raisonnable,
qui répond à vos besoins.
Je n'écris pas d'EAs sur commande, surtout pour le FOREX.
Vous avez maintenant toutes les connaissances nécessaires pour écrire un code judicieux,
qui répond à vos besoins.
Et qui vous a demandé d'écrire sur commande ?
Poser une question sur ce forum signifie aujourd'hui écrire pour commander ?
Allez au diable, vous tous. Vous êtes des vendeurs.
...
Et si vous regardez l'historique du compte pour voir le commentaire de la dernière transaction, cela vous convient-il ?
Quelque chose comme ça :
//| Возвращает причину закрытия позиции по Take Profit |
//+------------------------------------------------------------------+
bool CAccountHistory::IsClosedByTakeProfit(const string symbol)
{
//--- Получим комментарий последней сделки на указанном символе
string last_comment=LastDealComment(symbol);
//--- Если в комментарии есть строка "tp"
if(StringFind(last_comment,"tp",0)>-1)
return(true);
//--- Если нет строки "tp"
return(false);
}
//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Stop Loss |
//+------------------------------------------------------------------+
bool CAccountHistory::IsClosedByStopLoss(const string symbol)
{
//--- Получим комментарий последней сделки на указанном символе
string last_comment=LastDealComment(symbol);
//--- Если в комментарии есть строка "sl"
if(StringFind(last_comment,"sl",0)>-1)
return(true);
//--- Если нет строки "sl"
return(false);
}
//+------------------------------------------------------------------+
//| Возвращает комментарий последней сделки на указанном символе |
//+------------------------------------------------------------------+
string CAccountHistory::LastDealComment(const string symbol)
{
int total_deals =0; // Всего сделок в списке выбранной истории
string deal_symbol =""; // Символ сделки
string deal_comment =""; // Комментарий сделки
//--- Если история сделок получена
if(HistorySelect(0,TimeCurrent()))
{
//--- Получим количество сделок в полученном списке
total_deals=HistoryDealsTotal();
//--- Пройдемся по всем сделкам в полученном списке от последней сделки к первой
for(int i=total_deals-1; i>=0; i--)
{
//--- Получим комментарий сделки
deal_comment=HistoryDealGetString(HistoryDealGetTicket(i),DEAL_COMMENT);
//--- Получим символ сделки
deal_symbol=HistoryDealGetString(HistoryDealGetTicket(i),DEAL_SYMBOL);
//--- Если символ сделки и текущий символ равны, остановим цикл
if(deal_symbol==symbol)
break;
}
}
//---
return(deal_comment);
}
Et si vous regardez l'historique du compte pour voir le commentaire de la dernière transaction, cela vous convient-il ?
Quelque chose comme ça :
Merci, gentil monsieur !
Probablement le moyen le plus fiable, étant donné que SL et TP peuvent glisser et que la comparaison des prix serait inutile.
Et si vous regardez l'historique du compte pour voir le commentaire de la dernière transaction, cela vous convient-il ?
Quelque chose comme ça :
Et s'il n'y a pas de commentaire (ce qui est tout à fait possible) ?
C'est probablement le moyen le plus fiable, étant donné que SL et TP peuvent glisser et qu'une comparaison des prix serait inutile.
{
int OrderType=(int)::HistoryOrderGetInteger(OrderTicket,ORDER_TYPE);
if((OrderType==ORDER_TYPE_BUY) || (OrderType==ORDER_TYPE_SELL))
{
const string OrderComment=HistoryOrderGetString(OrderTicket,ORDER_COMMENT);
const string OrderPrice=::DoubleToString(::HistoryOrderGetDouble(OrderTicket,ORDER_PRICE_OPEN),
(int)::SymbolInfoInteger(HistoryOrderGetString(OrderTicket,ORDER_SYMBOL),SYMBOL_DIGITS));
if(OrderComment=="tp "+OrderPrice)
OrderType=ORDER_TYPE_TAKEPROFIT;
else if(OrderComment=="sl "+OrderPrice)
OrderType=ORDER_TYPE_STOPLOSS;
}
return(OrderType);
}
Et s'il n'y a pas de commentaire (ce qui est tout à fait possible) ?
Tout à fait possible, bien sûr. J'utilise cette méthode pour analyser l'historique dans le testeur, car c'est la plus simple et la plus rapide.
Dans ce cas, je dois faire et analyser des tickets avec des ordres en attente. Je n'ai pas d'exemple sous la main.
fermé une position .
Il ne s'agit pas d'une accusation sans discernement, mais du résultat d'heures passées à essayer de comprendre (l'absence de HistorySelectByPosition et d'autres trucs n'aide pas) comment tout fonctionne. Et je suis heureux de m'excuser si je me trompe. Pour ne pas être sans fondement, je montre un Expert Advisor pour le testeur (il est plus facile à comprendre) sur le serveur RoboForexEU-MetaTrader 5, qui ouvre une position, puis met des niveaux SL et TP.
Dans cet EA, le SL et le TP d'une seule position fermée ne peuvent pas être définis (dans OnDeinit). C'est censé faire ça ?
Tout à fait possible, bien sûr. J'utilise celui-ci pour analyser l'historique dans le testeur, car c'est le plus facile et le plus rapide.
Et donc, avec les ordres en suspens, vous devez faire et analyser des tickets. Je n'ai pas d'exemple tout fait sous la main.
Qu'est-ce qui ne vous a pas convenu dans cette méthode ?
if (trans.order != my_order_ticket)
{
//Сработал SL или TP
}
break;
Quel est le problème de cette méthode ?
if (trans.order != my_order_ticket)
{
//Сработал SL или TP
}
break;