Aide pour une participation par bougie
Résultats de 1 é 7 sur 7

Sujet : Aide pour une participation par bougie

  1. #1
    Bonjour,
    J'essaie de créer des EA via des constructeurs gratuits qui sont sur le Web.
    J'ai un problème, parfois sur la seule bougie il y a plus d'entrées. J'ai cherché le code, j'ai trouvé du matériel différent, mais je n'arrive pas à le faire fonctionner. Voici le code d'un simple EA sur la croix de deux moyennes mobiles, vous pouvez indiquer les fonctions appropriées et où les placer, de sorte qu'il n'y ait qu'une seule entrée sur une bougie.
    Merci d'avance

    extern entier MagicNumber=10001 ;
    Lots doubles externes =0,1 ;
    externe double StopLoss=5 ;
    double externe TakeProfit=10 ;
    extern int TrailingStop=0 ;
    extern int Glissement=3 ;
    extern int ma_fast_period=13 ;
    extern int ma_slow_period=89;
    décalage entier externe=0 ;
    // ------------------------------------------------------------ -------------------
    //fonction de démarrage expert
    // ------------------------------------------------------------ -------------------
    int start()
    {
    double MonPoint=Point ;
    if(Chiffres==3 || Chiffres==5) MonPoint=Point*10 ;

    double TheStopLoss=0 ;
    double TheTakeProfit=0 ;
    if( TotalOrdersCount()==0 )
    {
    entier résultat=0 ;
    if((iMA(NULL,0,ma_fast_period,shift,MODE_SMA,PRICE _CLOSE,1)lt;iMA(NULL,0,ma_slow_period,shift,MODE_S MA,PRICE_CLOSE,1))(iMA(NULL,0,ma_fast_period,shift ,MODE_SMA ,PRICE_CLOSE,0)gt;iMA(NULL,0,ma_slow_period,shift, MODE_SMA,PRICE_CLOSE,0)))/Voici votre règle d'achat ouvert
    {
    result=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage ,0,0,comment
    http://www.ForexEAdvisor.comquot;,MagicNumber,0,Blue);
    si(résultatgt;0)
    {
    TheStopLoss=0 ;
    TheTakeProfit=0 ;
    if(TakeProfitgt;0) TheTakeProfit=Ask TakeProfit*MyPoint ;
    if(StopLossgt;0) TheStopLoss=Ask-StopLoss*MyPoint;
    OrderSelect(résultat,SELECT_BY_TICKET);
    OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
    }
    retour(0);
    }
    if((iMA(NULL,0,ma_fast_period,shift,MODE_SMA,PRICE _CLOSE,1)gt;iMA(NULL,0,ma_slow_period,shift,MODE_S MA,PRICE_CLOSE,1))(iMA(NULL,0,ma_fast_period,shift ,MODE_SMA ,PRICE_CLOSE,0)lt;iMA(NULL,0,ma_slow_period,shift, MODE_SMA,PRICE_CLOSE,0)))/Voici votre règle de vente ouverte
    {
    result=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippag e,0,0,comment,MagicNumber,0,Red);
    si(résultatgt;0)
    {
    TheStopLoss=0 ;
    TheTakeProfit=0 ;
    if(TakeProfitgt;0) TheTakeProfit=Bid-TakeProfit*MyPoint ;
    if(StopLossgt;0) TheStopLoss=Bid StopLoss*MyPoint ;
    OrderSelect(résultat,SELECT_BY_TICKET);
    OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green);
    }
    retour(0);
    }
    }

    for(int cnt=0;cntlt;TotalCommandes();cnt )
    {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderType()lt;=OP_SELL
    OrderSymbol()==Symbole()
    OrderMagicNumber()==MagicNumber
    )
    {
    si(TypeCommande()==OP_BUY)
    {
    if(TrailingStopgt;0)
    {
    if(Bid-OrderOpenPrice()gt;MyPoint*TrailingStop)
    {
    if(OrderStopLoss()lt;Bid-MyPoint*TrailingStop)
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green);
    retour(0);
    }
    }
    }
    }
    autre
    {
    if(TrailingStopgt;0)
    {
    if((OrderOpenPrice()-Ask)gt;(MyPoint*TrailingStop))
    {
    if((OrderStopLoss()gt;(Ask MyPoint*TrailingStop)) || (OrderStopLoss()==0))
    {
    OrderModify(OrderTicket(),OrderOpenPrice(),Ask MyPoint*TrailingStop,OrderTakeProfit(),0,Red);
    retour(0);
    }
    }
    }
    }
    }
    }
    retour(0);
    }
    int TotalOrdersCount()
    {
    entier résultat=0 ;
    for(int i=0;ilt;TotalCommandes();i )
    {
    OrderSelect(i,SELECT_BY_POS ,MODE_TRADES);
    if (OrderMagicNumber()==MagicNumber) résultat ;
    }
    retour (résultat);
    }

  2. #2

    Citation Envoy? par ;
    Je l'utilise dans mon EA, c'est simple et facile 1- déclarer la variable globale : datetime Bartime puis après les conditions de vente ou d'achat ajouter ( ------ Bartime != Time[0]) dernière chose après OrderSend : OrderSend ( Symbole(), ---------------------------------------------- -----------); Heure du bar=Heure[0] ; Ainsi, l'EA ne fera qu'un seul accord à la bougie
    Merci beaucoup, ça marche très bien

  3. #3
    1 Pièce jointe(s) Bonjour Dani, tout d'abord, je pense que vous ne dirigez pas un Expert Advisor. Votre code utilise la fonction int start() {} donc je suppose que vous exécutez un script. Un script n'est exécuté qu'une seule fois et il ne peut pas être échangé. Un conseiller expert a au moins trois fonctions : int OnInit() {} void OnDeinit(const int reason) {} void OnTick() {} La fonction OnTick est l'endroit où la plupart des choses de l'EA se produisent. Pour rechercher une nouvelle barre et que l'EA n'exécute des transactions qu'au premier tick de cette nouvelle barre, j'utilise cette fonction : bool newBar() { static bool firstCall = true;static datetime lastbar;datetime curbar = Time[0];if (lastbar!=curbar){lastbar=curbar;if(firstCall == true) {firstCall = false;return(false);}else { return (true); }}else{return(false);}} Maintenant, dans la fonction OnTick(), j'appelle la fonction newBar() : void OnTick() { if(newBar == true) {//Check if we have a new Bar and if true nous vérifions si nous avons un signal d'achat ou de vente en raison de nos règlesif(TotalOpenOrders() lt; 1) {//Vérifiez s'il y a déjà une commande ouverte par cet EA avec ce numéro Magic particulier//Si AUCUNE ÉCHANGE N'EST DÉJÀ OUVERT et nous avons un signal de commerce valide commerce ouvert SINON ne rien faire}//End TotalOpenOrders}/End newBar }/End OnTick La fonction TotalOpenOrders() ressemble à ceci :/Obtenir le nombre total de transactions ouvertes par cet EA int TotalOpenOrders() { int total_orders = 0 ; for(int order = 0; order lt; OrdersTotal(); order ) { if(OrderSelect(order,SELECT_BY_POS,MODE_TRADES)==f alse) break; if(OrderMagicNumber() == Magic OrderSymbol() == _Symbol) { total_orders ; } } return(total_orders); } Le TotalOpenOrders() vérifie si cet EA a déjà une commande ouverte. Vous pouvez même contrôler le nombre de commandes que l'EA est autorisé à ouvrir simultanément. (C'est-à-dire si (TotalOpenOrders() lt; 2) autoriserait 2 commandes simultanées. Veuillez noter que la fonction newBar() et la fonction TotalOpenOrders() sont déclarées à la fin de l'EA en dehors de OnInit(), OnDeinit() et OnTick (). J'espère que cela aide un peu. P.S. : votre extern int MagicNumber est extern int Magic sur mon code. Importé car sinon TotalOpenOrders() ne fonctionnera pas. Attaché est un simple modèle EA qui est utilisé.
    https://www.sundytrading.com/attachm...5184191412.mq4

  4. #4
    Je l'utilise dans mon EA, c'est simple et facile 1- déclarer la variable globale : datetime Bartime puis après les conditions de vente ou d'achat ajouter ( ------ Bartime != Time[0]) dernière chose après OrderSend : OrderSend ( Symbole(), ---------------------------------------------- -----------); Heure du bar=Heure[0] ; Ainsi, l'EA ne fera qu'un seul accord à la bougie

  5. #5
    essayez ceci : extern int MagicNumber=10001 ; Lots doubles externes =0,1 ; externe double StopLoss=5 ; double externe TakeProfit=10 ; extern int TrailingStop=0 ; extern int Glissement=3 ; extern int ma_fast_period=13 ; extern int ma_slow_period=89; décalage entier externe=0 ;/ ------------------------------------------------------------ ------------------- /fonction de démarrage expert/ --------------------- -------------------------------------------- int start() { double MonPoint=Point ; if(Chiffres==3 || Chiffres==5) MonPoint=Point*10 ; double TheStopLoss=0 ; double TheTakeProfit=0 ; if( TotalOrdersCount()==0 ) { int result=0; if((iMA(NULL,0,ma_fast_period,shift,MODE_SMA,PRICE _CLOSE,1)lt;iMA(NULL,0,ma_slow_period,shift,MODE_S MA,PRICE_CLOSE,1))(iMA(NULL,0,ma_fast_period,shift ,MODE_SMA ,PRICE_CLOSE,0)gt;iMA(NULL,0,ma_slow_period,shift, MODE_SMA,PRICE_CLOSE,0)))/Voici votre règle d'achat ouvert { if(getOrdersThisBar(MagicNumber) == 0) result=OrderSend(Symbol( ),OP_BUY,Lots,Demander,Slippage,0,0,commentaire,Ma gicNumber,0,Bleu); if(resultgt;0) { TheStopLoss=0; TheTakeProfit=0 ; if(TakeProfitgt;0) TheTakeProfit=Ask TakeProfit*MyPoint ; if(StopLossgt;0) TheStopLoss=Ask-StopLoss*MyPoint; OrderSelect(résultat,SELECT_BY_TICKET); OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green); } retour(0); } if((iMA(NULL,0,ma_fast_period,shift,MODE_SMA,PRICE _CLOSE,1)gt;iMA(NULL,0,ma_slow_period,shift,MODE_S MA,PRICE_CLOSE,1))(iMA(NULL,0,ma_fast_period,shift , MODE_SMA,PRICE_CLOSE,0)lt;iMA(NULL,0,ma_slow_perio d,shift,MODE_SMA,PRICE_CLOSE,0)))/Voici votre règle de vente ouverte { if(getOrdersThisBar(MagicNumber) == 0) result=OrderSend(Symbol (),OP_SELL,Lots,Bid,Slippage,0,0,comment,MagicNumb er,0,Red); if(resultgt;0) { TheStopLoss=0; TheTakeProfit=0 ; if(TakeProfitgt;0) TheTakeProfit=Bid-TakeProfit*MyPoint ; if(StopLossgt;0) TheStopLoss=Bid StopLoss*MyPoint ; OrderSelect(résultat,SELECT_BY_TICKET); OrderModify(OrderTicket(),OrderOpenPrice(),Normali zeDouble(TheStopLoss,Digits),NormalizeDouble(TheTa keProfit,Digits),0,Green); } retour(0); } } for(int cnt=0;cntlt;OrdersTotal();cnt ) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()lt;=OP_SELL OrderSymbol()==Symbol() OrderMagicNumber()==MagicNumber ) { if(OrderType()==OP_BUY) { if(TrailingStopgt;0) { if(Bid-OrderOpenPrice()gt ;MyPoint*TrailingStop) { if(OrderStopLoss()lt;Bid-MyPoint*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*MyPoint,OrderTakeProfit(),0,Green); retour(0); } } } } else { if(TrailingStopgt;0) { if((OrderOpenPrice()-Ask)gt;(MyPoint*TrailingStop)) { if((OrderStopLoss()gt;(Ask MyPoint*TrailingStop)) || ( OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask MyPoint*TrailingStop,OrderTakeProfit(),0,Red); retour(0); } } } } } } retour(0); } int TotalOrdersCount() { int result=0 ; for(int i=0;ilt;OrdersTotal();i ) { OrderSelect(i,SELECT_BY_POS ,MODE_TRADES); if (OrderMagicNumber()==MagicNumber) résultat ; } retour (résultat); } int getOrdersThisBar(int magique) {nombre entier ; commandes int = 0 ; int total = TotalCommandes(); for (cnt = 0; cnt lt;= total; cnt ) { if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == magic) { if(iBarShift(OrderSymbol(),0,OrderOpenTime() ,vrai) == 0) { commandes = commandes 1 ; } } } } retour (commandes); }

  6. #6
    Merci pour la réponse. J'ai copié et collé votre modification, mais cela ne fonctionne pas. Ensuite, j'ai trouvé ceci sur le Web et cela semble fonctionner : int BarsCount = 0 ; int start() { if (Bars gt; BarsCount) {/votre code à exécuter une seule fois par barre va ici BarsCount = Bars; } retour(0); } Qu'est-ce que tu en penses?

  7. #7

    Citation Envoy? par ;
    Bonjour Dani, tout d'abord, je pense que vous ne dirigez pas un Expert Advisor. Votre code utilise la fonction int start() {} donc je suppose que vous exécutez un script. Un script n'est exécuté qu'une seule fois et il ne peut pas échanger ......
    Je ne suis pas programmeur, je l'ai créé avec un build EA sur le web. J'apprécie vraiment votre travail en me répondant, et je vous promets de l'étudier. Merci beaucoup.

Régles des messages

  • Vous ne pouvez pas cr?er de sujets
  • Vous ne pouvez pas r?pondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas ?diter vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Désactivé
  • Le code HTML est Désactivé
Le site d'sundytrading utilise des cookies
Le site d'sundytrading utilise des cookies pour vous assurer la meilleure expérience sur notre site ; certains sont déjà effectifs. Vous pouvez consulter plus de détails sur leurs usages ici. Veuillez cliquer sur le bouton à droite pour accepter nos cookies. Si vous continuez à utiliser le site internet d???sundytrading, nous considérerons que vous acceptez nos cookies.