Come codificare? - pagina 18

 

Michel,

Grazie mille per aver trovato il tempo di guardare il codice e rispondere. A volte basta un altro paio di occhi! Avevi ragione, l'errore era la divisione per 0 con una barra mancante. Ora è tutto risolto.

BW

 

Spiegazione del codice - Ind-Fractals-1

qualcuno può spiegare come vengono determinati i frattali in questo indicatore(https://c.mql5.com/forextsd/forum/165/ind-fractals-1.mq4). Ho notato che come i normali frattali c'è un ritardo tra il punto di svolta e il frattale effettivo che viene disegnato, tuttavia vorrei sapere quanto è lungo questo ritardo. Penso che un frattale di 15 minuti viene disegnato 40-50 barre 1min dopo che il punto è stabilito. Ho anche notato che il colore dei frattali cambia (anche se la loro posizione non lo fa) come alcuni frattali 15min diventano frattali 1hr.

 

come codificare quanto segue?

Ciao a tutti,

Sono un nuovo arrivato in metatrader 4. Non so molto di codifica in mt4.

Voglio che metatrader dia un avviso quando

1. La media mobile semplice a 30 periodi sale sopra la media mobile semplice a 60 periodi.

2. La media mobile semplice del periodo 30 cade sotto la media mobile semplice del periodo 60.

Qualcuno può aiutarmi a postare il codice qui?

grazie mille

 
adamk203:
Ciao a tutti,

Sono un nuovo arrivato in metatrader 4. Non so molto di codifica in mt4.

Voglio che metatrader dia un avviso quando

1. La media mobile semplice a 30 periodi sale sopra la media mobile semplice a 60 periodi.

2. La media mobile semplice del periodo 30 cade sotto la media mobile semplice del periodo 60.

Qualcuno può aiutarmi a postare il codice qui?

grazie mille

Perché non usare questo? metti la tua MA e scegli 0 per semplice, ti dà linee e frecce

File:
 

Grazie mille~~

 
increase:
Perché non usare questo? metti la tua MA e scegli 0 per semplice, ti dà linee e frecce

Ciao, vorrei far apparire il segnale quando la 2 candela pulita è finita dopo il cross over.thx in anticipo

File:
gbp_4h.gif  19 kb
 

pls aiutare a correggere il mio codice

Prima di tutto, credo che questo codice sia molto utile, molti lo ameranno. Quindi per favore aiutatemi a migliorarlo.

In effetti, questo codice funziona già alla grande. Ma sono stanco del semplice Alert popup, senza alcun simbolo mostrato. Così ho cambiato/aggiunto alcune linee per provare, che è la parte %%%%%%%%%.

Non so perché, stampa, commento... qualunque cosa, non succede niente.

E, stranamente, potete vedere nella parte "----alert----", ho cambiato l'avviso UPBREAK in qualcos'altro, ma mostra ancora "UP BREAK". ---- Sono sicuro che ogni volta che riscrivo il codice, lo compilo, lo cancello dal grafico e lo carico di nuovo.

Qualche idea?

#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);

}

 

Ho trovato cosa c'è di sbagliato:

Di solito, creo o modifico un codice con: "Metaeditor---file---nuovo/apri..."

Ma ho appena scoperto: dopo aver attaccato al grafico, e poi alcune modifiche in questo codice, alla fine altre modifiche non hanno più effetto sul grafico (sicuramente ho compilato!)----- ma "Metaeditor--navigatore--file---mio codice..." sì! È strano, dovrebbero essere lo stesso codice!

 

Aiuto con il codice delle tracce

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()

Questo è il codice. Come si vede nell'allegato su un ordine, modificherà lo stop ma lo modificherà anche nella direzione sbagliata e non riesco a risolverlo. Apprezzerei molto l'aiuto per trovare la soluzione!

File:
ordermodify.txt  40 kb
 

Prova questo. Sembra che tu stia cercando di modificare gli ordini con diversi simboli. Se è così, il Bid e l'Ask estrarranno i dati di mercato solo dal simbolo della finestra del grafico a cui è collegato l'EA. Usare MarketData(symbol, MODE_BID) è il modo per ottenere i dati appropriati.

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;

}