Come codificare? - pagina 308

 

Ciao Mladen,

Mi sono imbattuto in un codice fatto da te su stocastico. Tuttavia, quando lo spingo nei miei sistemi, non succede nulla. Posso verificare con te cosa fa?

http://www.forexmt4.com/mt_yahoo/Color%20Stochastic%20v1[ 1].04.mq4

Saluti

Terrance

 

...

Prova alcuni di questi postati qui: https: //www.mql5.com/en/forum/175297/page3

Oppure qui: https: //www.mql5.com/en/forum/177239/page2

Testati e funzionano

tkuan77:
Ciao Mladen,

Mi sono imbattuto in un codice fatto da te su stochastic. Tuttavia, quando lo spingo nei miei sistemi, non succede nulla. Posso verificare con te cosa fa?

http://www.forexmt4.com/mt_yahoo/Color%20Stochastic%20v1[ 1].04.mq4

Saluti

Terrance
 

Questo è strano.

Ho esaminato il problema del lucchetto un po' più in dettaglio. Apparentemente ha a che fare con le mie impostazioni UAC (User Account Control), così sono andato nel mio pannello di controllo di Windows7 e ho disattivato completamente UAC. Una volta riavviato ho notato che il lucchetto era scomparso dal file. L'ho aperto ed è lo stesso del file che ho postato su questo forum. Completamente diverso dal codice che ho scritto nelle ultime settimane, anche se in realtà è lo stesso file. Ho pensato di aver perso tutto il mio lavoro di codifica. Ho riattivato UAC e riavviato, il lucchetto era tornato e il codice che avevo scritto era di nuovo normale.

Ma poi ho provato a compilare il codice e raccoglie un sacco di errori. Ma gli errori che raccoglie non provengono da questo codice, ma dal codice completamente diverso quando spengo l'UAC - lo so perché raccoglie variabili che sono presenti solo nell'altro codice.

Penso che dovrò aprire un nuovo EA e digitare manualmente tutto questo codice e salvarlo.

 

...

È un problema abituale di windows 7 (con la sua protezione)

Il modo più semplice per evitarlo sotto windows 7 è quello di installare metatrader su una partizione diversa da C e non avrete problemi di questo tipo

crsnape@btinternet.com:
Questo è strano.

Ho esaminato il problema del lucchetto un po' più in dettaglio. Apparentemente ha a che fare con le mie impostazioni UAC (User Account Control), così sono andato nel mio pannello di controllo di Windows 7 e ho disattivato completamente UAC. Una volta riavviato ho notato che il lucchetto era scomparso dal file. L'ho aperto ed è lo stesso del file che ho postato su questo forum. Completamente diverso dal codice che ho scritto nelle ultime settimane, anche se in realtà è lo stesso file. Ho pensato di aver perso tutto il mio lavoro di codifica. Ho riattivato UAC e riavviato, il lucchetto era tornato e il codice che avevo scritto era di nuovo normale.

Ma poi ho provato a compilare il codice e raccoglie un sacco di errori. Ma gli errori che raccoglie non provengono da questo codice, ma dal codice completamente diverso quando spengo l'UAC - lo so perché raccoglie variabili che sono presenti solo nell'altro codice.

Penso che dovrò aprire un nuovo EA e digitare manualmente tutto questo codice e salvarlo.
 

Ho finalmente ottenuto un EA funzionante. Funziona esattamente come dovrebbe - ho finito per copiare il mio codice in notepad, disattivando UAC, poi incollandolo in un nuovo file EA. E ho capito perché le mie funzioni stavano giocando: avevo messo una variabile int dentro un normalizeddouble. Non sapevo di non poterlo fare, ma ora lo so - mi ci è voluta solo una settimana per capirlo! :/

Comunque, ho scritto questo:

if (VariableRisk == true) Risk = GetRiskShort (LastOpenTicket, RiskShort);

if (VariableRisk == false) Risk = StaticRisk;

E mi chiedevo se può essere abbreviato in questo modo?

if (VariableRisk == true)

{

Risk = GetRiskShort (LastOpenTicket, RiskShort);

else Risk = StaticRisk;

}

E ho anche scritto questo:

//--- Funzione per calcolare la posizione di take profit quando è lunga

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

doppio TPPriceLong = 0;

se (AutoCalcTakeProfit == true)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Take profit position calculated successfully");

return (TPPriceLong);

}

if (AutoCalcTakeProfit == false)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Posizione statica di take profit calcolata con successo");

return (TPPriceLong);

}

}

E mi chiedevo se può essere abbreviato in questo modo?

//--- Funzione per calcolare la posizione di take profit quando è lunga

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

doppio TPPriceLong = 0;

RefreshRates();

se (AutoCalcTakeProfit == true)

{

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Take profit position calculated successfully");

else TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Posizione di take profit statica calcolata con successo");

return (TPPriceLong);

}

E un'ultima domanda, per fornire un po' più di flessibilità al mio EA, voglio definire i miei timeframes come variabili esterne. Il mio grafico di segnale deve essere D1 diciamo, e il mio grafico di trigger deve essere H4. Quindi sotto variabili esterne potrei fare questo:

extern int SignalChart = PERIOD_D1;

extern int TriggerChart = PERIOD_H4;

E poi fare riferimento ad esso facendo questo per esempio:

SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

 

A proposito di questa parte:

E poi fare riferimento ad esso facendo questo per esempio: SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

Sì, questo è un modo corretto al 100% di usarlo (anche al punto che stai usando una barra chiusa (lo shift in quell'esempio è impostato a 1) e che, usando una barra chiusa nei test, stai per evitare la solita trappola di usare barre aperte in multi time framing)

crsnape@btinternet.com:
Ho finalmente ottenuto un EA funzionante. Funziona esattamente come dovrebbe - ho finito per copiare il mio codice in un blocco note, disattivando UAC, quindi incollandolo in un nuovo file EA. E ho capito perché le mie funzioni stavano giocando: avevo messo una variabile int dentro un normalizeddouble. Non sapevo di non poterlo fare, ma ora lo so - mi ci è voluta solo una settimana per capirlo! :/

Comunque, ho scritto questo:

if (VariableRisk == true) Risk = GetRiskShort (LastOpenTicket, RiskShort);

if (VariableRisk == false) Risk = StaticRisk;

E mi chiedevo se può essere abbreviato in questo modo?

if (VariableRisk == true)

{

Risk = GetRiskShort (LastOpenTicket, RiskShort);

else Risk = StaticRisk;

}

E ho anche scritto questo:

//--- Funzione per calcolare la posizione di take profit quando è lunga

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

doppio TPPriceLong = 0;

se (AutoCalcTakeProfit == true)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Take profit position calculated successfully");

return (TPPriceLong);

}

if (AutoCalcTakeProfit == false)

{

RefreshRates();

TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Posizione statica di take profit calcolata con successo");

return (TPPriceLong);

}

}

E mi chiedevo se può essere abbreviato in questo modo?

//--- Funzione per calcolare la posizione di take profit quando è lunga

double GetTPPriceLong (double SLPriceLong, int RiskRewardRatio, int StaticTP, bool AutoCalcTakeProfit)

{

doppio TPPriceLong = 0;

RefreshRates();

se (AutoCalcTakeProfit == true)

{

TPPriceLong = OrderOpenPrice() + ((OrderOpenPrice() - SLPriceLong) * RiskRewardRatio);

Print("Take profit position calculated successfully");

else TPPriceLong = OrderOpenPrice() + (StaticTP * 0.0001);

Print("Posizione di take profit statica calcolata con successo");

return (TPPriceLong);

}

E un'ultima domanda, per fornire un po' più di flessibilità al mio EA, voglio definire i miei timeframes come variabili esterne. Il mio grafico di segnale deve essere D1 diciamo, e il mio grafico di trigger deve essere H4. Quindi sotto variabili esterne potrei fare questo:

extern int SignalChart = PERIOD_D1;

extern int TriggerChart = PERIOD_H4;

E poi fare riferimento ad esso facendo questo per esempio:

SlowMACurrent = iMA(Symbol(), SignalChart, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
 

Ciao, sto ricevendo il codice di errore 4059:

[TD]La funzione non è consentita in modalità test.

ERR_FUNC_NOT_ALLOWED_IN_TESTING[/TD]

4059

Ho fatto una ricerca ma non riesco a trovare altre informazioni su cosa significa?

 

Puoi aiutarmi ad aggiungere i seguenti codici a questo indicatore Parabolic Sar?

Pip:
Grazie Mladen,

Rileggerò il tuo post per capire, onestamente mi sono un po' perso nel leggerlo, ma è molto probabile che sia la mia ignoranza a giocare. Posterò domande se ne ho.

Grazie amico.

Grazie,

Pip

Caro amico,

PUOI AIUTARMI AD AGGIUNGERE I SEGUENTI CODICI A QUESTO ALLARME PARABOLICO SAR parabolic_alert_mod.mq4INDICATOR?

Non sto cercando un EA. Se possibile aggiungete almeno l'opzione SHIFT all'indicatore.

extern double TakeProfit = 50;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double SAR_Step = 0.02;

extern double SAR_Maximum = 0.2;

extern double Shift=1;

 

...

joelnelson

TakeProfit, Lots e TrailingStop non hanno nulla a che fare con il modo in cui viene calcolato il sar parabolico (questi parametri sono ovviamente presi da un EA che usa il sar nel suo lavoro). Quindi, se non stai cercando un EA, non è possibile aggiungere quei parametri in modo significativo

Inoltre, lo spostamento nei parametri si riferisce alla barra che viene testata (il SAR parabolico non viene spostato come la media mobile può essere spostata di solito). Questi parametri sono probabilmente destinati a una chiamata a un sar incorporato e il sar incorporato ha la seguente forma

double iSAR([/TD] [TD]string symbol, int timeframe, double step, double maximum, int shift)

Shift 1 in questo caso serve a testare il valore della prima barra chiusa del sar parabolico

joelnelson:
Caro amico,

PUOI AIUTARMI ad aggiungere i seguenti codici a questo parabolic SAR alert parabolic_alert_mod.mq4INDICATOR?

Non sto cercando un EA. Se possibile aggiungete almeno l'opzione SHIFT all'indicatore.

extern double TakeProfit = 50;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double SAR_Step = 0.02;

extern double SAR_Maximum = 0.2;

extern double Shift=1;
 

...

Questo errore può essere restituito da alcune funzioni.

Le funzioni che possono causare quell'errore nei test sono le seguenti:

MarketInfo

MessageBox

SendFTP

SendMail

WindowIsVisible

WindowFind

WindowHandle

Quindi, una chiamata ad alcune delle funzioni di cui sopra ha causato questo errore

crsnape@btinternet.com:
Ciao, sto ricevendo il codice di errore 4059:[TD]La funzione non è consentita in modalità test.
ERR_FUNC_NOT_ALLOWED_IN_TESTING[/TD]4059
Ho fatto una ricerca ma non riesco a trovare altre informazioni su cosa significa?