merci beaucoup babs, precieuse aide :)
Devenez membre de la plus grande
communauté francophone sur le Forex
communauté francophone sur le Forex
Partagez, échangez et apprenez en gagnant des crédits sur votre compte de trading
Comment on fait en MQL pour ...
-
Lorka85
-
furynick
Ouh là, ça part un peu en sucette là, j'avais pas dit au début qu'il fallait une réponse à une question et attendre la réponse avant de poser une autre question ... j'avais aussi dit qu'il fallait que les questions soient précises !
Bref, dans l'ordre :
@Brrtony
Pour répondre à ta question très vague (200€ par trade, 200€ par jour, 200€ pour les trades ouverts ?), voici les trois possibilités de calcul en considérant que l'EA a passé les ordres avec un Magic Number :
Cas 1 : 200€ par trade avec clôture
Codeint total = OrdersTotal(); for (int i = 0 ; i < total ; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) if (OrderProfit() >= 200 && OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol()) if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue); else OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red);
Cas 2 : 200€ par jour (je n'ai pas testé la condition OrderCloseTime() >= StrToTime("00:00"), il est possible que ça ne fonctionne pas aussi simplement)
Codedouble sum = 0; int total = OrdersTotal(); for (int i = 0 ; i < total ; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) if (OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol()) sum += OrderProfit(); total = OrdersHistoryTotal(); for (i = 0 ; i < total ; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) if (OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol() && OrderCloseTime() >= StrToTime("00:00")) sum += OrderProfit();
Cas 3 : 200€ pour les trades ouverts
Codedouble sum = 0; int total = OrdersTotal(); for (int i = 0 ; i < total ; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) if (OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol()) sum += OrderProfit();
Clôture des trades pour les cas 2 et 3
Codeif (sum >= 200) for (i = 0 ; i < total ; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) if (OrderMagicNumber() == magicNumber && OrderSymbol() == Symbol()) if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue); else OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red);
-
furynick
@lowyoda :
Chiant peut-être pas, il suffirait simplement de calculer le temps écoulé depuis l'ouverture du trade et de soustraire le résultat à la valeur du TS :
Codeint spentTimeInMinute = (TimeCurrent() - OrderOpenTime()) / 60; double TSInPoints = (baseTSInPips - spentTimeInMinute) * Point;
Ne sachant pas comment tu vas l'utiliser je ne développe pas plus le code.
-
furynick
@Lorka :
plus simple de ce que je comprends de ton objectif :
Codebool Buy,Sell, Nothing; Buy = MA1 > MA2 && MA1 > MA3; Sell = MA1 < MA2 && MA1 < MA3; Nothing = !Buy && !Sell;
Effectivement, le OU logique est || et le OU binaire est |
Codebool condition1 = signal1 || signal2; int value1 = value2 | value3;
-
furynick
Pour ton code il me semble que tu oublies le principal ... les positions seront toutes fermées si l'équité est >200 ... donc si ton capital de base est de 500 toutes les positions seront clôturées immédiatement après leur ouverture jusqu'à ce que le compte soit réduit à 200 ... un peu dommage.
Il aurait été préférable de faire ça :
Codeif(AccountEquity()>AccountBalance()+200) { CloseTrade(); return(0); }
-
babs
Je cite "que le robot atteint 200", c'était tellement vague que j'ai considéré qu'il partait d'une balance plus faible.
Pour ne pas encombrer le sujet tu peux supprimer ce post :P -
Brrtony (invité)
Merci @BABS excellent !!! -
brrtony
@furynick ALORS LA RIEN A DIRE PLUS Qu'EXCELLENT!!!!!! MERCI encore a vous!!!!!
J'en ai une autre :P si vous pouvez encore m'aider
je voudrais rajouter ces 3 options comme dans l'EA FuRyXsafe3
extern string brokerTimeStart = "00:00"; //* start hour of trading session at broker time
extern string brokerTimeEnd = "23:59"; //* end hour of trading session at broker time
extern string fridayTimeEnd = "17:00"; //* friday end hour of trading session at broker time
Mais je ne trouve pas comment il est integré :( Desolé de t'embeter encore furynick :P
-
Lorka85
excelent fury tu m'apprend pas mal :)
la réponse a @Brrtony me sera utile egalement !
et j'ignorais qu'on pouvais utiliser cette syntax : Nothing = !Buy && !Sell; a savoir le ! pour "différent de la variable juste avant" (d'ou mon assignation hasardeuse de Nothing = Nothing != Buy) , ca va me débloquer pas mal de possibilité !!! -
babs
Petite précision le "!" ne signifie différent de la variable juste avant.
! c'est le complément de ta variable c'est à dire que si tu as une variable booléen BUY
alors si cette variable BUY= true alors !BUY=false
-
Lorka85
ha ? mais donc Nothing = Différent de !Buy et différent de !sell ? en gros si c'est 2 variable Buy and Sell son a false, Nothing sera a true ? -
furynick
@Lorka : Ben c'est pas justement le principe ? s'il n'y a ni buy ni sell ... il y a nothing ... non ?
@Brrtony : les plages horaires ne sont pas implémentées dans Safe3 :(
il faudrait ajouter aux conditions buySignal et sellSignal une vérification de l'heure de la forme suivante (code non testé) :
Codedatetime timeEnd = StrToTime(brokerTimeEnd); if (timeEnd < TimeCurrent()) timeEnd += 86400; buySignal = buySignal && TimeCurrent() > StrToTime(brokerTimeStart) && TimeCurrent() < timeEnd; if (TimeDay(TimeCurrent()) == 5) buySignal = buySignal && TimeCurrent() < StrToTime(fridayTimeEnd);
Même chose pour sellSignal.
@Babs : d'accord sur le fait que la demande était tout sauf précise et ton point de vue sur l'équité ne m'était pas venu à l'esprit ... mais dans l'absolu, ton code bloquera un EA sur une équité de 200 ce qui n'est pas très profitable tu en conviendra ;) -
jvalau
Bienvenue au club.
Je t'envoie mon skype par mail
A bientôt -
babs
Oui je suis tout à fait d'accord avec toi mais déjà le principe de bloquer un robot sur ses gains me parait bizarre.
D'autant plus que le code que tu lui as fourni ne réponds pas aussi complétement à ses exigences car si des ordres sont fermés avant d'atteindre les 200$ d'équité alors ton AccountBalance() va augmenter et donc tu ne vas t’arrêter à 200$ de gains.
De tout manière la demande n'étant pas formulé précisément toutes solutions sont envisageables :D -
yampi
T'as écrit un jour qu'il était facile d’attacher un compte MT4 sur un autre via une ddl en particulier pourrait tu s'il te plais me re-donner la marche a suivre.
-
furynick
En fait, l'idée est la même je pense que l'objectif de gains, faire 200$ par jour et s'arrêter de trader ... ça limite les gains mais ça les sécurise aussi.
J'en profite pour insister sur la nécessité de faire des demandes précises pour éviter ce genre de discussion qui vont immanquablement polluer le sujet. -
Brrtony (invité)
Merci @Furynick mais ca marche pas :( Pourrais tu l'intégrer sur un ea avec un code simple comme "spoutnik" que je puisse regarder le fonctionnement "c'est pour les tranches horaires" -
Lorka85
Arret sur gain : a mon avis tu a tous compris Fury, par exemple visé les 10% de rendement par jours, et stoper l'ea si il les fait, miser sur une moyenne d'echec, et finalement avoir une moyenne de 3% par jours sur 1 ans ^^ -
furynick
pas eu ton mail, moi c'est furynick sur skype -
lowyoda
En faite ce que je cherche c'est un trailling stop qui réduit le % de gain sécurise en fonction du temps écoule depuis l'ouverture du Trade
Exemple:
Un trade ouvert a 00h
passe en gain a 00h30 Les différents BreakEven mis en place protège le trade.
00h30 + 30 pips BreakEven
1h + 50 pips Stop Loss a +25 pips
1h30 +80 pips Stop Loss a +40 pips
2h +80 pips StopLoss a +60 pips
3h +85 Pips Stoploss a +75 pips
En faite mon trailling Stop de Basse est un % du gain, je voudrais qu'il passe de 30% au début du trade a 70% après 1h d'ouverture par exemple.
J'espere avoir été plus clair que la première fois
Exposez cette discussion :