Come codificare? - pagina 321

 
mladen:
dasio

Prova qualcosa del genere:

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 OrangeRed

#property indicator_color2 Silver

#property indicator_width1 2

extern int RsiPeriod = 50;

extern int RsiPrice = PRICE_CLOSE;

double work[];

double avg[];

//------------------------------------------------------------------

//

//------------------------------------------------------------------

//

//

//

//

//

int init()

{

SetIndexBuffer(0,work);

SetIndexBuffer(1,avg);

return(0);

}

int start()

{

int i,countedBars = IndicatorCounted();

if (countedBars<0) return(-1);

if (countedBars>0) countedBars--;

int limit = MathMin(Bars-countedBars,Bars-1);

for(i=limit; i>=0; i--)

{

work = iRSI(NULL,0,RsiPeriod,RsiPrice,i);

int y = iBarShift(NULL,PERIOD_D1,Time);

int x = iBarShift(NULL,PERIOD_D1,Time);

if (x!=y)

{

int k = iBarShift(NULL,0,iTime(NULL,PERIOD_D1,y));

double average = work[k];

int c = 1;

for (int j=k-1; j>=i; j--,c++) average += work[j]; average /= c;

for ( j=k ; j>=i; j--) avg[j] = average;

}

}

return(0);

}

Mladen ho provato ma senza successo.

Allego un esempio del mio indicatore. Le uniche differenze sono nei calcoli ma il resto è lo stesso.

Puoi integrare con la tua formula, così posso anche studiarla.

Grazie per l'aiuto

test1.mq4

File:
test1.mq4  3 kb
 

Ciao a tutti. Cerco un aiuto veloce per scrivere una linea di codice per un segnale.

Sto usando Step_Indy e un EMA cross per il segnale. Quello che voglio fare è che l'EA entri nel trade solo quando entrambi danno un segnale entro 10 barre l'uno dall'altro.

Quindi diciamo che lo Step dà un segnale, voglio che l'EA guardi indietro di 10 barre per vedere se c'è stato un incrocio di MA, se sì entra. (Nota che non voglio solo controllare e vedere se il segnale corrente dell'incrocio MA è lungo, voglio che sia stato recente come entro 10 barre)

TIA per qualsiasi aiuto, non penso di aver visto questo fatto in passato in qualsiasi EA che ho guardato.

 

dasio

Dal codice non riesco a vedere qual è l'intenzione del codice. Comunque, qui c'è un codice in cui puoi scegliere se vuoi usare il vero range come valore "base" dell'indicatore (è la prima parte del tuo codice) o vuoi usare la seconda parte del tuo codice come valore "base

dasio:
Mladen ho provato ma senza successo.

Allego un esempio del mio indicatore. Le uniche differenze sono nei calcoli ma l'altro è lo stesso.

Puoi integrare con la tua formula, così posso anche studiarla.

Grazie

test1.mq4
File:
_test1.mq4  2 kb
 

Problemi con il segnale

Mladen, grazie ancora una volta, l'allarme non si ripete più, funziona bene.....ma voglio mettere uno stop sgnal.....e ho scritto il seguente codice, il segnale di acquisto e vendita funziona ma il buy stop e il sell stop non funziona, vedi il codice qui sotto:

//-----Assegnazione dei grafici----

if(Periodo()==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,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 di trading

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

{

lastAlerted=Time[0];

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

}

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

{

lastAlerted=Time[0];

Alert("Vendi","\n", "Il tempo corrente è ",TimeToStr(CurTime()),"\n",Symbol());

}

// Fermare gli avvisi

if((adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI<0&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alert("Stop Buy","\n", "Il tempo corrente è ",TimeToStr(CurTime()),"\n",Symbol());

}

if((adx_h4>=20)&&(di_m_h4>=20)&&(di_p_h4ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alert(" Stop Sell","\n", "Il tempo corrente è ",TimeToStr(CurTime()),"\n",Symbol());

}

mladen:
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());

}

}
 
mladen:
dasio Dal codice non riesco a vedere qual è l'intenzione del codice. Comunque, qui c'è un codice in cui puoi scegliere se vuoi usare il vero range come valore "base" dell'indicatore (è la prima parte del tuo codice) o se vuoi usare la seconda parte del tuo codice come valore "base

Grazie mladen.

So che calcolato in questo modo non ha senso. Ma sto cercando di codificare un'analisi che faccio ogni giorno. ^^

È solo 1/3 del lavoro.

Grazie

 
mladen:
dasio Dal codice non riesco a vedere qual è l'intenzione del codice. Comunque, qui c'è un codice in cui puoi scegliere se vuoi usare il vero range come valore "base" dell'indicatore (è la prima parte del tuo codice) o vuoi usare la seconda parte del tuo codice come valore "base

Grazie, è perfetto.

È possibile aggiungere la correzione del venerdì?

Grazie a voi

Saluti

 

Volume

Voglio interrogare il volume di ogni barra, ma non ho idea di come andare su di esso sono nuovo alla programmazione mql4, ma cercando di imparare ho provato questo semplice programma, ma può essere spazzatura completa, per favore fatemi sapere, e qualsiasi suggerimento sarebbe apprezzata. di seguito è l'inizio dello script per interrogare il volume di una barra poi stampare il risultato, per favore fatemi sapere dove sto andando male!!!! continuare a cercare di compilare c'è un errore che dice (fine del programma parentesi finale } previsto.

//--- parametri di input

extern double TakeProfit = 4;

extern double StopLoss = 20;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double volumemore = 600;

extern double volumeless = 150;

//+------------------------------------------------------------------+

//| funzione di inizializzazione esperto |

//+------------------------------------------------------------------+

int start()

{

se (Volume=>volumemore)

{

Stampa ("volume più");

{

se (Volume=<volumemore)

{

Stampa ("volume in meno");

se(Bars<20)

{

Print("barre inferiori a 20");

{

//----

//----

ritorno (0);

}

 

Usa Volume dove "index" è il numero della barra di cui vuoi vedere il volume. Ricorda solo che in Metatrader 4 il "Volume" è sempre il volume in tick

Tim Latham:
Voglio interrogare il volume di ogni barra, ma non ho la minima idea di come fare, sono nuovo nella programmazione di mql4, ma sto cercando di imparare, ho provato questo semplice programma, ma potrebbe essere una completa schifezza, per favore fatemelo sapere, e qualsiasi suggerimento sarebbe apprezzato. sotto è l'inizio dello script per interrogare il volume di una barra e poi stampare il risultato, per favore fatemi sapere dove sto andando male!!!! continuare a provare a compilare c'è un errore che dice (fine del programma che termina la parentesi } prevista.

//--- parametri di input

extern double TakeProfit = 4;

extern double StopLoss = 20;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double volumemore = 600;

extern double volumeless = 150;

//+------------------------------------------------------------------+

//| funzione di inizializzazione esperto |

//+------------------------------------------------------------------+

int start()

{

se (Volume=>volumemore)

{

Stampa ("volume più");

{

se (Volume=<volumemore)

{

Stampa ("volume in meno");

se(Bars<20)

{

Print("barre inferiori a 20");

{

//----

//----

ritorno (0);

}
 
jayjonbeach:
Ciao a tutti. Cerco un aiuto veloce per scrivere una linea di codice per un segnale.

Sto usando Step_Indy e un EMA cross per il segnale. Quello che voglio fare è che l'EA entri nel trade solo quando entrambi danno un segnale entro 10 barre l'uno dall'altro.

Quindi diciamo che lo Step dà un segnale, voglio che l'EA guardi indietro di 10 barre per vedere se c'è stato un incrocio di MA, se sì entra. (Nota: non voglio che controlli solo per vedere se il segnale corrente dell'incrocio MA è lungo, voglio che sia stato recente come entro 10 barre)

TIA per qualsiasi aiuto, non credo di aver visto questo fatto in passato in nessun EA che ho guardato.

Ho provato un paio di cose, ma finora niente ha funzionato.

Ecco uno dei modi in cui ho provato questo:

extern int lookback = 10;

extern int EMA1 = 21;

extern int EMA2 = 55;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest );

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1);

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1);

double FiftyFiveEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1);

se(ventunoEMA > cinquantacinqueEMA)

{

se (trendCurr>0)

{

for(int i=1; i<=Bars-lookback; i++)

{

se (trendCurr<0)

return(LONG);

altrimenti return(NONE);

}

}

}

if(ventunoEMA < cinquantacinqueEMA)

{

se (trendCurr<0)

{

for(int i2=1; i2<=Bars-lookback; i2++)

{

se (trendCurr>0)

return(SHORT);

altrimenti return(NONE);

}

}

}

return(NONE);

}

Qualsiasi idea apprezzata, ho anche provato (int i=1; i<=lookback; i++)

 

...

jayjonbeach,

Stai testando il valore di trendCurr più e più volte nel ciclo senza cambiarlo (quindi restituirà sempre NONE)

Prova a mettere iCustom() nel ciclo e poi testa quel valore. Qualcosa del genere:

if (trendCurr>0)

{

for(int i=1; i<=lookback; i++)

{

int testValue = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+i);

if (testValue<0) return(LONG);

}

return(NONE);

}

jayjonbeach:
Beh, ho provato un paio di cose, ma finora niente ha funzionato.

Ecco uno dei modi in cui ho provato questo:

extern int lookback = 10;

extern int EMA1 = 21;

extern int EMA2 = 55;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest);

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1);

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1);

double FiftyFiveEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1);

se(ventunoEMA > cinquantacinqueEMA)

{

se (trendCurr>0)

{

for(int i=1; i<=Bars-lookback; i++)

{

se (trendCurr<0)

return(LONG);

altrimenti return(NONE);

}

}

}

if(ventunoEMA < cinquantacinqueEMA)

{

se (trendCurr<0)

{

for(int i2=1; i2<=Bars-lookback; i2++)

{

se (trendCurr>0)

return(SHORT);

altrimenti return(NONE);

}

}

}

return(NONE);

}

Qualsiasi idea è apprezzata