Come codificare? - pagina 327

 

Ciao a tutti, ho questo particolare errore con il mio EA su Stocastic.

Il mio criterio è questo:

Quando il mio stocEquator incrocia al rialzo (Uptrend), solo long sarà attivato quando il mio stocTrigger incrocia al rialzo e quando stocEquator incrocia al ribasso (Downtrend), solo short sarà attivato quando stocTrigger incrocia al ribasso.

Tuttavia, quando eseguo l'EA per il test, non ci sono operazioni attivate e mi stavo chiedendo quale potrebbe essere il problema e apprezzerei se qualcuno potesse aiutarmi.

Grazie in anticipo per l'aiuto.

Saluti

Terrance

int isCrossedTrigger= 0;

double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;

se ((diff1Trigger*diff2Trigger)<0)

{

se (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

altrimenti isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

doppio diff2Equator = shortStoc2Equator-longStoc2Equator;

se ((diff1Equator*diff2Equator)<0)

{

se (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

altrimenti isCrossedEquator = 2;

}

se(totale < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Compra

}

se(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Vendi

}

return(0);

}

return(0);

 
tkuan77:
Ciao a tutti, ho questo particolare errore con il mio EA su Stocastic.

Il mio criterio è questo:

Quando il mio stocEquator incrocia in alto (Uptrend), solo long sarà attivato quando il mio stocTrigger incrocia in alto e quando stocEquator incrocia in basso (Downtrend), solo short sarà attivato quando stocTrigger incrocia in basso.

Tuttavia, quando eseguo l'EA per il test, non ci sono operazioni attivate e mi stavo chiedendo quale potrebbe essere il problema e apprezzerei se qualcuno potesse aiutarmi.

Grazie in anticipo per l'aiuto.

Saluti

Terrance

int isCrossedTrigger= 0;

double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;

se ((diff1Trigger*diff2Trigger)<0)

{

se (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

altrimenti isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

doppio diff2Equator = shortStoc2Equator-longStoc2Equator;

se ((diff1Equator*diff2Equator)<0)

{

se (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

altrimenti isCrossedEquator = 2;

}

se(totale < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Compra

}

se(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Vendi

}

return(0);

}

ritorno(0);

Terrance

L'unica cosa che non ho potuto controllare è la variabile "totale".

Il codice dovrebbe funzionare se la variabile totale è impostata correttamente. Ecco un indicatore di prova che ho usato con le tue condizioni e sta sollevando segnali di acquisto e vendita validi (esegui l'indicatore in modalità visiva e vedrai quando si allerta) quindi l'errore è da qualche altra parte

#property indicator_separate_window

#property indicator_buffers 0

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

//

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

int init()

{

return(0);

}

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

//

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

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 

Ciao mladen, grazie per la segnalazione. Sono tornato indietro e ho dato un'occhiata ai miei codici e non sono riuscito a capire cosa intendevi per variabile "totale". Quale potrebbe essere la causa del mio errore?

Saluti

Terrance

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

//| My_First_EA.mq4 |

//| TK|

//| Piattaforma di trading MetaTrader 4 / MetaQuotes Software Corp. |

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

#proprietà copyright "TK"

#property link "http://www.metaquotes.net"

//--- parametri di input

extern double TakeProfit=500.0;

extern double Lots=0.1;

extern double StopLoss=500.0;

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

//| funzione di inizializzazione dell'esperto |

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

int init()

{

//----

//----

return(0);

}

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

//| funzione di deinizializzazione esperto |

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

int deinit()

{

//----

//----

return(0);

}

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

//| funzione di avvio esperto |

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

datetime newbar;

int start()

{

if(newbar==Time[0])return(0);

altrimenti newbar=Time[0];

int biglietto, totale;

se(Bars<100)

{

Print("barre inferiori a 100");

return(0);

}

se(TakeProfit<10)

{

Print("TakeProfit inferiore a 10");

return(0);

}

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

//| funzione di avvio esperto | Trigger stocastico

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

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); //originale movimento Stoc

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); //originale movimento Stoc

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

//| funzione di avvio esperto | Imposta il trade trigger solo quando la linea è attraversata e la candela chiusa |//

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

int isCrossed = 0;

double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1 = shortStoc1-longStoc1;

doppio diff2 = shortStoc2-longStoc2;

se ((diff1*diff2)<0)

{

se (shortStoc1>longStoc1)

isCrossed = 1;

altrimenti isCrossed = 2;

}

// Equator Stoc Start -------------------------------------

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

doppio diff2Equator = shortStoc2Equator-longStoc2Equator;

se ((diff1Equator*diff2Equator)<0)

{

se (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

altrimenti isCrossedEquator = 2;

}

// Equator Stoc End -------------------------------------

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

//| funzione fine esperto | Imposta il trade trigger solo quando la linea è attraversata e la candela è chiusa |//

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

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

//| expert end function | Trigger stocastico

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

//| expert start function | Trigger order

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

totale = OrdiniTotali();

if(total < 2) //limita il numero di operazioni aperte

{

if(isCrossed == 1 && isCrossedEquator == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Il mio EA",12345,0,Verde);

se(biglietto>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Ordine BUY aperto : ",OrderOpenPrice());

}

else Print("Errore nell'apertura dell'ordine BUY: ",GetLastError());

return(0);

}

if(isCrossed == 2 && isCrossedEquator == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Il mio EA",12345,0,Rosso);

se(biglietto>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Ordine SELL aperto : ",OrderOpenPrice());

}

else Print("Errore nell'apertura dell'ordine SELL: ",GetLastError());

return(0);

}

return(0);

}

return(0);

}

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

//| funzione fine esperto |

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

mladen:
Terrance

L'unica cosa che non ho potuto controllare è la variabile "totale".

Il codice dovrebbe funzionare se la variabile totale è impostata correttamente. Ecco un indicatore di prova che ho usato con le tue condizioni e sta sollevando segnali di acquisto e vendita validi (esegui l'indicatore in modalità visiva e vedrai quando si allerta) quindi l'errore è da qualche altra parte

#property indicator_separate_window

#property indicator_buffers 0

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

//

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

int init()

{

return(0);

}

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

//

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

int start()

{

int total = 0;

int isCrossedTrigger= 0;

double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;

double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;

double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;

double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;

if ((diff1Trigger*diff2Trigger)<0)

{

if (shortStoc1Trigger>longStoc1Trigger)

isCrossedTrigger= 1;

else isCrossedTrigger= 2;

}

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

double diff2Equator = shortStoc2Equator-longStoc2Equator;

if ((diff1Equator*diff2Equator)<0)

{

if (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

else isCrossedEquator = 2;

}

//

//

//

//

//

if(total < 2)

{

if(isCrossedTrigger== 1 && isCrossedEquator == 1)

{

Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

if(isCrossedTrigger== 2 && isCrossedEquator == 2)

{

Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));

}

}

return(0);

}
 
tkuan77:
Ciao mladen, grazie per l'evidenziazione. Sono tornato indietro e ho dato un'occhiata ai miei codici e non sono riuscito a capire cosa intendevi per variabile "totale". Quale potrebbe essere la causa del mio errore?

Saluti

Terrance

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

//| My_First_EA.mq4

//| TK|

//| Piattaforma di trading MetaTrader 4 / MetaQuotes Software Corp. |

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

#proprietà copyright "TK"

#property link "http://www.metaquotes.net"

//--- parametri di input

extern double TakeProfit=500.0;

extern double Lots=0.1;

extern double StopLoss=500.0;

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

//| funzione di inizializzazione dell'esperto |

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

int init()

{

//----

//----

return(0);

}

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

//| funzione di deinizializzazione esperto |

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

int deinit()

{

//----

//----

return(0);

}

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

//| funzione di avvio esperto |

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

datetime newbar;

int start()

{

if(newbar==Time[0])return(0);

altrimenti newbar=Time[0];

int biglietto, totale;

se(Bars<100)

{

Print("barre inferiori a 100");

return(0);

}

se(TakeProfit<10)

{

Print("TakeProfit inferiore a 10");

return(0);

}

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

//| funzione di avvio esperto | Trigger stocastico

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

// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); //originale movimento Stoc

// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); //originale movimento Stoc

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

//| funzione di avvio esperto | Imposta il trade trigger solo quando la linea è attraversata e la candela è chiusa |//

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

int isCrossed = 0;

double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);

double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);

double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);

double diff1 = shortStoc1-longStoc1;

doppio diff2 = shortStoc2-longStoc2;

se ((diff1*diff2)<0)

{

se (shortStoc1>longStoc1)

isCrossed = 1;

altrimenti isCrossed = 2;

}

// Equator Stoc Start -------------------------------------

int isCrossedEquator = 0;

double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);

double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);

double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);

double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);

double diff1Equator = shortStoc1Equator-longStoc1Equator;

doppio diff2Equator = shortStoc2Equator-longStoc2Equator;

se ((diff1Equator*diff2Equator)<0)

{

se (shortStoc1Equator>longStoc1Equator)

isCrossedEquator = 1;

altrimenti isCrossedEquator = 2;

}

// Equator Stoc End -------------------------------------

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

//| funzione fine esperto | Imposta il trade trigger solo quando la linea è attraversata e la candela è chiusa |//

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

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

//| expert end function | Trigger stocastico

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

//| expert start function | Trigger order

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

totale = OrdiniTotali();

if(total < 2) //limita il numero di operazioni aperte

{

if(isCrossed == 1 && isCrossedEquator == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,

"Il mio EA",12345,0,Verde);

se(biglietto>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Ordine BUY aperto : ",OrderOpenPrice());

}

else Print("Errore nell'apertura dell'ordine BUY: ",GetLastError());

return(0);

}

if(isCrossed == 2 && isCrossedEquator == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,

"Il mio EA",12345,0,Rosso);

se(biglietto>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Ordine SELL aperto : ",OrderOpenPrice());

}

else Print("Errore nell'apertura dell'ordine SELL: ",GetLastError());

return(0);

}

return(0);

}

return(0);

}

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

//| funzione fine esperto |

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

Terrance

Nei miei test che EA funziona

Ecco il risultato del test più il rapporto del back test. Testato su un time frame di 1 minuto

File:
tk.zip  16 kb
result.gif  13 kb
 

Ciao a tutti, pls qualcuno può aiutarmi con questo codice qui sotto,,,,it che continua a darmi un allarme sonoro ad ogni tick invece che solo quando le condizioni di trading richieste sono attivate! Non voglio che l'allarme suoni ad ogni tick o quando si formano nuove candele.

#proprietà indicator_chart_window

#proprietà indicator_buffers 2

#proprietà indicator_color1 Lime

#proprietà indicatore_colore2 Rosso

//---- parametri di input

extern int ADXbars=14;

extern int CountBars=350;

//---- buffer

double val1[];

doppio val2[]

double b4plusdi,nowplusdi,b4minusdi,nowminusdi;

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

//|Funzione di deinizializzazione dell'indicatore personalizzata

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

int deinit()

{

//----

//----

return(0);

}

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

//| Funzione di iterazione dell'indicatore personalizzato |

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

int init()

{

//-- nome breve dell'indicatore

IndicatoreNomeCorto("PipsdatorPro1("+Symbol()+")");

//---- linea dell'indicatore

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,234);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

return(0);

}

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

//| AltrTrend_Signal_v2_2 |

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

int start()

{

se (CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars);

SetIndexDrawBegin(1,Bars-CountBars);

int i,shift,counted_bars=IndicatorCounted();

//---- controllo di possibili errori

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

//---- zero iniziale

if(counted_bars<1)

{

for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;

for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0;

}

for (shift = CountBars; shift>=0; shift--)

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);

nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);

se (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=Low[shift]-5*Point;

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

i++;

}

if (b4plusdinowminusdi && i!=1)

{

val2[shift]=High[shift]+5*Point;

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

i++;

}

}

return(0);

}

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

 
Mastercash:
Ciao a tutti, pls qualcuno può aiutarmi con questo codice qui sotto,,,,it che continua a darmi un allarme sonoro ad ogni tick invece che solo quando si attivano le condizioni di trading richieste! Non voglio che l'allarme suoni ad ogni tick o quando si formano nuove candele.

#proprietà indicator_chart_window

#proprietà indicatore_buffer 2

#proprietà indicator_color1 Lime

#proprietà indicator_color2 Red

//---- parametri di input

extern int ADXbars=14;

extern int CountBars=350;

//---- buffer

double val1[];

doppio val2[]

double b4plusdi,nowplusdi,b4minusdi,nowminusdi;

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

//|Funzione personalizzata di deinizializzazione dell'indicatore |

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

int deinit()

{

//----

//----

return(0);

}

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

//| Funzione di iterazione dell'indicatore personalizzato |

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

int init()

{

//-- nome breve dell'indicatore

IndicatoreNomeCorto("PipsdatorPro1("+Symbol()+")");

//---- linea dell'indicatore

IndicatorBuffers(2);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,233);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,234);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

//----

return(0);

}

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

//| AltrTrend_Signal_v2_2 |

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

int start()

{

se (CountBars>=Bars) CountBars=Bars;

SetIndexDrawBegin(0,Bars-CountBars);

SetIndexDrawBegin(1,Bars-CountBars);

int i,shift,counted_bars=IndicatorCounted();

//---- controllo di possibili errori

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

//---- zero iniziale

if(counted_bars<1)

{

for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;

for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0;

}

for (shift = CountBars; shift>=0; shift--)

{

b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);

nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);

b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);

nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);

se (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)

{

val1[shift]=Low[shift]-5*Point;

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

i++;

}

if (b4plusdinowminusdi && i!=1)

{

val2[shift]=High[shift]+5*Point;

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

i++;

}

}

return(0);

}

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

Mastercash, c'è una versione di quell'indicatore qui https://www.mql5.com/en/forum/173574/page320 forse ti aiuterà.

 
mladen:
Terrance

Nei miei test l'EA funziona

Ecco il risultato del test più il rapporto del back test. Testato su 1 minuto di tempo

Ciao mladen, ho rivisto il codice secondo i tuoi commenti e ho notato che il trade si attiva solo quando entrambe le mie linee stocastiche si attivano al rialzo o al ribasso sulla stessa candela.

Tuttavia, quello che sto cercando di realizzare è che se l'indicatore equatore sta attraversando verso l'alto indicando un trend rialzista, l'EA si attiverà solo lungo quando l'indicatore veloce si attiverà verso l'alto e viceversa invece di avere sia l'equatore che l'indicatore veloce attivati nella stessa direzione nella stessa candela.

Ho provato a sintonizzare l'EA per soddisfare questo criterio ma non sono riuscito a ottenere i risultati desiderati. C'è qualcosa che sto sbagliando? Per favore aiutatemi. Grazie ancora.

Saluti

Terrance

 
tkuan77:
Ciao mladen, ho rivisto il codice secondo i tuoi commenti e ho notato che il trade si attiva solo quando entrambe le mie linee stocastiche si attivano verso l'alto o verso il basso sulla stessa candela.

Tuttavia, quello che sto cercando di realizzare è che se l'indicatore equatore sta incrociando verso l'alto indicando un trend rialzista, l'EA si innescherà solo long quando l'indicatore veloce si innescherà verso l'alto e viceversa invece di avere sia l'equatore che l'indicatore veloce innescati nella stessa direzione alla stessa candela.

Ho provato a sintonizzare l'EA per soddisfare questo criterio ma non sono riuscito a ottenere i risultati desiderati. C'è qualcosa che sto sbagliando? Per favore aiutatemi. Grazie ancora.

Saluti

Terrance

Terrance

Probabilmente dovrai scrivere un indicatore personalizzato per realizzare ciò (alcune cose negli EAs semplicemente non si possono fare nello stesso modo in cui si fanno gli indicatori)

 
mladen:
Terrance Probabilmente dovrai scrivere un indicatore personalizzato per realizzare ciò (alcune cose negli EAs semplicemente non si possono fare nello stesso modo in cui si fanno gli indicatori)

Ciao mladen, 1 cosa che non capisco è che perché sono in grado di fare questo con MA e non iMA nonostante sia lo stesso tipo di criterio? Potrebbe essere qualche forma di impostazione dell'indicatore?

Saluti

Terrance

 
tkuan77:
Ciao mladen, 1 cosa che non capisco è che perché riesco a fare questo con MA e non con iMA nonostante sia lo stesso tipo di criterio? Potrebbe essere qualche forma di impostazione dell'indicatore?

Per quanto riguarda

Terrance

perché con l'indicatore personalizzato è possibile salvare gli stati (tendenze) tra i due tick, e quando si utilizza iMA non è possibile (solo un esempio)