Comment coder ? - page 18

 

Michel,

Merci beaucoup d'avoir pris le temps d'examiner le code et de répondre. Parfois, il suffit d'une autre paire d'yeux ! Vous aviez raison de dire que l'erreur était une division par 0 avec une barre manquante. Tout est maintenant réglé.

BW

 

Explication du code - Ind-Fractals-1

quelqu'un peut-il expliquer comment les fractales sont déterminées dans cet indicateur(https://c.mql5.com/forextsd/forum/165/ind-fractals-1.mq4). j'ai remarqué que comme les fractales normales, il y a un délai entre le point de retournement et la fractale réelle qui est dessinée, cependant j'aimerais savoir combien de temps dure ce délai. je pense qu'une fractale de 15min est dessinée 40-50 barres de 1min après que le point soit établi. j'ai aussi remarqué que la couleur des fractales change (bien que leur position ne change pas) comme certaines fractales de 15min deviennent des fractales de 1hr.

 

comment coder ce qui suit ?

Bonjour à tous,

Je suis un nouveau venu sur metatrader 4. Je ne connais pas grand chose sur le codage dans mt4.

Je veux que Metatrader émette une alerte lorsque

1. La moyenne mobile simple de 30 périodes dépasse la moyenne mobile simple de 60 périodes.

2. La moyenne mobile simple de 30 périodes tombe en dessous de la moyenne mobile simple de 60 périodes.

Quelqu'un peut-il m'aider à afficher le code ici ?

Merci beaucoup.

 
adamk203:
Bonjour à tous,

Je suis un nouveau venu sur metatrader 4. Je ne connais pas grand chose sur le codage dans mt4.

Je veux que Metatrader émette une alerte lorsque

1. La moyenne mobile simple de 30 périodes dépasse la moyenne mobile simple de 60 périodes.

2. La moyenne mobile simple de 30 périodes tombe en dessous de la moyenne mobile simple de 60 périodes.

Quelqu'un peut-il m'aider à poster le code ici ?

merci beaucoup

Pourquoi ne pas utiliser ceci ? Entrez votre moyenne mobile et choisissez 0 pour simple, cela vous donne des lignes et des flèches.

Dossiers :
 

Merci beaucoup.

 
increase:
Pourquoi ne pas utiliser ceci ? Entrez votre MA et choisissez 0 pour le simple, cela vous donne des lignes et des flèches.

Bonjour, je voudrais que le signal apparaisse lorsque les 2 bougies propres sont terminées après le cross over.Merci d'avance.

Dossiers :
gbp_4h.gif  19 kb
 

S'il vous plaît aidez à corriger mon code

Tout d'abord, je crois que ce code est très pratique, beaucoup de gens vont l'aimer. Alors s'il vous plaît aidez-moi à l'améliorer.

En fait, ce code fonctionne déjà très bien. Mais je suis juste fatigué de la simple popup d'alerte, sans aucun symbole affiché. J'ai donc changé/ajouté quelques lignes pour essayer, ce qui est la partie %%%%%%%%%.

Je ne sais pas pourquoi, imprimer, commenter... peu importe, rien ne se passe.

Et, bizarrement, vous pouvez voir dans la partie "----alert----", j'ai changé l'alerte UPBREAK en quelque chose d'autre, mais il montre toujours "UP BREAK". ---- Je suis sûr qu'à chaque fois que je réécris le code, je le compile, le supprime du graphique et le charge à nouveau.

Une idée ?

#property indicator_chart_window

#import "usr32.dll" // %%%%%%%%%%

int MessageBoxA(int hWnd,string lpText,string lpCaption,int uType); //%%%%%%%%%%

#import //%%%%%%%%%%

int PrevAlertTime = 0;

int init()

{

return(0);

}

int deinit()

{

return(0);

}

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

int start()

{

int i=ObjectsTotal();

int redtotal=0,j,typ1;

double price1,price2,up,down;

color col;

string name1,name2,nameup,namedown,warn1,sym=Symbol();

warn1=sym + "Break Up"; //%%%%%%%%%%

Print(sym); //%%%%%%%%%%%

//----make sure exactly 2 red lines on chart---------------------

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

if(ObjectGet(ObjectName(j),OBJPROP_COLOR)==255 && ObjectType(ObjectName(j))==OBJ_TREND)

{ redtotal++;

if (redtotal==1) name1=ObjectName(j);

if (redtotal==2) name2=ObjectName(j);

}

if (redtotal==2)

{

if(ObjectFind("remind")==0) ObjectDelete("remind");

}

else

{

ObjectCreate("remind",OBJ_LABEL,0,0,0);

ObjectSet("remind", OBJPROP_XDISTANCE,0);

ObjectSet("remind", OBJPROP_YDISTANCE,20);

ObjectSetText("remind", "Keep exactly 2 red lines on chart" ,16,"Times New Roman",Blue);

return(0); // question here: what should I use, 0 or -1 ?

}

//--------decide which line is up / down ---------------------

price1=NormalizeDouble(ObjectGetValueByShift(name1,1),

MarketInfo(Symbol(),MODE_DIGITS));

price2=NormalizeDouble(ObjectGetValueByShift(name2,1),

MarketInfo(Symbol(),MODE_DIGITS));

if (price2>=price1)

{

nameup=name2; namedown=name1;

up=price2; down=price1;

}

else

{ nameup=name1; namedown=name2;

up=price1; down=price2;

}

//-------- alert ----------------------------------------------

if (TimeCurrent() - PrevAlertTime > Period()*60/3)

{

if (Close[1]up)

{ MessageBoxA(NULL,"tupole","11111",0); // %%%%%%%%%%

Print(Symbol()); // %%%%%%%%%%

PrevAlertTime = TimeCurrent();

}

if (Close[1]>=down && Close[0]<down)

{ Alert("DOWN BREAK",Symbol());

PrevAlertTime = TimeCurrent();

}

}

return(0);

}

 

J'ai trouvé ce qui ne va pas :

Habituellement, je crée ou modifie un code par : "Metaeditor---file--new/open..."

Mais je viens de découvrir : après avoir attaché au graphique, et ensuite quelques changements dans ce code, finalement plus de changements n'affectent plus le graphique (sûrement j'ai compilé !)----- mais "Metaeditor--navigator--files---my code..." le font ! C'est bizarre, ce devrait être le même code !

 

Aide avec le code de la piste

void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!

{

if (byPips >=5)

{

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

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...

{

if (OrderType() == OP_BUY) {

//if (Bid > (OrderValue(cnt,VAL_OPENPRICE) + TrailingStop * Point)) {

// OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet);

// break;

//}

if (Bid - OrderOpenPrice() > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

if (OrderStopLoss() < Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

} else if (OrderType() == OP_SELL) {

if (OrderOpenPrice() - Ask > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {

if ((OrderStopLoss() > Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) ||

(OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(),

Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

}

}

}

} // proc TrailIt()

Voici le code. Comme on peut le voir dans la pièce jointe sur un ordre, il modifie l'arrêt mais aussi dans le mauvais sens et je ne peux pas le réparer. J'apprécierais vraiment votre aide pour trouver la solution !

Dossiers :
ordermodify.txt  40 kb
 

Essayez ceci. Il semble que vous essayez de modifier des ordres avec différents symboles. Si c'est le cas, l'offre et la demande tireront les données du marché uniquement du symbole de la fenêtre du graphique auquel l'EA est attaché. L'utilisation de MarketData(symbol, MODE_BID) est le moyen d'obtenir les données appropriées.

void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!

{

if (byPips >=5)

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

double bid=MarketInfo(OrderSymbol(),MODE_BID);

double ask=MarketInfo(OrderSymbol(),MODE_ASK);

if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...

{

if (OrderType() == OP_BUY)

{

if (bid - OrderOpenPrice() >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))

{

if (OrderStopLoss() < bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)|| (OrderStopLoss() == 0))

{

OrderModify(OrderTicket(), OrderOpenPrice(), bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

else if (OrderType() == OP_SELL)

{

if (OrderOpenPrice() - ask >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))

{

if ((OrderStopLoss() > ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) || (OrderStopLoss() == 0))

{

OrderModify(OrderTicket(), OrderOpenPrice(),ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);

}

}

}

}

}

}

return;

}