Forse un errore di array fuori portata e l'indicatore viene rimosso
int limit=rates_total-prev_calculated;
for(int i=0; i<limit; i++)
iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1))
Probabilmente stai ricevendo un messaggio nel log su un errore di inizializzazione globale
Controlla i tuoi log
Grazie per il tuo suggerimento.
Ho controllato il log, non c'è nessun errore o avviso.
Non sono sicuro che il (i+1) causi problemi, dato che da solo (o semplicemente cancellando la seconda parte), questo indicatore funziona bene.
SCFX
Ci sono errori Ho compilato il tuo codice e l'ho testato:
2014.05.22 22:39:43.936 Indicatore personalizzato Test Indicator 3 XAUUSD,M1: rimosso
2014.05.22 22:39:43.905 Indicatore di test 3 XAUUSD,M1: inizializzazione globale fallita
2014.05.22 22:39:43.905 Indicatore di test 3 XAUUSD,M5: uninit reason 3 //----------------------- cambiare grafico
2014.05.22 22:39:17.323array fuori range in 'Test Indicator 3.mq4' (117,32)
2014.05.22 22:39:15.591 Indicatore di test 3 XAUUSD,M5: inizializzato
2014.05.22 22:39:09.570 Indicatore personalizzato Test Indicator 3 XAUUSD,M5: caricato con successo
Grazie per il tuo suggerimento.
Ho controllato il log, non c'è nessun errore o avviso.
Non sono sicuro che il (i+1) causi problemi, dato che da solo (o semplicemente cancellando la seconda parte), questo indicatore funziona bene.
SCFX
Allora è probabilmente questo
roc_s[j]=Close[i+j]-Close[i+j+1];
Stai cercando di ottenere il prezzo di chiusura di barre che non esistono
Dovreste aggiungere una linea quando l'indicatore viene avviato per primo: prev_calculated == 0,
qualcosa del genere:
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated;
nessun errore neanche sul mio computer ;-)
Ciao ffoorr,
La tua soluzione è davvero buona.
A dire la verità, ho assunto qualcuno per sistemarla ieri sera. Sì, l'ha fatto ma il codice è inefficiente, vedi sotto, perché ha aggiunto un altro for(i).
Ti sarei grato se potessi spiegare cosa significa quel prev_calculated ==0. Non lo capisco.
//+------------------------------------------------------------------+ //| hf1.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| httakeprofit://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "httakeprofit://www.mql5.com" #property version "1.00" #property strict //--- indicator settings //#property indicator_chart_window #property indicator_separate_window #property indicator_buffers 5 #property indicator_width1 2 #property indicator_width2 2 #property indicator_width3 1 #property indicator_width4 1 #property indicator_width5 1 #property indicator_color1 Yellow #property indicator_color2 Red #property indicator_color3 Red #property indicator_color4 Orange #property indicator_color5 Orange //--- input parameter input int kperiod=30; input int dperiod=9; input int slow=9; input int sample_roc_quartile=100; //--- buffers double buy[]; double sell[]; double stoploss[]; double takeprofit1[]; double takeprofit2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) //*/*/*/*/*/ { //--- indicator buffers mapping //--- 1 additional buffer used for counting. //IndicatorBuffers(6); IndicatorDigits(Digits); //--- indicator line SetIndexStyle(0,DRAW_ARROW); SetIndexBuffer(0,buy); SetIndexArrow(0,241); SetIndexStyle(1,DRAW_ARROW); SetIndexBuffer(1,sell); SetIndexArrow(1,242); SetIndexStyle(2,DRAW_ARROW); SetIndexBuffer(2,stoploss); SetIndexStyle(3,DRAW_ARROW); SetIndexBuffer(3,takeprofit2); SetIndexStyle(4,DRAW_ARROW); SetIndexBuffer(4,takeprofit1); //--- name for DataWindow and indicator subwindow label //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int limit=rates_total-prev_calculated; if(limit<=0)limit =2; double roc_s[]; ArrayResize(roc_s,sample_roc_quartile+1); //--- //------------------------------------------ for(int i=1; i<limit; i++) { //FIRST PSART if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { buy[i]=Close[i]; stoploss[i]=Low[i]-0.005; takeprofit1[i]=Close[i]+0.005; takeprofit2[i]=Close[i]+0.01; } if(iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i)<iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i) && iStochastic(NULL,0,kperiod,dperiod,slow,0,0,0,i+1)>iStochastic(NULL,0,kperiod,dperiod,slow,0,0,1,i+1)) { sell[i]=Close[i]; stoploss[i]=High[i]; takeprofit1[i]=Close[i]-0.0050; takeprofit2[i]=Close[i]-0.01; } } //SECOND PART //--------------------------------------- HERE IS THE WHAT HE DID int mid = (sample_roc_quartile +1)/2; for(int i=1; i<limit&&(i+1)<rates_total; i++) { //--------------------------------------------- for(int j=0;j<=sample_roc_quartile&&(i+j+1)<rates_total;j++) { roc_s[j]=Close[i+j]-Close[i+j+1]; ArraySort(roc_s); } if( (Close[i]-Close[i+1])<roc_s[mid] ) { buy[i]=0; stoploss[i]=0; takeprofit1[i]=0; takeprofit2[i]=0; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Ciao a tutti...
Ho un problema nell'installare l'indicatore tradizionale IBFX MACD e altri modelli nel mio MT4.
Nella versione precedente, avrei solo bisogno di copiare e incollare i miei file nella cartella "indicator" situata nella cartella "expert".
Quella attuale ha solo la cartella "MQL4" che consiste in una cartella "expert" e una cartella "indicator".
Ho provato ad incollare in entrambe le cartelle e a riavviare la mia piattaforma ma non funziona
non succede.
Qualcuno può per favore consigliarmi su questo problema o forse qualche altro modo per ottenere il tradizionale indicatore MACD con 2 linee EMA?
Grazie
Douglasdouglas_heng: Sto avendo problemi ad installare l'indicatore tradizionale IBFX MACD e altri modelli nel mio MT4. | Don't Don't multiple (6) posts. Non dirottare i post degli altri. |
Ciao ffoorr,
La tua soluzione è davvero buona.
A dire la verità, ho assunto qualcuno per sistemarla ieri sera. Sì, l'ha fatto ma il codice è inefficiente, vedi sotto, perché ha aggiunto un altro for(i).
Ti sarei grato se potessi spiegare cosa significa quel prev_calculated ==0. Non lo capisco.
bene scfx, non capisco la seconda parte del tuo indicatore, quindi non posso dirlo.
Quando un indicatore viene avviato per la prima volta, (messo su un grafico) previous_calculation è uguale a Zero per costruzione, quindi si può fissare il punto di partenza da cui l'indicatore inizierà a calcolare.
if( prev_calculated == 0) limit = 100;
oppure
se( prev_calculato < 50) limite = 500:
o dire
if( prev_calculated < 500) limit = 3000: (è lo stesso, l'inizio del grafico non viene utilizzato)
int limit = -100; if( prev_calculated == 0 ) limit = 3000;// will calculate 3000 Bars else limit = rates_total-prev_calculated; at the first lauch of the indicator limit = 3000; for(int i=1; i<3000; i++) // draw 3000 bars at the second lauch limit = 0; // ( because rates_total-prev_calculated = 0) ; for(int i=1; i<0; i++) // draw the last bars only, faster
molto buona idea questo indi ......
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Salve,
Inizio con un indicatore (La PRIMA PARTE). Funziona bene, quando si cambia time frame.
Poi aggiungo la Seconda Parte che è: Se Close[i]-Close[i+1] è inferiore alla mediana del valore della differenza delle ultime 100 barre, assegnerò il valore 0 a tutti i buffer.
Ora l'indicatore combinato funziona bene in 1 grafico ma quando cambio time frame, l'indicatore scompare. Devo riattaccarlo al grafico.
Penso che il problema sia causato da Array ma non so come risolverlo.
Qualcuno può aiutarmi con l'errore?
Grazie mille.
SCFX