Comment coder ? - page 34

 

Besoin d'aide pour modifier une partie de EuroX2_sl EA .......

Bonjour à tous les programmeurs,

Je suis nouveau sur le marché des changes et nouveau sur ce forum également. La première fois, j'ai appris à connaître 10 points 3 puis EuroX2_sl, étendu à partir du script de 10 points 3 EA. Après avoir fait quelques tests en avant, pour moi cet EA est tout à fait ok pour un débutant comme moi pour apprendre. Lors du test, il a bien ouvert la position mais il n'a pas fermé la position comme j'en avais besoin (même si j'ai déjà des conditions) lorsque le marché se retourne ou lorsque la tendance change. Peut-être que quelque chose ne va pas dans le code (parce que je ne suis pas un programmeur) et je pense que j'ai besoin de l'aide de l'un d'entre vous pour le résoudre. Pourriez-vous vérifier quelle partie est incorrecte ?

Je pense que la position OUVERTE est correcte car elle fait des profits mais le problème est avec la POSITION FERMEE car elle ne s'est pas fermée (achat ou vente) même si l'indicateur existe et cela fait que les pertes flottantes sont assez importantes........

Si quelqu'un s'y connaît, aidez-moi à modifier ce code........

Le code tel que je l'ai fait est :

-------- partie du script de EuroX2_sl étendu de 10 points 3 comme je pense que c'est pour fermer la position -------

//+--------------------------------------------------------

// il est important d'entrer correctement sur le marché,

// mais il est encore plus important d'en sortir correctement...

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

if(OrderType()<=OP_SELL && // vérification de la position ouverte

OrderType()<=OP_BUY &&

OrderType()>=OP_SELL &&

OrderType()>=OP_BUY &&

OrderSymbol()==Symbol()) // vérification du symbole

{

//+--------------------------------------------------------------

if(OrderType()==OP_BUY) // une position longue est ouverte

{

//+-------------------------------------------------------------------

//+ CONDITION POUR FERMER LA POSITION

//+-------------------------------------------------------------------

//+--------------- FERMER LA POSITION D'ACHAT ----------------------------

if ( Stoch_Main_M15_Cu < Stoch_Sig_M15_Cu )

//+ stochastique principale < signal stochastique

//+------------------------------------------------------------------

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // fermer la position

return(0) ; // sortie

}

//+-----------------------------------------------------------------------

// vérification du trailing stop

si(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

si(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green) ;

retour(0) ;

}

}

}

}

//+---------------CLOSE SELL POSITION --------------------------------

else // aller à la position courte

{//+ NE PAS SUPPRIMER

if(OrderType()==OP_SELL) // la position courte est ouverte

{

}

// doit-elle être fermée ?

//+----------------------------------------------------------------------------

if ( Stoch_Main_M15_Cu > Stoch_Sig_M15_Cu )

//+ stochastique principal > stochastique signal

//+-----------------------------------------------------------------------------

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // fermer la position

return(0) ; // sortie

}

//+----------------------------------------

// vérification du trailing stop

si(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

si((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi nt*TrailingStop,OrderTakeProfit(),0,Red) ;

retour(0) ;

}

}

}

}

}

}

--------------------------------------------------------------

Merci,

fxgroup

 

Quels sont les meilleurs indicateurs à terme hebdomadaires/quotidiens

Cette question pourrait être adressée aux traders expérimentés.

Quels sont les indicateurs fiables (déjà testés) qui peuvent nous donner une idée du mouvement de la tendance principale pendant :

1- la semaine à venir

2- Le jour futur (ou le jour suivant)

Sachant que je ne demande pas de niveaux d'entrée B/S.

Note : Je pense qu'une fois que nous aurons défini la direction du mouvement pour la semaine prochaine, nous pourrons construire une base pour savoir quand entrer.

Merci

 

Question sur les mql

Code :

// si nous avons ouvert des positions, nous nous en occupons

//en modifiant le stoploss

cnt=OrdersTotal() ;

while(cnt>=0)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) // && Reversed==False)

{

Print("Ticket ",OrderTicket()," modifié.");// pourquoi est-il écrit ici avant de modifier les ordres (si je comprends bien) ?

if (OrderType()==OP_SELL))

{

si (TrailingStop>0)

{

si ((OrderOpenPrice()-Ask)>=(TrailingStop*Point+Pips*Point))

{

si (OrderStopLoss()>(Ask+Point*TrailingStop) || OrderStopLoss()==0)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,0,Purple) ;

retour(0) ;

Bonjour à tous, quelqu'un pourrait-il m'expliquer pourquoi :Print("Ticket ",OrderTicket()," modified.") ; est écrit avant de modifier l'ordre. Si je comprends bien, cela va imprimer"ticket de commande modifié" même s'il n'a pas été modifié. C'est un morceau de code terminateur.

Merci.

 
Flytox:
Code :

// si nous avons ouvert des positions, nous nous en occupons

//avec modification du stoploss

cnt=OrdersTotal() ;

while(cnt>=0)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) // && Reversed==False)

{

Print("Ticket ",OrderTicket()," modifié.");// pourquoi est-il écrit ici avant de modifier les ordres (si je comprends bien) ?

if (OrderType()==OP_SELL))

{

si (TrailingStop>0)

{

si ((OrderOpenPrice()-Ask)>=(TrailingStop*Point+Pips*Point))

{

si (OrderStopLoss()>(Ask+Point*TrailingStop) || OrderStopLoss()==0)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,0,Purple) ;

retour(0) ;

Bonjour à tous, quelqu'un pourrait-il m'expliquer pourquoi :Print("Ticket ",OrderTicket()," modified.") ; est écrit avant de modifier l'ordre. Si je comprends bien, cela va imprimer "ticket de commande modifié" même s'il n'a pas été modifié. C'est un morceau de code terminateur.

Merci.

Vous avez raison, il devrait être écrit après la modification ou le message devrait être : "Trying to modify order : ",OrderTicket()

 

merci Kalenzo, je suis en train d'apprendre mql et vos articles et réponses sont très utiles, merci encore.

 

Cela pourrait être suffisant si vous faites les quatre modifications suivantes :

1. Commentez la ligne 102, qui devient

//IsTrade = True;[/PHP]

2. Change blank line 104 to be

if ( Bid > OrderOpenPrice() - GAP * Point ) IsTrade = true;

3. Change blank line 120 to be

[PHP]if ( Ask < OrderOPenPrice() + GAP * Point ) IsTrade = true;

4. Ajouter la variable "GAP" (extern int), qui est le nombre de pips où le "hedge" doit intervenir.

Cependant, quelqu'un a déjà fait remarquer quelque part dans ce forum que vous ne pouvez pas vraiment vous "couvrir" dans le même symbole ; cela revient à peu près au même que de prendre la perte. Peut-être est-il préférable de prendre la perte et de revenir lorsque le prix s'inverse à nouveau.....

 
ralph.ronnquist:
Cela pourrait être suffisant si vous effectuez les quatre modifications suivantes :

1. Commentez la ligne 102, à savoir

//IsTrade = True;[/PHP]

2. Change blank line 104 to be

if ( Bid > OrderOpenPrice() - GAP * Point ) IsTrade = true;

3. Change blank line 120 to be

[PHP]if ( Ask < OrderOPenPrice() + GAP * Point ) IsTrade = true;

4. Ajouter la variable "GAP" (extern int), qui est le nombre de pips où le "hedge" doit intervenir.

Cependant, quelqu'un a déjà fait remarquer, quelque part dans ce forum, que vous ne pouvez pas vraiment vous "couvrir" dans le même symbole ; cela revient à peu près au même que de prendre la perte. Il est peut-être préférable de prendre la perte et de revenir lorsque le prix s'inverse à nouveau.....

Cela n'a pas aidé. Et, pour être plus spécifique, ce que je veux que mon EA fasse est le suivant :

L'EA va entrer une transaction d'achat/vente basée sur certaines conditions. Une fois que la transaction initiale est entrée, il peut parfois s'écouler trois à cinq jours avant qu'elle ne soit finalement clôturée au niveau du takeprofit. Entre-temps, pendant cette période de trois à cinq jours, il peut y avoir plusieurs opportunités de transaction dans la direction opposée. Je veux que l'EA profite de ces opportunités tout en laissant la transaction initiale ouverte, car elle finira par être clôturée à profit. Ces opportunités de transaction supplémentaires dans la direction opposée à la transaction initiale seront techniquement une couverture contre la transaction initiale, même si elles finiront également par être clôturées avec un profit. Pour être clair, je veux toujours que l'EA n'ait qu'une seule position ouverte dans la même direction. Ainsi, le maximum de transactions ouvertes au même moment serait un achat et une vente.

J'espère que cela vous aidera !

Merci pour votre réponse

 

Hmm ; je n'ai pas testé votre EA, mais en lisant la logique, il me semble que la seule chose qui empêche une vente ultérieure après un achat est que "IsTrade" est vrai. (Sauf qu'il n'ouvrira pas une vente en même temps qu'un achat).

Donc, si vous voulez que la logique de vente s'applique inconditionnellement, j'aurais pensé que mon édition (1) seulement -- oublier 2-4 -- ferait l'affaire. Ou supprimer la logique "IsTrade".

Cependant, il y a la logique subordonnée avec "TickCheck" et "BarCount", qui arrête une autre transaction au même tick ou à la même barre, mais je suppose que vous voulez que cela s'applique encore.

Bien sûr, je ne peux pas dire grand-chose sur la partie signalisation, que vous avez omise. Par exemple, si la levée d'un "Sell_Signal" prend en compte les "BuyOrders", alors il y a plus à faire.

 

Rendre le codage intéressant

Avant d'appuyer sur RETOUR, pourriez-vous m'aider ???

Je suis nouveau dans le codage des indicateurs, mais je sais comment coder les EA, cependant. Pas à 100%, mais assez bien.

Bref, je me demandais si quelqu'un de gentil pourrait m'aider.

Pouvez-vous m'expliquer chaque ligne et me donner un exemple.

p.s. C'est une partie d'un code pour MACD:

int start()

{

int limit;//what does Limit equal,0?

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---- macd counted in the 1-st buffer

for(int i=0; i<limit; i++)//i<0?

MacdBuffer=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

//---- signal line counted in the 2-nd buffer

for(i=0; i<limit; i++)

SignalBuffer=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);

//---- done

return(0);

}

//+------------------------------------------------------------------+

Je serais très heureux si quelqu'un ou plusieurs personnes m'aidaient, et me donnaient des conseils pour coder des indicateurs, ou quelque chose comme ça.

Merci,

Dan.

 

Comment exécuter un script dans un EA ?

Bonjour,

J'aimerais savoir comment exécuter un script dans le répertoire des scripts d'une EA.

Si (condition vraie)

{

Exécuter le script ;

}

Merci d'avance

Salutations

Jimmy

Raison: