Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 82
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
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.