Aiuto per la codifica - pagina 239

 

Salve,

Ho modificato l'indicatore standard stepMA 9 in questo in una finestra separata come istogramma ma non so perché i segnali di acquisto non sono sincronizzati con l'indicatore standard (i segnali di vendita lo sono). Con quello nuovo si verifica una barra indietro rispetto all'indicatore originale. Perché? Ho modificato solo la parte di codice che determina l'aspetto grafico dell'indicatore.

stepma_9_histo_mtf.mq4

stepma_9.0.mq4

File:
 
thefxpros:
Ciao,

Ho modificato l'indicatore standard stepMA 9 in questo in una finestra separata come istogramma ma non so perché i segnali di acquisto non sono sincronizzati con l'indicatore standard (i segnali di vendita lo sono). Con il nuovo si verifica una barra indietro rispetto all'indicatore originale. Perché? Ho modificato solo la parte di codice che determina l'aspetto grafico dell'indicatore.

stepma_9_histo_mtf.mq4

stepma_9.0.mq4

thefxpros

Questo è il risultato di come vengono disegnate le linee.

Quando disegnate una linea dovete iniziare a disegnare la linea 1 barra indietro per renderla visibile (altrimenti sarebbe un punto e non sarebbe affatto visibile sul grafico). Prova questi due e confrontali ora

File:
 

Ciao,

Sto cercando un EA che apra un trade in un modo simile a quello di un trailing stop.

Diciamo che sto aspettando un ritracciamento su uno strumento. Vorrei aprire il mio trade il più in alto (o in basso) possibile sul prezzo. Quindi, con un EA come questo, sarei in grado di impostare i miei parametri di trading e questo EA continuerà a seguire il prezzo in modo simile a un trailing stop. Quando c'è un'inversione, il trade viene colpito e aperto.

Hai mai visto un EA di questo tipo?

Grazie

 

Ciao a tutti

ho provato il codice fatto, ma perché non può aprire il commercio

int varCurrentTime = TimeCurrent();

for (int iTS = 0; iTS < 2000; iTS++) {

int varZonStart = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "00:00");

int varZonEnd = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "10:00");

int JamStart=TimeHour(varZonStart);

int JamEnd=TimeHour(varZonEnd);

if (JamStart>JamEnd) {

varCurrentTime = decDateTradeDay(varCurrentTime);

//if (TimeDayOfWeek(varCurTime) < 1) varCurTime = decDateTradeDay(varCurTime);

if (TimeDayOfWeek(varCurrentTime) > 5) varCurrentTime = decDateTradeDay(varCurrentTime);

}

varZonStart = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "00:00");

int varShiftStart = iBarShift(NULL, 0, varZonStart - 60 * Period());

int varShiftEnd = iBarShift(NULL, 0, varZonEnd);

varHighest = High;

varLowest = Low;

varCurrentTime = decDateTradeDay(varCurrentTime); //set 1 hari kebelakang

if (TimeDayOfWeek(varCurrentTime) < 1) varCurrentTime = decDateTradeDay(varCurrentTime); //jika minggu mundur lagi

if (TimeDayOfWeek(varCurrentTime) > 5) varCurrentTime = decDateTradeDay(varCurrentTime); //jika sabtu mundur lagi

}

for (int iTSh = 0; iTSh < 2000; iTSh++) {

for (int iTSl = 0; iTSl < 2000; iTSl++) {

if(((varHighest-varLowest)/Pip)<=5) varHL=(varHighest+varLowest)/2;

}

}

double isg10a = iOpen(Symbol(),PERIOD_M15,1);

double isg10b = iClose(Symbol(),PERIOD_M15,1);

int static isg10c = -1;

for (iTS = 0; iTS < 2000; iTS++) {

if(isg10avarHL)isg10c =0;

if(isg10a>varHL&&isg10b<varHL)isg10c =1;

}

if (isg10c==0) To code Buy

else if (isg10c==1) To code Sel

else no trade

 
mladen:
Jim Invece di riscrivere l'intera cosa ho aggiunto un limite per calcolare le barre e poi tutte quelle barre vengono ricalcolate. Questo dovrebbe risolvere il problema del refresh (basta tenere il BarsTocalculate ad un valore ragionevole - non troppo grande e non troppo piccolo. Ho usato 1000 come valore predefinito e sembra andare bene così). Provate

Caro mladen,

molte molte grazie per il tuo sforzo e il tuo aiuto molto veloce.

Proverò.

Tanti saluti da Monaco

 

Per favore, aiutatemi ad aggiornare questo indicatore di volume da allegare al mio mt4

Ciao guru vi prego gentilmente di aiutarmi a risolvere gli errori in questo indicatore di volume. Ho appena notato che non è in grado di allegare al mio grafico mt4 di recente. Ho fatto tutto il possibile per correggere gli errori nel file, ma senza successo. Sospetto che sia a causa dell'enorme aggiornamento di mt4. Ogni altro indicatore nella mia cartella mt4, sia le vecchie che le nuove versioni, funzionano tutte bene. Funzionava un anno fa l'ultima volta che l'ho usato. Non sono ancora un programmatore.

Si prega di trovare il file allegato

 

Ciao MLaden e Mrtools,

Spero che tu stia bene

Ho bisogno di una vostra conferma sull'RSX

Vedo che usi una formula più semplice per calcolare l'RSX:

__________________________

doppio Kg = (3,0)/(2,0+lunghezza);

doppio Hg = 1.0-Kg;

if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);

se (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars);

for(i=limit, r=Bars-i-1; i>=0; i--, r++)

{

wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Price,i);

if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continua; }

//

//

//

//

//

double mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

doppio moa = MathAbs(mom);

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];

wrkBuffer[r][kk+6] = Kg*moa + Hg*wrkBuffer[r-1][kk+6];

wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; moa = 1,5*wrkBuffer[r][kk+6] - 0,5 * wrkBuffer[r][kk+7];

}

se (moa != 0)

rsx = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00);

altrimenti rsx = 50;

____________________________________

Solo per essere sicuri di capire come viene calcolato l'RSX con questa formula

Prima con la linea

mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

infatti wrkBuffer[r][12] è la media mobile semplice del prezzo, notare il prezzo come con un RSI usuale ?

Giusto ? Ma non capisco quale sia il periodo di questa SMA (probabilmente non la lunghezza)?

E dopo, se ho ben capito con le linee:

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1];

mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];

Infatti calcola 3 volte il mom (uno dopo l'altro), con il primo mom sopra (mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];)

È giusto?

E dopo questo è "classico" con RSX=((mom/moa)+1)*50

Grazie per la tua prossima risposta, come coder (su un'altra piattaforma), sai che mi piace capire come funzionano i codici

Buona giornata

Zilliq

 
zilliq:
Ciao MLaden e Mrtools,

Spero che tu stia bene

Ho bisogno di una tua conferma sull'RSX

Vedo che usate una formula più semplice per calcolare l'RSX:

__________________________

doppio Kg = (3,0)/(2,0+lunghezza);

doppio Hg = 1.0-Kg;

if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);

se (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars);

for(i=limit, r=Bars-i-1; i>=0; i--, r++)

{

wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Price,i);

if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continua; }

//

//

//

//

//

double mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

doppio moa = MathAbs(mom);

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];

wrkBuffer[r][kk+6] = Kg*moa + Hg*wrkBuffer[r-1][kk+6];

wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; moa = 1,5*wrkBuffer[r][kk+6] - 0,5 * wrkBuffer[r][kk+7];

}

if (moa != 0)

rsx = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00);

altrimenti rsx = 50;

____________________________________

Solo per essere sicuri di capire come viene calcolato l'RSX con questa formula

Prima con la linea

mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

infatti wrkBuffer[r][12] è la media mobile semplice del prezzo, notare il prezzo come con un RSI usuale ?

Giusto ? Ma non capisco quale sia il periodo di questa SMA (probabilmente non la lunghezza)?

E dopo, se ho ben capito con le linee:

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1];

mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];

Infatti calcola 3 volte il mom (uno dopo l'altro), con il primo mom sopra (mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];)

È giusto?

E dopo questo è "classico" con RSX=((mom/moa)+1)*50

Grazie per la tua prossima risposta, come coder (su un'altra piattaforma), sai che mi piace capire come funzionano i codici

Buona giornata

Zilliq

"Infatti wrkBuffer[r][12] è la media mobile semplice del prezzo, nota il prezzo come con un RSI usuale?

No. Il periodo di calcolo di quella media è 1, il che significa che è uguale al prezzo della "media" utilizzata. In metatader questo è il modo più veloce per ottenere il prezzo desiderato (se provate a scrivere la struttura "case" facendo la stessa cosa vedrete che è molto più lento del modo usato nel codice rsx)

"Infatti calcola 3 volte il mom (uno dopo l'altro), con il primo mom sopra"

No. Guarda quali valori sta usando in ogni nuova iterazione. mom e moa sono costantemente cambiati e riutilizzati (in quella forma modificata) durante il processo di looping

 

Grazie mille Mladen,

È molto strano, se ho ben capito wrkBuffer[r][12] è uguale al prezzo, ma tu usi una media mobile con un periodo di 1 per accelerare il calcolo. Questo è molto curioso...

Per la seconda cosa, credo che sia quello che cerco di dire

calcola la mamma come momento del prezzo

E calcola un'altra mamma con Kg e Hg. Dà una nuova mamma, che è abituata a creare una nuova mamma, e così via, 3 volte

Qualcosa di più "facile" (per facilitare la comprensione) come questo

mamma

mamma1=kg*mamma

mamma2=kg*mamma1

mamma3=kg*mamma2

E alla fine usa mom3, e moa3

Ho ragione?

 
zilliq:
Grazie mille Mladen,

È molto strano, se ho ben capito wrkBuffer[r][12] è uguale al prezzo, ma voi usate una media mobile con un periodo di 1 per accelerare il calcolo. Questo è molto curioso...

Per la seconda cosa, credo che sia quello che cerco di dire

calcola la mamma come momento del prezzo

E calcola un'altra mamma con Kg e Hg. Dà una nuova mamma, che è abituata a creare una nuova mamma, e così via, 3 volte

Qualcosa di più "facile" (per facilitare la comprensione) come questo

mamma

mamma1=kg*mamma

mamma2=kg*mamma1

mamma3=kg*mamma2

E alla fine usa mom3, e moa3

Ho ragione?

Zilliq,

sì, è così che si fa