Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 30
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 suis en train d'apprendre, j'essaie d'utiliser le guide, mais je me rends compte que j'obtiens des choses insensées, j'aimerais voir un exemple de la façon de procéder.
Bonjour à tous ! Pouvez-vous m'indiquer comment définir la suppression d'un ordre dans un EA ?
La situation est la suivante :
Nous plaçons 2ordres en attente dans des directions différentes, dès que l'un d'eux se déclenche, l'autre est supprimé et n'est plus exposé.
Je vous serais très reconnaissant de toute aide.
Merci.
Quelque chose comme ça
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderType()>1)//Если найденный ордер отложенный
{
ticket=OrderTicket();//Запомним его тикет
}
else//Если ордер не отложенный
{
trade=1;//Запомним,что есть открытая позиция
}
if(ticket!=0 && trade==1)//И если известен отложенный и открыта позиция
{
int OD=OrderDelete(ticket);//Удаляем отложенный
}
}
"Continuons à chercher" doit être supprimé !
Vous pouvez modifier vos propres messages sur le forum. Tout ce que vous avez écrit dans les différents posts ci-dessus peut être résumé en un seul.
Salut ! J'ai introduit un chalut takeprofit en utilisant l'algorithme suivant :
if(total>0)
{for (int i=OrdersTotal()-1 ; i>=0 ; i--)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magique && OrderSymbol()==asset& OrderType()==OP_BUY)
{
RefreshRates() ;
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
TAKEPROFIT CONDITION ;
ORDONNER LA MODIFICATION D'UNE NOUVELLE TAKEPROFIT ;
}
}
}
}
Mais la limite de temps ne fonctionne pas pour une raison quelconque et il se trouve que si une position n'est pas fermée dans le cadre temporel actuel, elle se déplace également dans le cadre temporel suivant si les conditions sont remplies.
Quel est le problème avec mon dernier if() ?
Bonjour ! J'ai introduit un chalut takeprofit en utilisant l'algorithme suivant :
si(total>0)
{for (int i=OrdersTotal()-1 ; i>=0 ; i--)
si(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderMagicNumber()==magique && OrderSymbol()==asset && OrderType()==OP_BUY)
{
RefreshRates() ;
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
CONDITION DE TP DE QUEUE ;
{ MODIFICATION DE LA COMMANDE AU NOUVEAU PROFIT ;
}
}
}
}
Mais pour une raison quelconque, la limite de temps ne fonctionne pas, et il arrive que si la position n'est pas fermée dans le cadre temporel actuel, elle se termine dans le suivant aussi, si les conditions sont remplies.
Quel est le problème avec mon dernier if() ?
Eh bien, je ne sais pas, je n'ai encore rien vu d'anormal. J'ai supprimé la vérification redondante du nombre d'ordres (elle est déjà présente dans les conditions de la boucle) et ajouté une vérification pour les deux types de positions (Achat et Vente).
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
Où // les conditions de chalutage et de modification, insérez Print() avec les valeurs des variables temporelles et voyez ce que dit le journal.
Je ne sais pas, je ne vois pas encore ce qui cloche avec un coup d'œil rapide. J'ai supprimé le contrôle inutile du nombre d'ordres (il est déjà présent dans les conditions de cycle) et ajouté le contrôle des deux types de positions (Achat et Vente).
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS)) {
if(OrderType()>OP_SELL) continue;
if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
// УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
// МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
}
}
}
}
//+------------------------------------------------------------------+
Où // conditions de chalutage et de modification, insérer Print() avec les valeurs des variables temporelles et voir ce que dit le journal.
J'ai des conditions différentes pour la vente, donc je n'ai montré que BUY.
" avec des variables temporelles " - voulez-vous dire TimeCurrent() ? Désolé si cela vous surprend - je suis un zéro-zéro en programmation.
Et je ne comprends pas ceci -OrderType()>OP_SELL. Pourquoi > ? Le type d'ordre OP_SELL a une valeur = 1 etOP_BUY = 0. Il doit donc être <= ? Merci.
J'ai des conditions de chalutage différentes pour SELL, donc je n'ai montré que BAI.
" avec des valeurs de variables temporelles " - voulez-vous dire TimeCurrent() ? Désolé si cela vous surprend - je suis un zéro-zéro en programmation.
Et je ne comprends pas ceci -OrderType()>OP_SELL. Pourquoi > ? Le type d'ordre OP_SELL a une valeur = 1 etOP_BUY = 0. Il doit donc être <= ? Merci.
Salutations. Pourriez-vous me dire pourquoi dans le cas de l'entrée suivante
if (x!=maxpr1){x=maxpr1 ; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1 ; OrderDelete(ticketUP);}
Le système génère constamment des erreurs
: ticket invalide pour la fonction OrderDelete
: Erreur de suppression de commande 4051
Selon le livre de référence, c'est
Valeur invalide du paramètre de fonction
Bien que les paramètres semblent être les mêmes.
Bien que si vous supprimez la condition et laissez seulement
CommandeSuppression(ticketD) ;
CommandeDelete(ticketUP) ;
il supprime avec succès (mais j'en ai besoin par condition). Qu'est-ce que je fais de mal ?
Salutations. Pourriez-vous me dire pourquoi dans le cas de l'entrée suivante
if (x!=maxpr1){x=maxpr1 ; OrderDelete(ticketD);}
if (z!=minpr1){z=minpr1 ; OrderDelete(ticketUP);}
Le système génère constamment des erreurs
: ticket invalide pour la fonction OrderDelete
: Erreur de suppression de commande 4051
Selon le livre de référence, c'est
Valeur invalide du paramètre de fonction
Bien que les paramètres semblent être les mêmes.
Bien que si vous supprimez la condition et laissez seulement
CommandeSuppression(ticketD) ;
CommandeDelete(ticketUP) ;
il supprime avec succès (mais j'en ai besoin par condition). Qu'est-ce que je fais de mal ?