Vitalie Postolache: Un compteur doit être lancé et remis à sa valeur initiale lorsqu'un certain seuil est atteint :
Merci.
Aidez-moi à résoudre un problème.
Il y a 3 positions d'achat, une position de vente est apparue, nous devons fermer la position de vente et la position d'achat la plus ancienne. Deux positions d'achat devraient rester.
Je les ai toutes fermées.
voidOnTick() { //--- int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if (OrderType()==OP_BUY) b++; if (OrderType()==OP_SELL) s++; if (OrderType()==OP_BUYSTOP) b_STOP++; if (OrderType()==OP_SELLSTOP) s_STOP++; } if (OrderType()==OP_BUY) { if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция { OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE); CLOSEORDER(OP_SELL); } } } }
Qu'en est-il de la boucle avec un lot ? Je l'ai copié incorrectement ici, en corrigeant le signeif(OrderProfit()>0&&OrderType()<2), mais cela ne change pas l'essence, la boucle fonctionne correctement sans cette condition.
Et à propos de la boucle avec un lot ? Je l'ai copié incorrectement ici, j'ai corrigé le signeif(OrderProfit()>0&&OrderType()<2), mais cela ne change pas l'essence, la boucle fonctionne correctement sans cette condition.
Artyom Trishkin: Où sont déclarés les jours 1 et 2 ?
Je pense que je sélectionne mal l'ordre, cela ne fonctionne pas(OrderProfit()<0), je dois être plus précis sur l'ordre dont j'ai besoin. Je ne sais pas pourquoi il saute une commande lorsque la dernière a été clôturée au point de prise et qu'il n'y en a pas d'autres. Peut-être que, si je veux faire une recherche dans l'historique, la boucle devrait être construite différemment ?
La raison en est que les conseillers experts construisent des boucles avec des conditions similaires et qu'ils fonctionnent comme il se doit, mais ils fonctionnent en utilisantOrdersTotal().
Il y a 3 positions d'achat, une position de vente est apparue, nous devons fermer la position de vente et la position d'achat la plus ancienne. Deux positions d'achat devraient rester.
Ils sont tous fermés.
voidOnTick() { //--- int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if (OrderType()==OP_BUY) b++; if (OrderType()==OP_SELL) s++; if (OrderType()==OP_BUYSTOP) b_STOP++; if (OrderType()==OP_SELLSTOP) s_STOP++; } if (OrderType()==OP_BUY) { if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция { OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE); CLOSEORDER(OP_SELL); } } } }
Ce problème ne peut être résolu en un seul cycle. Dans cette boucle, vous devez mémoriser les tickers des ordres à supprimer dans le tableau, dans la boucle suivante, vous devez les supprimer par tickers.
De plus, vous avez un problème avec les accolades, vous travaillez avec des commandes en dehors du blocOrderSelect{}, ce qui est incorrect.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Vous obtiendrez le dernier perdant, ce qu'il faut en faire et les paramètres à ajuster pour vous-même, je pense que vous trouverez.
Merci, je crois que j'ai trouvé.
Comment faire en sorte que le lot revienne à sa valeur initiale après la prise de bénéfices?
{
lot=0.1
}
Merci, je crois que j'ai trouvé.
Comment faire pour que le lot revienne à sa valeur initiale après la prise de bénéfices?
{
lot=0.1
}
J'ai le schéma suivant
si (OrdersTotal()==0)
{
ouvert avec le lot initial
}
sinon
...
c'est-à-dire que s'il n'y a pas d'ordres, il ne s'ouvrira pas avec l'ancien lot.
Bien sûr, il est possible de mémoriser chaque ordre, mais ils ne nous disent pas comment faire.Un compteur doit être lancé et remis à sa valeur initiale lorsqu'un certain seuil est atteint :
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Expliquez pourquoi la fonction OrderProfit()<0 ne fonctionne pas ?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
Je veux voir combien de stoploss par jour de la semaine.
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()>0 && OrderType()<2)
{
lot=0.01;
}
}
}
et ici je pense que c'est la même raison pour laquelle ça ne marche pas
Expliquez pourquoi la fonction OrderProfit()<0 ne fonctionne pas ?
{
if(OrderSelect(q,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderType()<2 && OrderMagicNumber()==magic)
{
if (OrderProfit()<0)
{
if (DayOfWeek()==1)
{
day1++;
Print ("Понедельник SL=",day1);
}
if (DayOfWeek()==2)
{
day2++;
Print ("Вторник SL=",day2);
}
}
}
}
}
Je veux voir combien de stoploss par jour de la semaine.
{
if(OrderSelect(l,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()<0 && OrderType()<2)
{
oldticket=OrderTicket();
}
if (oldticket>=ticket)
{
ticket=oldticket;
lot=OrderLots()*4;
}
if (OrderProfit()<0 && OrderType()<2)
{
lot=0.01;
}
}
}
et j'en déduis que c'est la même raison pour laquelle ça ne marche pas.
Parce que DayOfWeek() renvoie le numéro d'ordre du jour de la semaine de la dernière heure connue du serveur.
Et vous avez besoin du jour de la semaine de l'heure de clôture de l'ordre : TimeDayOfWeek(OrderCloseTime()) ;
Parce que DayOfWeek() renvoie le numéro d'ordre du jour de la semaine de la dernière heure connue du serveur.
Et vous avez besoin du jour de la semaine de l'heure de clôture de l'ordre : TimeDayOfWeek(OrderCloseTime()) ;
Mais le résultat est le même, comme si on ignoraitif(OrderProfit()<0) et qu'il y a une boucle, les variables prennent des valeurs importantes.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
Qu'en est-il de la boucle avec un lot ? Je l'ai copié incorrectement ici, en corrigeant le signeif(OrderProfit()>0&&OrderType()<2), mais cela ne change pas l'essence, la boucle fonctionne correctement sans cette condition.
Mais le résultat est le même, comme sisi(OrderProfit()<0) est ignoré et qu'il y a une boucle, les variables ont de grandes valeurs.
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963666
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Вторник SL=1430207
2017.01.19 00:42:47.883 2014.02.20 23:59:48 EURUSD,H1: Понедельник SL=963665
Et à propos de la boucle avec un lot ? Je l'ai copié incorrectement ici, j'ai corrigé le signeif(OrderProfit()>0&&OrderType()<2), mais cela ne change pas l'essence, la boucle fonctionne correctement sans cette condition.
Où sont déclarés les jours 1 et 2 ?
Où sont déclarés les jours 1 et 2 ?
Je pense que je sélectionne mal l'ordre, cela ne fonctionne pas(OrderProfit()<0), je dois être plus précis sur l'ordre dont j'ai besoin. Je ne sais pas pourquoi il saute une commande lorsque la dernière a été clôturée au point de prise et qu'il n'y en a pas d'autres. Peut-être que, si je veux faire une recherche dans l'historique, la boucle devrait être construite différemment ?
{
if(OrderSelect(w,SELECT_BY_POS,MODE_HISTORY))
La raison en est que les conseillers experts construisent des boucles avec des conditions similaires et qu'ils fonctionnent comme il se doit, mais ils fonctionnent en utilisantOrdersTotal().
{
if(OrderSelect(n,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic)
{
if(OrderType()>OP_SELL)
{
//---
int b_STOP,s_STOP,b=0,s=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY) b++;
if (OrderType()==OP_SELL) s++;
if (OrderType()==OP_BUYSTOP) b_STOP++;
if (OrderType()==OP_SELLSTOP) s_STOP++;
}
if (OrderType()==OP_BUY)
{
if(b>=1&&s==1)//бай позиций больше или 1 и появилась SELL позиция
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,CLR_NONE);
CLOSEORDER(OP_SELL);
}
}
}
}
Ce problème ne peut être résolu en un seul cycle. Dans cette boucle, vous devez mémoriser les tickers des ordres à supprimer dans le tableau, dans la boucle suivante, vous devez les supprimer par tickers.
De plus, vous avez un problème avec les accolades, vous travaillez avec des commandes en dehors du blocOrderSelect{}, ce qui est incorrect.