Comment coder ? - page 289

 

Besoin d'aide pour terminer cet EA

J'essaie de coder un EA (en utilisant des codes déjà réalisés) qui fait ce qui suit :

  • Ouvrir deux ordres en attente, un stop de vente et un stop d'achat, à une heure spécifique (dans ce cas 23:00), tous deux avec un SL et un TP.
  • Expire l'ordre en attente à une certaine heure (par exemple à 10h00) et n'ouvre aucune transaction le vendredi 23h00.
  • Si deux transactions sont ouvertes et que l'une atteint le SL, l'autre voit son TP augmenté d'un certain montant (je pense qu'un OrderModify résoudra ce genre de problème).
  • Les transactions ouvertes sont automatiquement fermées à 23h00 le lendemain.
  • L'EA est presque terminé et certains problèmes antérieurs que j'avais ont été résolus et il fait la plupart des choses ci-dessus, mais j'ai encore les problèmes suivants et à ce stade, je ne sais pas comment aller plus loin, donc si quelqu'un pouvait fournir le code nécessaire, ce serait très utile.

  • Lorsque deux transactions sont ouvertes et que l'une d'entre elles atteint le stoploss, j'ai besoin que le take profit de l'autre transaction encore ouverte soit augmenté d'un certain montant.
  • Les transactions sont toujours ouvertes le vendredi à 23h00, ce que je ne souhaite pas.
  • Toutes les transactions qui sont encore ouvertes à 23h00 doivent être fermées, qu'elles soient en perte ou en profit.

Je suis un noob à MQL et j'ai essayé de chercher des solutions à certains des problèmes ci-dessus et j'ai du mal à les trouver. Je pense que ces problèmes peuvent être résolus assez facilement, sans avoir à recourir à un codage compliqué. Si quelqu'un pouvait me fournir une ou plusieurs solutions à ces problèmes, je l'en remercierais encore une fois.

Merci,

madmax3

 

...

Essayez quelque chose comme ceci :

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

int ticketBuy = OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,Co mm,0,0,CLR_NONE);

if (ticketBuy>-1)

OrderModify(ticketBuy,OrderOpenPrice(),stopLossToUse,takeProfitToUse,0,CLR_NONE);

}

Remplacez simplement stopLossToUse et takeLossToUse par les valeurs que vous souhaitez.

kasio:
Mes amis,

Je suis un débutant en programmation MQL4 et j'ai besoin d'aide pour attacher un SL & TP à un ORDERSEND avec un courtier ECN.

Au départ, je n'arrivais pas à comprendre pourquoi les SL & TP faisaient que mon ordre aboutissait à une erreur, jusqu'à ce que quelqu'un me fasse remarquer qu'il faut définir les champs StopLoss & TakeProfit dans l'ORDERSEND à "0", sinon un courtier ECN/STP n'exécutera pas l'ordre.

Donc, ma question est la suivante : comment puis-je exécuter un ordre au marché et ensuite immédiatement (ou dans une seconde ou deux) attacher un SL/TP à ce ticket ?

Voici un morceau de code pertinent pour ma question :

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,Comm,0,0,CLR_NONE) ;

TakeAction=0 ;

}

Quelqu'un peut-il m'aider à insérer un code juste après la commande OrderSend afin que je puisse attacher un TP/SL de disons arbitrairement 25pips à ce ticket spécifique ?

Toute aide serait grandement appréciée. Merci d'avance.

Salutations,

Kasio
 

aide !

J'ai besoin d'aide pour faire en sorte que cet indicateur ne se repeigne pas, s'il vous plaît.

Dossiers :
pi_bg_v2.mq4  3 kb
 

...

C'est un code décompilé, mais regardez quand même ce fil de discussion : https://www.mql5.com/en/forum/179650

C'est un autre vent solaire renommé, donc ...

phoenix:
Je ne sais pas si je peux le faire, mais je ne sais pas comment le faire.
 

Des idées sur la façon de coder ce que j'ai posté ? Je m'excuse si je suis impatient ou autre, je veux juste savoir si mon message a été lu.

Merci,

madmax3

 

...

Ajoutez quelque chose comme ceci dans votre EA au début de la procédure start() :
if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); } [/PHP]

Ajoutez ceci dans le code :

[PHP]void CloseAll()

{

for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;

if (OrderMagicNumber() !=MagicNumber) continue ;

//

//

//

//

//

if (OrderType()==OP_BUY || OrderType()==OP_SELL)

{

for(int c=0 ; c<3 ; c++)

{

RefreshRates() ;

if (OrderType()==OP_BUY)

{ double cp = Bid;}

else { cp = Ask ;}

OrderClose(OrderTicket(),OrderLots(),cp,0,Yellow) ;

int err=GetLastError() ;

if(err==4 || err==136 || err==137 || err==138 || err==146)

{

Sleep(5000) ; continue ;

}

break ;

}

break ;

}

}

}

.

Cela résoudra vos points 2 et 3 (ordres ouverts au vendredi).

Le premier point est plutôt compliqué à coder - vous devrez probablement redéfinir cette règle.

madmax3:
Des idées sur la façon de coder ce que j'ai posté ? Mes excuses si je suis impatient ou autre, je veux juste savoir si cela a été lu.

Merci,

madmax3
 

Aidez-nous ! Numéro d'erreur = 4103. pos = 10. Impossible d'ouvrir un fichier

Bonjour,

Je suis nouveau ici et également nouveau dans la programmation MT. Quelqu'un peut-il m'aider ?

J'ai obtenu "An error had occured. Numéro d'erreur = 4103. pos = 10 (cannot open file)".

Le fichier est enregistré correctement en tant que gif mais je reçois le message ci-dessus. Où se situe le problème ?

Le code :

void Screenshot(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates() ;

if (cmd==OP_BUY) Comment (DateTimeInfo(),"\n", "Order Open Time : ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Buy : ",DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELL) Comment (DateTimeInfo(),"\n", "Order Open Time : ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Sell : ",DoubleToStr(orderOpenPrice,Digits)) ;

string filename = Symbol()+"_"+"Demo "+"_"+ticket+"_Open.gif" ;

int handle = FileOpen(filename,FILE_CSV|FILE_READ) ;

si(handle<1)

{

if (GlobalVariableGet("_MonitorScreen_ScreenShot") != 0 )

{

if(!WindowScreenShot(nom du fichier,900,600)) Print("Erreur de WindowScreenShot : "+GetLastError()) ;

}

}

sinon FileClose(handle) ;

}

Toute aide est appréciée. Merci.

 

...

Cela fonctionne bien

Le fichier doit être dans le sous-dossier experts\files et j'ai utilisé comme exemple le ticket numéro 0, donc le nom complet du fichier était dans mon exemple "EURUSD_Demo_0_Open.gif" et il l'a ouvert sans problème (il le fait OK si vous utilisez FILE_CSV ainsi qu'avec FILE_BIN). Donc, s'il est enregistré dans le bon dossier et sous le bon nom, votre code fonctionne bien.

Akkinmore:
Salut,

Je suis nouveau ici et également nouveau dans la programmation MT. Quelqu'un peut-il m'aider à ce sujet ?

J'ai obtenu "An error had occured. Numéro d'erreur = 4103. pos = 10 (cannot open file)".

Le fichier est enregistré correctement en tant que gif mais je reçois le message ci-dessus. Où se situe le problème ?

Le code :

void Screenshot(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates() ;

if (cmd==OP_BUY) Comment (DateTimeInfo(),"\n", "Order Open Time : ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Buy : ",DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELL) Comment (DateTimeInfo(),"\n", "Order Open Time : ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Sell : ",DoubleToStr(orderOpenPrice,Digits)) ;

string filename = Symbol()+"_"+"Demo "+"_"+ticket+"_Open.gif" ;

int handle = FileOpen(filename,FILE_CSV|FILE_READ) ;

si(handle<1)

{

if (GlobalVariableGet("_MonitorScreen_ScreenShot") != 0 )

{

if(!WindowScreenShot(nom du fichier,900,600)) Print("Erreur de WindowScreenShot : "+GetLastError()) ;

}

}

sinon FileClose(handle) ;

}

Toute aide est appréciée. Merci.
 
mladen:
Le fichier doit être dans le sous-dossier experts\files et j'ai utilisé comme exemple le ticket numéro 0, donc le nom complet du fichier était dans mon exemple "EURUSD_Demo_0_Open.gif" et il l'a ouvert sans problème (il le fait OK si vous utilisez FILE_CSV aussi bien qu'avec FILE_BIN). Donc, s'il est sauvegardé dans le bon dossier et sous le bon nom, votre code fonctionne bien.

Merci. Oui, le fichier est enregistré dans le bon dossier et sous le bon nom. Je pourrais essayer d'utiliser le FILE_BIN au lieu du FILE_CSV pour vérifier si le message d'erreur apparaît à nouveau.

 

...

Comment faire pour que mon ordinateur affiche correctement les mots en russe dans les indicateurs ?...Merci...