Aide au codage - page 19

 

J'ai terminé mon EA avec votre aide Merci encore

Bonjour, mLaden,

Merci encore pour votre grande aide

J'ai terminé mon EA avec votre aide Merci encore

ThanXXXXXXXXXX

 

Repeindre les indicateurs

J'ai posté cette question dans le fil de discussion "Aide au codage" il y a quelques semaines, mais je n'ai reçu aucune réponse.

La plupart des indicateurs MTF se repeignent, certains plus que d'autres. J'en ai un qui se repeint légèrement, mais qui a un facteur qui est très bon et qui pourrait être inclus dans une méthode. Le problème est que je dois manuellement mettre à jour/rafraîchir constamment pour qu'il ait un sens. Existe-t-il un moyen de coder un rafraîchissement automatique à chaque tick ou toutes les 'x' secondes/ticks ?

Actuellement, pour rafraîchir, je dois soit changer l'heure du graphique et revenir en arrière, soit aller dans l'onglet Charts/Refresh, soit ajouter un autre indicateur au graphique et supprimer le précédent (one.......), encore et encore ! Cela prend beaucoup de temps !

S'il existe un moyen de faire ce rafraîchissement automatique, je partagerai ce que j'ai trouvé.............

Merci,

el bee

 

...

el abeille

Metatrader envoie un signal d'auto-rafraîchissement à chaque indicateur dans la fenêtre lorsqu'un nouveau tick arrive, donc ce n'est pas un problème de rafraîchissement. Habituellement, le type de problème que vous rencontrez se produit lorsqu'un indicateur ne trouve pas correctement le nombre de barres modifiées (généralement appelé "limite" dans les indicateurs) ... il s'agit donc d'un problème de l'indicateur. Lorsque vous changez de time frame, il recalcule toutes les barres à nouveau et c'est pourquoi il l'affiche correctement dans ce cas et ne le fait pas correctement lorsqu'il n'y a qu'une seule valeur de barre changée.

Pour conclure : vérifiez le code de l'indicateur - il y a un bug.

el bee:
J'ai posté cette question dans le fil de discussion 'Coding Help' il y a quelques semaines, mais je n'ai reçu aucune réponse.

La plupart des indicateurs MTF se repeignent, certains plus que d'autres. J'en ai un qui se repeint légèrement, mais qui a un facteur qui est très bon et qui pourrait être inclus dans une méthode. Le problème est que je dois manuellement mettre à jour/rafraîchir constamment pour qu'il ait un sens. Existe-t-il un moyen de coder un rafraîchissement automatique à chaque tick ou toutes les 'x' secondes/ticks ?

Actuellement, pour rafraîchir, je dois soit changer l'heure du graphique et revenir en arrière, soit aller dans l'onglet Charts/Refresh, soit ajouter un autre indicateur au graphique et supprimer le précédent (one.......), encore et encore ! Cela prend beaucoup de temps !

S'il existe un moyen de faire ce rafraîchissement automatique, je partagerai ce que j'ai trouvé.............

Merci,

el bee
 

aide sur les indicateurs

Je pourrais utiliser un indicateur qui met une ligne verticale sur la bougie la plus récente, ajustable, si quelqu'un en a un et peut le partager ou si un indicateur peut être fabriqué, ce serait très apprécié.

 

Il y a un mauvais code ?

J'essaie d'écrire un EA qui se base sur l'ouverture et la fermeture de la barre.

mais j'ai un problème de condition pour ouvrir un trade.

Ma méthode est quelque chose comme ça :

+ VENDRE lorsque l'ouverture de la barre actuelle est supérieure à la fermeture de la barre précédente. Le TP est la clôture de la barre précédente

+ ACHETER lorsque l'ouverture de la barre actuelle est inférieure à l'ouverture de la barre précédente. Le TP est l'ouverture de la barre précédente

+ CLOSE lorsque la barre actuelle est fermée.

et voici le code (j'essaie toujours d'apprendre mql4, donc je sais que ce n'est pas le meilleur code)

#property link "sando"

#define MAGICMA 20050610

//====================parameter===================//

extern double solantang =3 ;

extern double solangiam =3 ;

extern double LotsSize =1 ;

//==============================================//

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

//| vérification de l'existence d'une transaction ouverte |

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

int CalculateCurrentOrders(string symbol)

{

int buys=0,sells=0 ;

//----

for(int i=0;i<OrdersTotal();i++)

{

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

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) achète++ ;

si(OrderType()==OP_SELL) vend++ ;

}

}

//---- retourner le volume des commandes

if(buys>0) return(buys) ;

sinon return(-sells) ;

}

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

//| Moneymanagement (Type 3) |

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

double moneymanagement3()

{

double LotsSize = 0.1 ;

if(OrdersHistoryTotal()>0)

{

OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY) ;

si(OrderProfit() > 0)

{

if(OrderLots() > LotsSize)

{

LotsSize = OrderLots()/solangiam ;

}

sinon

{

LotsSize = LotsSize ;

}

}

else

{

LotsSize = OrderLots() * solantang ;

}

}

return (NormalizeDouble(LotsSize,2)) ;

}

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

//| CONDITION pour ouvrir un trade |

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

void opentrade()

{

int res ;

if(Close[0]<Open[1])

{

res=OrderSend(Symbol(),OP_SELL,moneymanagement3(),Bid,3,Close[0],Close[1],"",MAGICMA,0,Red) ;

retour ;

}

if(Open[0]>Open[1])

{

res=OrderSend(Symbol(),OP_BUY,moneymanagement3(),Ask,3,Open[0],Close[1],"",MAGICMA,0,Blue) ;

retour ;

}

}

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

//| fonction de démarrage expert |

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

void start()

{

//---- vérification de l'historique et des transactions

if(Bars<100 || IsTradeAllowed()==false) return ;

//---- calculer les ordres ouverts par symbole courant

si(CalculateCurrentOrders(Symbol())==0) opentrade() ;

// else donggiaodich() ;

//----

}

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

et veuillez vérifier l'image en pièce jointe

Je pense qu'il y a un problème dans le code

parfois l'EA ne fait pas le trade quand la condition est remplie T_T je ne sais pas pourquoi

et parfois l'EA fait le trade quand il ne remplit pas la condition !

S'il vous plaît, aidez-moi à corriger le problème dans le code.

Dossiers :
1_2.gif  12 kb
new_edge.mq4  4 kb
 
7thman:
J'essaie d'écrire un EA qui se base sur l'ouverture et la fermeture de la barre.

mais j'ai un problème concernant la condition d'ouverture d'une transaction.

Ma méthode est quelque chose comme ça :

+ VENDRE lorsque l'ouverture de la barre actuelle est supérieure à la fermeture de la barre précédente. Le TP est la clôture de la barre précédente.

+ ACHETER lorsque l'ouverture de la barre actuelle est inférieure à l'ouverture de la barre précédente. Le TP est l'ouverture de la barre précédente

+ CLOSE lorsque la barre actuelle est fermée.

et voici le code (j'essaie toujours d'apprendre mql4 , donc je sais que ce n'est pas le meilleur code)

et s'il vous plaît vérifier l'image en pièce jointe

Je pense que quelque chose ne va pas dans le code

parfois l'EA ne fait pas le trade quand la condition est remplie T_T je ne sais pas pourquoi

et parfois l'EA fait le trade quand il ne remplit pas la condition !

S'il vous plaît aidez-moi à corriger le mauvais dans le code.

[SELL lorsque l'ouverture de la barre courante est supérieure à la fermeture de la barre précédente. Le TP est la clôture de la barre précédente.

+ BUY lorsque l'ouverture de la barre actuelle est inférieure à l'ouverture de la barre précédente. Le TP est l'ouverture de la barre précédente.

Voici la première erreur :

if(Close[0]Close[1])

if(Open[0]>Open[1]) (devrait être Open[0]<Open[1])

La deuxième erreur concerne le StopLoss. Dans votre code, vous avez défini le StopLose, mais dans la description ci-dessus

vous avez dit que vous vouliez fermer les transactions si une nouvelle barre apparaissait.

Voici un autre problème. Supposons que Open[0]<Open[1]. La différence peut être si faible

que lorsque votre ordre sera exécuté, le prix sera supérieur à Open[1] et le TP sera inférieur au prix d'ouverture de l'ordre.

inférieur au prix d'ouverture de l'ordre. Ci-dessous j'ai ajouté une condition qui permet d'attraper ce cas.

Si je comprends bien que vous voulez fermer tous les ordres à la fin de la barre, voici le code.

#property link "sando"

#define MAGICMA 20050610

//====================parameter===================//

extern double solantang =3 ;

extern double solangiam =3 ;

extern double LotsSize =1 ;

//==============================================//

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

//| vérification de l'existence d'une transaction ouverte |

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

int CalculateCurrentOrders(string symbol)

{

int buys=0,sells=0 ;

//----

for(int i=0;i<OrdersTotal();i++)

{

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

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

si(OrderType()==OP_BUY) achète++ ;

si(OrderType()==OP_SELL) vend++ ;

}

}

//---- retourner le volume des commandes

if(buys>0) return(buys) ;

sinon return(-sells) ;

}

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

//| Moneymanagement (Type 3) |

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

double moneymanagement3()

{

double LotsSize = 0.1 ;

if(OrdersHistoryTotal()>0)

{

OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY) ;

si(OrderProfit() > 0)

{

if(OrderLots() > LotsSize)

{

LotsSize = OrderLots()/solangiam ;

}

sinon

{

LotsSize = LotsSize ;

}

}

else

{

LotsSize = OrderLots() * solantang ;

}

}

return (NormalizeDouble(LotsSize,2)) ;

}

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

//| CONDITION pour ouvrir un trade |

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

void opentrade()

{

int res ;

if(Close[1] Close[1] )

{

res=OrderSend(Symbol(),OP_SELL,moneymanagement3(), Bid,3,0,Close[1],"",MAGICMA,0,Red) ;

retour ;

}

if(Open[0]<Open[1] && Ask < Open[1])

{

res=OrderSend(Symbol(),OP_BUY,moneymanagement3(),Ask,3,0,Open[1],"",MAGICMA,0,Blue) ;

retour ;

}

}

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

//| fonction de démarrage expert |

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

void start()

{

if(isNewBar())

{

closeOrders(MAGICMA,OP_BUY) ;

closeOrders(MAGICMA,OP_SELL) ;

}

Print(Close[1]-Open[0]);

//---- vérifier l'historique et le trading

if(Bars<100 || IsTradeAllowed()==false) return ;

//---- calculer les ordres ouverts par symbole courant

if(CalculateCurrentOrders(Symbol())==0) opentrade() ;

// else donggiaodich() ;

//----

}

void closeOrders(int oMagic,int oType) {

for(int i=0;i<OrdersTotal();i++) {

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic || oMagic<0) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

si(OrderType()==OP_BUY)) {

OrderClose(OrderTicket(),OrderLots(),Bid,0) ;

i-- ;

}

si (OrderType() == OP_BUYSTOP)

{

OrderDelete(OrderTicket()) ;

i-- ;

}

if(OrderType()==OP_SELL) {

OrderClose(OrderTicket(),OrderLots(),Ask,0) ;

i-- ;

}

si (OrderType() == OP_SELLSTOP)

{

OrderDelete(OrderTicket()) ;

i-- ;

}

}

}

}

}

}

}

bool isNewBar() {

static int prevTime ;

bool newBar=false ;

if(Time[0]!=prevTime) {

newBar=true ;

prevTime=Time[0] ;

}

return(newBar) ;

}

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

Merci,

Grzesiek[/lang]

 

Aide au codage : Placer des Stop Loss & Take Profit avec EA en utilisant un courtier ECN

Stop Loss, Take Profit avec un courtier ECN

Mes amis,

Je suis un nouveau venu dans la 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.

Ma question est donc 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)

{

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

}

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

 
kasio:
Stop Loss, Take Profit avec un courtier ECN

Amis,

Je suis novice 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.

Ma question est donc 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)

{

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

}

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.

Merci,

Kasio

Bonjour kasio,

Si vous traitez avec un courtier ECN, vous devriez envoyer un ordre sans SL/TP et le modifier.

Voici un exemple :

extern double StopLoss = 25 ;

extern double TakeProfit = 25 ;

si(isECN==true )

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic) ;

OrderSelect(ticket,SELECT_BY_TICKET) ;

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - StopLoss*Point, StopLoss),sltpValue(Ask+ TakeProfit*Point,TakeProfit),0) ;

}

double sltpValue(double w1, int w2)

{

si(w2 == 0)

retourne (0) ;

return (NormalizeDouble(w1, Digits)) ;

}

J'espère que c'est clair

PM moi si vous avez plus de questions.

Merci,

grzesiek

 

Les informations ne sont pas mises à jour à chaque tic

Salut les gars,

J'ai écrit cette ea qui me montre des informations sur divers indicateurs sur mon écran.

Cependant, lorsque j'attache l'ea à mon graphique, l'information n'est mise à jour que toutes les 5 min (sur un graphique 5 min.),

au lieu de chaque tic. Y a-t-il un problème dans mon codage ? J'aimerais que l'information soit mise à jour tous les tic.

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

//| test.mq4 |

//| Copyright © 2011, Test Inc. |

//| test.net - Ressources et informations sur les tests. |

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

#property copyright "Copyright © 2011, Test Inc."

#property link "http://www.test.net"

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

//| labels |

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

#define ccilabel "CCIValue"

#define rsilabel "RSIValue" (valeur RSI)

#define stochlabel "StochValue" (valeur de la stoch)

#define upperbandlabel "UpperBandValue" (étiquette de bande supérieure)

#define lowerbandlabel "LowerBandValue" (étiquette de bande inférieure)

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

//| fonction d'initialisation de l'expert |

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

int init()

{

//----

//----

return(0) ;

}

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

//| fonction de désinitialisation experte |

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

int deinit()

{

//----

//----

return(0) ;

}

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

//| fonction de démarrage expert |

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

int start()

{

//----

//===================================================================

// Indice dynamique de force relative berekenen

//===================================================================

double RSI ;

double UpperBand ;

double LowerBand ;

RSI=iCustom(NULL,0, "Dynamic Zone RSI",14,0,1) ;

UpperBand=iCustom(NULL,0, "Dynamic Zone RSI",14,1,1) ;

LowerBand=iCustom(NULL,0, "Dynamic Zone RSI",14,2,1) ;

//===================================================================

// CCI berekenen

//===================================================================

double CCI ;

CCI=iCCI(NULL,0,14,PRICE_TYPICAL,1) ;

//===================================================================

// Stochastique

//===================================================================

double Stoch ;

Stoch=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1) ;

//===================================================================

// Affichage des informations

//===================================================================

// CCIValue

ObjectDelete(ccilabel) ;

ObjectCreate(ccilabel, OBJ_LABEL, 0, 0, 0) ;

ObjectSet(ccilabel, OBJPROP_XDISTANCE, 20) ;

ObjectSet(ccilabel, OBJPROP_YDISTANCE, 20) ;

ObjectSetText(ccilabel, "CCIValue is " + DoubleToStr(CCI,2), 10, "Arial", DeepSkyBlue) ;

// StochValue

ObjectDelete(stochlabel) ;

ObjectCreate(stochlabel, OBJ_LABEL, 0, 0, 0) ;

ObjectSet(stochlabel, OBJPROP_XDISTANCE, 20) ;

ObjectSet(stochlabel, OBJPROP_YDISTANCE, 40) ;

ObjectSetText(stochlabel, "StochValue is " + DoubleToStr(Stoch,2), 10, "Arial", DeepSkyBlue) ;

// RSIValue

ObjectDelete(rsilabel) ;

ObjectCreate(rsilabel, OBJ_LABEL, 0, 0, 0) ;

ObjectSet(rsilabel, OBJPROP_XDISTANCE, 20) ;

ObjectSet(rsilabel, OBJPROP_YDISTANCE, 60) ;

ObjectSetText(rsilabel, "RSIValue is " + DoubleToStr(RSI,2), 10, "Arial", DeepSkyBlue) ;

// Valeur de la bande supérieure

ObjectDelete(upperbandlabel) ;

ObjectCreate(upperbandlabel, OBJ_LABEL, 0, 0, 0) ;

ObjectSet(upperbandlabel, OBJPROP_XDISTANCE, 20) ;

ObjectSet(upperbandlabel, OBJPROP_YDISTANCE, 80) ;

ObjectSetText(upperbandlabel, "UpperbandValue is " + DoubleToStr(UpperBand,2), 10, "Arial", DeepSkyBlue) ;

// Valeur de la bande inférieure

ObjectDelete(lowerbandlabel) ;

ObjectCreate(lowerbandlabel, OBJ_LABEL, 0, 0, 0) ;

ObjectSet(lowerbandlabel, OBJPROP_XDISTANCE, 20) ;

ObjectSet(lowerbandlabel, OBJPROP_YDISTANCE, 100) ;

ObjectSetText(lowerbandlabel, "LowerBandValue is " + DoubleToStr(LowerBand,2), 10, "Arial", DeepSkyBlue) ;

//----

retour(0) ;

}

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

 

KG Support et Résistance mod

Bonjour,

J'ai besoin de quelqu'un pour modifier un des indicateurs de support et de résistance ci-joints. Le premier a une alerte lorsqu'un breakout est effectué. J'ai besoin d'une alerte dès qu'une nouvelle barre de support ou de résistance apparaît. Cet indicateur est l'un des meilleurs indicateurs de support/résistance et il est aussi très puissant, surtout sur les échelles de temps supérieures.

Merci

kg_support_et_resistance.mq4 ou

kg_support_et_resistance_alert_revision_2.ex4