Come codificare? - pagina 317

 

Ciao,

Sto pensando come posso codificare questo indicatore/strumento.

Ho bisogno di un indicatore, script o qualcosa di simile in cui posso decidere un certo intervallo di giorni (ex 12/10/2012-15/10/2012 o 15/10/2012-15/10/2012) e dopo scrive in un file csv o excel l'apertura alta bassa e chiusura per la candela visualizzata nel grafico a seconda del TF (es. se decido solo un giorno e allegarlo in 1hr TF scrive 24 candele con le loro specifiche).

Grazie in anticipo per il vostro aiuto

 

Problema del segnale di allarme.

Ciao a tutti, c'è questo piccolo problema con un codice MT4 che ho scritto. questo codice suppone di guardare oltre tre indici, stoichastic, RSI e CCI. se stoichastic attraversa la sua linea di segnale su o giù E RSI del periodo 70 e 6 si incrociano su o giù e CCI è sopra o sotto zero, ci dovrebbe essere un segnale di acquisto se tutti e 3 gli indici sono sopra le loro linee di segnale o ci dovrebbe essere un segnale di vendita se i 3 indici sono sotto le loro linee di segnale........questo codice funziona ma ogni volta che c'è l'allarme, continua a ripetersi ad ogni tick della candela. cosa posso fare per far suonare l'allarme solo una volta se le tre condizioni sono soddisfatte sulla candela corrente e non far suonare di nuovo. questo è il codice qui sotto.

if(Periodo()==240){

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// avvisi

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)){

Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&nowenCCI<b4enCCI)&&(nowtrCCI<0&nowtrCCI<b4trCCI)){

Alert("Sell Arrow","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}

 
mladen:
pooh

È semplicemente perché i valori dei diversi simboli possono differire così tanto (per esempio GBPJPY è circa 126 ora e EURUSD è circa 100 volte meno - quando si disegnano questi valori sullo stesso grafico, il valore di EURUSD è semplicemente "fuori dal quadro perché metatrader prende i valori di GBPJPY come criterio per la scalatura del grafico).

Dai un'occhiata a questo thread: https: //www.mql5.com/en/forum/178052. Ci sono già un paio di soluzioni per problemi simili in quel thread

Grazie Mladen. Ho seguito il tuo link e ho trovato l'indicatore adatto alle mie esigenze.

pooh

 

Prova in questo modo:

if(Period()==240)

{

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alerts

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Sell Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
Mastercash:
Ciao a tutti, c'è questo piccolo problema con un codice MT4 che ho scritto. questo codice suppone di guardare oltre tre indici, stocastico, RSI e CCI. se lo stocastico attraversa la sua linea di segnale su o giù E RSI del periodo 70 e 6 si incrociano su o giù e CCI è sopra o sotto lo zero, ci dovrebbe essere un segnale di acquisto se l'intero 3 indici sono sopra le loro linee di segnale o ci dovrebbe essere un segnale di vendita se i 3 indici sono sotto le loro linee di segnale........questo codice funziona ma ogni volta che c'è l'allarme, continua a ripetersi ad ogni tick della candela. cosa posso fare per far suonare questo allarme solo una volta se le tre condizioni sono soddisfatte sulla candela corrente e non riprende il suono. questo è il codice qui sotto.

if(Periodo()==240){

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// avvisi

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)){

Alert("Buy Arrow","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&nowenCCI<b4enCCI)&&(nowtrCCI<0&nowtrCCI<b4trCCI)){

Alert("Sell Arrow","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
 

Problemi con gli avvisi

Non ho mai preso nota della funzione LastAlert() e per favore puoi farmi sapere dove trovare la directory di tutte queste funzioni "tranche rouse" di mt4.

 

Mastercash

Attenzione: quella non è una funzione ma una variabile statica che viene utilizzata per memorizzare il tempo (tempo della barra) dell'ultimo allarme e in questo modo si evitano allarmi multipli sulla stessa barra. Purtroppo non esiste una funzione come LastAlert() in metatrader quindi dobbiamo trovare dei workaround come quello dell'esempio per risolvere la mancanza di funzioni

Mastercash:
Grazie mladen, ci proverò. Non ho mai preso nota della funzione LastAlert() e per favore puoi farmi sapere dove trovare la directory di tutte queste funzioni "tranche rouse" di mt4.
 

Ciao mladen.

Ho bisogno di assegnare 24 variabili ciascuna per le 24 candele dell'ultima ora del giorno.

Ho bisogno di fare qualche calcolo con la candela e il risultato sarà assegnato ad un buffer.

Come posso codificare il lavoro con ciascuna delle 24 candele del giorno precedente?

grazie

 

dasio

Puoi usare qualcosa di simile a questo (questa modalità non usa gli array). Inoltre, questo esempio è per il giorno corrente

datetime startTime = iTime(NULL,PERIOD_D1,0);

for (int i=iBarShift(NULL,PERIOD_H1,startTime); TimeDayOfYear(iTime(NULL,PERIOD_H1,i))==TimeDayOfYear(startTime); i--)

{

//

//

// processing the hourly data ... just an example here

//

//

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); // and so on ...

}

dasio:
Ciao mladen.

Ho bisogno di assegnare 24 variabili ciascuna per le 24 candele dell'ultima ora del giorno.

Ho bisogno di fare qualche calcolo con la candela e il risultato sarà assegnato ad un buffer.

Come posso codificare il lavoro con ciascuna delle 24 candele del giorno precedente?

grazie
 
mladen:
dasio

Puoi usare qualcosa di simile a questo (questa modalità non usa gli array). Inoltre, questo esempio è per il giorno corrente

datetime startTime = iTime(NULL,PERIOD_D1,0);

for (int i=iBarShift(NULL,PERIOD_H1,startTime); TimeDayOfYear(iTime(NULL,PERIOD_H1,i))==TimeDayOfYear(startTime); i--)

{

//

//

// processing the hourly data ... just an example here

//

//

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); // and so on ...

}

Grazie mladen.

In questo esempio

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); //

Quale candela rappresenta e come posso passare alla candela successiva? i+1?

Grazie a voi

 

dasio

Sta già facendo il looping di tutte le ore del giorno corrente. Ho messo iClose() e iOpen() solo come esempio di una chiamata da un time frame diverso da 1 ora. Se volete accedere a un giorno diverso da quello corrente, sostituite lo "0" sul datetime startTime=iTime(NULL,PERIOD_D1,0); con qualsiasi giorno per il quale volete che i dati siano raccolti

dasio:
Grazie mladen.

In questo esempio

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); //

Quale candela rappresenta e come posso passare alla candela successiva? i+1?

Grazie a voi