Rejoindre la communauté
banner_forum
Devenez membre de la plus grande
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

    merci beaucoup babs, precieuse aide :)
  • 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
    Code
    int 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)
    Code
    double 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
    Code
    double 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
    Code
    if (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 :
    Code
    int 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 :
    Code
    bool 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 |
    Code
    bool 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 :
    Code
    if(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é) :
    Code
    datetime 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