Convertire questo MT3 in MT4 per me - molto facile - pagina 2

 

Convertire questo MT3 in MT4 per me - molto facile

Sto pensando di passare da MT4 a MT3.

Ho appena finito di modificare il mio primissimo expert advisor.

Mi ci sono volute circa 4 settimane per imparare abbastanza su MT e MQL4 per riuscire finalmente a programmare la mia strategia, ma ora penso che potrei semplicemente convertire il programma in MQL2.

Da quello che ho letto su questo forum, non vedo alcun vantaggio di MT4.

Quello che ho letto, e imparato attraverso il backtesting del mio EA, è che lo Strategy Tester di MT4 non funziona. Solo per questo motivo, penso che abbia senso spendere qualche giorno in più per fare il passaggio in modo da poter ottenere un backtest accurato con MT3.

Ho già scaricato e installato MT3 e dato un'occhiata al dizionario dell'editor. Vedo che ci sono meno funzioni con MT3 che con MT4, ma non credo che questo sarà un grosso problema.

Una caratteristica del mio EA MQL4 su cui facevo molto affidamento, era l'OrderMagicNumber per memorizzare il prezzo originale dell'ordine in sospeso, che può cambiare con lo slippage quando l'ordine viene eseguito.

Gli ordini MQL2 non hanno OrderMagicNumber, ma ho notato nel dizionario MQL2 una funzione chiamata OrderValue che, nella sua descrizione, dice che la funzione può recuperare il commento di un ordine (VAL_COMMENT).

Se posso usare il commento per memorizzare il prezzo preferito, penso di poter fare il passaggio a MT3. Tuttavia, non sono riuscito a trovare nel dizionario, come impostare il commento dell'ordine. La descrizione della funzione SetOrder non elenca "comment" come uno dei suoi parametri.

Qualcuno che ha familiarità con questa funzione di MQL2 può dirmi come si imposta il commento dell'ordine?

 
BC Brett:

Da quello che ho letto su questo forum, non vedo alcun vantaggio di MT4.

Quello che ho letto, e imparato attraverso il backtesting del mio EA, è che lo Strategy Tester di MT4 non funziona. Solo per questo motivo, penso che abbia senso spendere qualche giorno in più per fare il passaggio in modo da poter ottenere un backtest accurato con MT3.

Quindi, dove hai letto che il backtester MT3 è più affidabile del backtester MT4?

Penso che tu sia molto male informato su questo!

Il backtesting MT4 può essere molto affidabile, ma dipende dalla qualità dei dati storici che avete e dalla vostra % di qualità di modellazione.

Non sarà possibile aggiungere "commenti" o assegnare "MagicNumbers" agli ordini inviati in MQL2 come può essere fatto nella programmazione MT4. La programmazione MT4 è più avanzata di quella MQL2, perché tornare indietro?

 

Potresti voler leggere sul backtesting MT4 qui: http://www.strategybuilderfx.com/forums/showthread.php?t=15309&page=1&pp=8

(se non puoi accedere alla pagina dovrai registrarti come membro - è gratuito)

 

Da quello che ho raccolto qua e là, le persone che sono un po' serie sul backtesting usano software come WealthLab, Amibroker o MetaStocks, NON mt3 o mt4.

Forse, il backtesting su mt4 può andare bene se non si usano dati intrabar. Per esempio, se lavorate con barre giornaliere, dovreste usare solo i valori di Open e Close delle barre giornaliere (e nemmeno High e Low se impostate StopLosses o Take Profits). Nient'altro.

Il motivo è che, nonostante quello che potrebbe dire la loro "qualità di modellazione", l'unico metodo di backtesting di mt4 che usa dati REALI è"Solo prezzi aperti".

I metodi "Every tick" e "Control Points" sono belle favole. Personalmente, non farò trading basandomi su backtesting di dati fiabeschi.

Sto ancora imparando mt4, ma nella mia esperienza, non userei il backtesting di mt4 in nessun altro modo. Non sono nemmeno sicuro al 100% che il modo che ho suggerito sia affidabile al 100%. Se voglio fare un buon backtesting, mi procurerò un software di backtesting.

Riguardo mt4 vs mt3 per il trading live: da quello che ho raccolto qua e là ;-) mt4 non è affidabile. A volte, gli ordini che mt4 dice che non sono stati eseguiti, sono in realtà eseguiti! Questo è stato riportato dai broker. Se questo è vero, allora i broker che offrono mt4 live trading non sono seri. Oppure, si sono assicurati che i bug di mt4 non accadano sulla loro piattaforma, anche questo è possibile.

D'altra parte, "ho raccolto qua e là" lol che il trading live con mt3 è possibile.

 

Convertire questo MT3 in MT4 per me - molto facile

Ciao ragazzi, apprezzerei se qualcuno potesse convertire questo in linguaggio MT4 per me - il nostro broker ha appena aggiornato a MT4.

Ecco il codice:

/*[[

Name := TTM Stoch

Author := Scott Black

Link := http://www.tradethemajors.com

Separate Window := yes

First Color := Cyan

First Draw Type := Line

Use Second Data := yes

second Color := Magenta

second Draw Type := Line

Minimum Chart Limits := 0.000000

Maximum Chart Limits := 100.000000

]]*/

Inputs : Slw(8),Pds(13),Slwsignal(9);

Variables : AA(0),bb(0),aa1(0),cnt1(0);

Variables : shift(0), cnt(0), loopbegin(0),loopbegin2(0),loopbegin3(0), first(True), prevbars(0);

Variables : sum(0), smconst(0),smconst1(0), prev(0),prev1(0),prev2(0),prev3(0), weight(0), linear(0);

Variables : MAValue(0),MAValue2(0),mavalue3(0), MAstring("");

Variables : MyHigh(0),MyLow(0),counter(0),Price(0),Price1(0);

SetLoopCount(0);

smconst = 2 / (1+SLW);

smconst1 = 2 / (1+slwsignal);

loopbegin = loopbegin+1;

For shift = 2000 Downto 0 Begin

prev = GetIndexValue2(shift+1);

AA =100* ((Close[shift] - Low[Lowest(MODE_LOW,shift+pds,Pds)]) / (High - low[Lowest(MODE_LOW,shift+pds,Pds)]));

MAValue2 = smconst * (aa-prev) + prev;

SetIndexValue2(shift,MAValue2);

loopbegin = loopbegin-1;

End;

loopbegin2 = loopbegin2+1;

For shift = 2000-pds downto 0 Begin

MyHigh = -999999;

MyLow = 99999999;

For counter = shift to pds + shift Begin

PRICE= GetIndexValue2(counter);

If Price > MyHigh Then

MyHigh = Price;

If pds <= 0 Then

MyHigh = Price;

If Price < MyLow Then

MyLow = Price;

If pds <= 0 Then

MyLow = Price;

end;

prev1 = GetIndexValue(shift+1);

aa1=GetIndexValue2(shift);

bb=100*(aa1-mylow)/(myhigh-mylow);

MAValue = smconst * (bb-prev1) + prev1;

SetIndexValue(shift,mavalue);

loopbegin2 = loopbegin2-1;

End;

loopbegin3 = loopbegin3+1;

For shift = 2000 downto 0 Begin

prev2=GetIndexValue2(shift+1);

prev3=GetIndexValue(shift);

MAValue3= smconst1 * (prev3-prev2) +Prev2;

SetIndexValue2(shift,mavalue3);

loopbegin3 = loopbegin3-1;

end;

/*[[

Grazie mille!

 
scott TTM:
Ciao ragazzi, apprezzerei se qualcuno potesse convertire questo in linguaggio MT4 per me - il nostro broker ha appena aggiornato a MT4.

Ecco il codice:

/*[[

Name := TTM Stoch

Author := Scott Black

Link := http://www.tradethemajors.com

Separate Window := yes

First Color := Cyan

First Draw Type := Line

Use Second Data := yes

second Color := Magenta

second Draw Type := Line

Minimum Chart Limits := 0.000000

Maximum Chart Limits := 100.000000

]]*/

Inputs : Slw(8),Pds(13),Slwsignal(9);

Variables : AA(0),bb(0),aa1(0),cnt1(0);

Variables : shift(0), cnt(0), loopbegin(0),loopbegin2(0),loopbegin3(0), first(True), prevbars(0);

Variables : sum(0), smconst(0),smconst1(0), prev(0),prev1(0),prev2(0),prev3(0), weight(0), linear(0);

Variables : MAValue(0),MAValue2(0),mavalue3(0), MAstring("");

Variables : MyHigh(0),MyLow(0),counter(0),Price(0),Price1(0);

SetLoopCount(0);

smconst = 2 / (1+SLW);

smconst1 = 2 / (1+slwsignal);

loopbegin = loopbegin+1;

For shift = 2000 Downto 0 Begin

prev = GetIndexValue2(shift+1);

AA =100* ((Close[shift] - Low[Lowest(MODE_LOW,shift+pds,Pds)]) / (High - low[Lowest(MODE_LOW,shift+pds,Pds)]));

MAValue2 = smconst * (aa-prev) + prev;

SetIndexValue2(shift,MAValue2);

loopbegin = loopbegin-1;

End;

loopbegin2 = loopbegin2+1;

For shift = 2000-pds downto 0 Begin

MyHigh = -999999;

MyLow = 99999999;

For counter = shift to pds + shift Begin

PRICE= GetIndexValue2(counter);

If Price > MyHigh Then

MyHigh = Price;

If pds <= 0 Then

MyHigh = Price;

If Price < MyLow Then

MyLow = Price;

If pds <= 0 Then

MyLow = Price;

end;

prev1 = GetIndexValue(shift+1);

aa1=GetIndexValue2(shift);

bb=100*(aa1-mylow)/(myhigh-mylow);

MAValue = smconst * (bb-prev1) + prev1;

SetIndexValue(shift,mavalue);

loopbegin2 = loopbegin2-1;

End;

loopbegin3 = loopbegin3+1;

For shift = 2000 downto 0 Begin

prev2=GetIndexValue2(shift+1);

prev3=GetIndexValue(shift);

MAValue3= smconst1 * (prev3-prev2) +Prev2;

SetIndexValue2(shift,mavalue3);

loopbegin3 = loopbegin3-1;

end;

/*[[

Grazie mille!

Ciao Scott...

Prova questo....

File:
ttm_stoch.mq4  5 kb
 

Hellkas,

temo che non abbia funzionato del tutto. Vai su www.compoundfx.com/mt3stoch.jpg per vedere come dovrebbe apparire sul grafico MT3 - ho provato a caricare questo ma non ha funzionato.

Grazie per i tuoi sforzi, forse questo ti aiuterà?

Quando lo traccio in MT4, vedo solo una linea magenta e non una ciano - anche se vedo che l'input è lì.

scott

 

Ciao,

Innanzitutto hellkas ti ringrazio per aver mantenuto l'intestazione del mio file dopo aver convertito l'indicatore mql con il mio tool Mql2Mq4 !!!

Allora è normale che l'indicatore convertito non funzioni correttamente, se guardi in Metatrade 4 nel TabSheet (Pannello) del log dei messaggi dell'esperto vedrai "Zero Devide exception" come in questa immagine. Nello script dell'indicatore si usa l'operatore divide, con alcune volte NULL:-( ecco il perché di questo errore, e ripeto, in Metatrade 3, non c'erano eccezioni generate per questo, tuttavia in Metatrade 4.

Ho messo il convertito che funziona come in MT 3, e potete vedere che tipo di cambiamento ho fatto.

Arrivederci

File:
exception.jpg  52 kb
ttmstoch.mq4  5 kb
 

yousky,

Grazie mille, sembra perfetto! Lo apprezzo molto.

-SB

 

yousky,

Ok, dopo un'ulteriore revisione, non è ancora del tutto lì. Mi dà ancora false letture su MT4, cioè le linee non si incrociano dove dovrebbero essere. Ho usato il codice che hai messo qui. Qualche idea?

SB