Aide au codage - page 483

 

Oh mec, vous êtes vraiment une star. J'adore faire du commerce, mais ce serait impossible sans votre aide. Merci encore

 
xtractalpha:
Salut,

Quelqu'un pourrait-il m'aider avec ma fonction LotsizeCalc() ?

Je voudrais multiplier ma taille de lot avec le 'MartingaleAmount' si ma dernière transaction était perdante. Si ma dernière transaction était gagnante, je voudrais utiliser la taille de lot "normale". Malheureusement, lorsque je backtest l'EA, je reçois l'erreur 4051 du journal.

Cela a quelque chose à voir avec la taille de lot, car l'EA fonctionne lorsque j'essaie de l'exécuter sans la fonction "LotsizeCalc()".

Quelqu'un sait-il pourquoi ma fonction lotsize ne fonctionne pas ?

Merci d'avance,

Thierry

extern int MaximumTrades = 10; extern double StopLoss=25; extern double TakeProfit=50; extern double MartingaleAmount = 1.5; input double LotSize=0.1; int magic; double pips; int tradeNumber; string ScreenComment; double martinlot; double martinsize;

[/PHP]

double LotsizeCalc() { if(OrderSelect(lastTradeTicket(),MODE_HISTORY)) if(OrderProfit()<0 && tradeNumber 0){ if(OrderSelect(ticket,SELECT_BY_TICKET)){ sl = OrderOpenPrice()+(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()-(TakeProfit*pips); if(OrderType()==OP_BUY){ sl = OrderOpenPrice()-(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()+(TakeProfit*pips); } if(!OrderModify(ticket,price,sl,tp,0,Magenta)) { err = GetLastError(); Print("Encountered an error during modification!"+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to select the order for some reason Print("Failed to Select Order ",ticket); err = GetLastError(); Print("Encountered an error while seleting order "+(string)ticket+" error number "+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to place the order and send us back a ticket number. err = GetLastError(); Print("Encountered an error during order placement!"+(string)err+" "+ErrorDescription(err) ); if(err==ERR_TRADE_NOT_ALLOWED)MessageBox("You can not place a trade because \"Allow Live Trading\" is not checked in your options. Please check the \"Allow Live Trading\" Box!","Check Your Settings!"); } }

Thierry

Vous pouvez utiliser cette fonction pour savoir si le dernier ordre fermé l'a été avec profit ou perte :

[PHP]double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0 ;

double lastProfit = 0 ;

for(int i=OrdersHistoryTotal()-1 ; i>=0 ; i--)

{

si (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break ;

si (magicNumber!=0)

si (OrderMagicNumber() != magicNumber) continuer ;

if (OrderSymbol() != Symbol()) continue ;

si (OrderCloseTime() <= lastTime) continue ;

lastTime = OrderCloseTime() ;

lastProfit = OrderProfit()+OrderSwap()+OrderCommission() ;

}

return(lastProfit) ;

}

Vérifiez simplement si le résultat de la fonction lastOrderProfit(), et s'il est < 0, alors appliquez votre règle de martingale.

 

Bonjour Mladen ! Encore moi...

Comment serait-il possible d'utiliser les lignes de cet indicateur dans un EA utilisant iCustom puisqu'il ne semble pas y avoir de tampons définis pour ces lignes ?

Merci

Dossiers :
 
Jason2005:
Salut Mladen ! Encore moi...

Comment serait-il possible d'utiliser les lignes de cet indicateur dans un EA utilisant iCustom puisqu'il ne semble pas y avoir de tampons définis pour ces lignes ?

Merci

Ce sont des objets

Vous pouvez accéder aux objets par leur nom (vous devez connaître le nom exact de l'objet, mais l'indicateur doit être actif sur le graphique et ces objets doivent être dessinés sur le graphique).

 
mladen:
Ce sont des objets Vous pouvez accéder aux objets par leur nom (vous devez connaître le nom exact de l'objet, mais l'indicateur doit être actif sur le graphique et ces objets doivent être dessinés sur le graphique).

Super. Alors comment appeler l'indicateur depuis l'EA ? Avec quelque chose d'autre que iCustom ou est-ce que j'ai tout faux... Merci mladen

 
Jason2005:
Super. Alors comment appeler l'indicateur depuis l'EA ? Avec quelque chose d'autre que iCustom ou est-ce que j'ai tout faux... Merci mladen

Cet indicateur dessine simplement des niveaux à 0,20,50,80 pips de chaque segment de 100 pips. Le moyen le plus simple est de vérifier si ces niveaux sont franchis depuis votre EA.

Si vous essayez d'utiliser les noms d'objets (et leurs prix, vous ne pourrez pas connaître les noms exacts des lignes puisqu'ils dépendent du plus haut haut et du plus bas - ils sont sujets à changement. Utilisez le mode décrit ci-dessus

 
mladen:
Cet indicateur dessine simplement des niveaux à 0,20,50,80 pips de chaque segment de 100 pips. Le moyen le plus simple est de vérifier si ces niveaux sont franchis depuis votre EA. Si vous essayez d'utiliser les noms d'objets (et leurs prix, vous ne pourrez pas connaître les noms exacts des lignes puisqu'ils dépendent du plus haut haut et du plus bas - ils sont sujets à changement. Utilisez le mode décrit ci-dessus

Auriez-vous un exemple sur la façon de faire cela... Je suis désolé de demander autant, je commence juste à coder et je n'ai pas compris comment vérifier si ces niveaux sont franchis dans la condition d'achat ou de vente.

 
Jason2005:
Auriez-vous un exemple sur la façon de faire cela... Je suis désolé de demander autant, je commence juste à coder et je n'ai pas encore compris comment vérifier si ces niveaux sont franchis dans la condition d'achat ou de vente.

Jason2005

Vous avez un code comment faire dans l'indicateur que vous avez joint.

 
mladen:
Jason2005 Vous avez un code comment il est fait dans l'indicateur que vous avez attaché

Ce serait donc ça ?

MathMod(i, 5) == 0.0
 
mladen:
Thierry

Vous pouvez utiliser cette fonction pour savoir si le dernier ordre clôturé l'a été avec profit ou perte :

double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

if (magicNumber!=0)

if (OrderMagicNumber() != magicNumber) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

}

return(lastProfit);

}

Il suffit de vérifier si le résultat de la fonction lastOrderProfit(), et s'il est < 0, alors appliquez votre règle de martingale


Bonjour Mladen,

Merci pour votre réponse.

La fonction lastorderprofit n'est pas nécessaire car ma fonction lastTradeTicket() fait le même travail.

Pourriez-vous jeter un coup d'oeil à mon EA ?

Je ne vous demande pas de modifier le code, mais je vous serais très reconnaissant si vous pouviez me dire ce que j'ai mal codé.

Merci d'avance,

Thierry

53_martingale.mq4

Dossiers :
Raison: