Indicatori multi timeframe - pagina 1204

 
greenpar :

Grazie ancora una volta per il tuo aiuto. Ho incorporato le modifiche che hai indicato, ma sto ancora avendo problemi/errori (vedi file allegato). Sarebbe fantastico se potessi avere un'ulteriore guida.

Grazie.

Ho caricato un programma fisso e un campione completo.
 
Naguisa Unada:
Ho caricato un programma fisso e un campione completo.

Grazie ancora una volta per il tuo aiuto, ho inserito le modifiche come suggerito (vedi file allegato e codice qui sotto). Sto ancora ottenendo numerosi errori durante la compilazione (vedi immagine allegata degli errori di compilazione), sospetto che abbia a che fare con le linee evidenziate nel codice sottostante.

Si prega di tenere presente che sto cercando di incorporare altri timeframes, coppie di valute, e anche altri indicatori eventualmente (come ADX), all'interno di questo file indicatore.

Qualsiasi ulteriore assistenza sarebbe molto apprezzata.

#property description   "Indicator alerts when candle size is larger than CandlePoint value for specified period"
#property strict

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0


//+------------------------------------------------------------------+
//| Declaring Constants                                         |
//+------------------------------------------------------------------+
#define  RESET 0

//+------------------------------------------------------------------+
//| Enumeration for the indication of operation                                         |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Input parameters of the indicator                                           |
//+------------------------------------------------------------------+
//--- Candle point size
input uint CandlePointM1 = 5;                   // Minimum candle points for Period M1
input uint CandlePointM5 = 5;                   // Minimum candle points for Period M5
int timeFrame[] = {PERIOD_M1, PERIOD_M5, PERIOD_H1};
string currencyPairs[] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"}

//+------------------------------------------------------------------+
//| Custom indicator initialisation function                                            |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Deinitialisation                                            |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Custom 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[])


//+------------------------------------------------------------------+
//| Candle size indicator                                               |
//+------------------------------------------------------------------+
{
int range;
static datetime alertBar[] = {0, 0, 0}; // used for one alert/bar
datetime candleTime[3];

for(int i=0; i<3; i++)
        {
        for (int j=0 ;j<3 ;j++)
                {
                double candleLow, candleHigh;
                candleLow = iLow(currencyPairs[i],timeFrame[j],0);
                candleHigh = iHigh(currencyPairs[i],timeFrame[j],0);
                range = int((candleHigh-candleLow)/_Point);
                candleTime[j] = iTime(currencyPairs[i],timeFrame[j],0);

if (alertBar[j] != candleTime[j])
        {
        if (timeFrame[j] == PERIOD_M1 && range>int(CandlePointM1))
                {
                        Alert(currencyPairs[i], "PERIOD_M1", "candle >", CandlePointM1, "points");
                        alertBar[j] = candleTime[j];
                }
                if (timeFrame[j] == PERIOD_M5 && range>int(CandlePointM5))
                        {
                        Alert(currencyPairs[i], "PERIOD_M5", "candle >", CandlePointM5, "points");
                        alertBar[j] = candleTime[j];
                        }
                }
        }
}


 
greenpar :

Grazie ancora una volta per il tuo aiuto, ho inserito le modifiche come suggerito (vedi file allegato e codice qui sotto). Sto ancora ottenendo numerosi errori durante la compilazione (vedi immagine allegata degli errori di compilazione), sospetto che abbia a che fare con le linee evidenziate nel codice sottostante.

Si prega di tenere presente che sto cercando di incorporare altri timeframes, coppie di valute, e anche altri indicatori eventualmente (come ADX), all'interno di questo file indicatore.

Qualsiasi ulteriore assistenza sarebbe molto apprezzata.


1. Alla fine della linea ; mancava.

String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"};

2. Mancavano le seguenti linee.

Ritorno (tassi_totale);
}

3. Ho sbagliato la dimensione dell'array. È stata modificata come segue e spostata nell'area globale.

datetime alert_bar [3] [3];
datetime candleTime [3] [3];

File:
 
Naguisa Unada:

1. Alla fine della linea ; mancava.

String currencyPairs [] = {"AUDCAD", "AUDNZD", "AUDJPY", "AUDUSD"};

2. Mancavano le seguenti linee.

Return (rates_total);
}

3. Ho sbagliato la dimensione dell'array. È stato modificato come segue e spostato nell'area globale.

datetime alert_bar [3] [3];
datetime candleTime [3] [3];


Grazie mille ancora una volta. Ora sta avvisando su tutti i timeframe e le coppie di valute elencate.

Tuttavia, non avverte più una volta per barra, ma avverte per ogni aumento del punto di candela al di sopra della dimensione minima dei punti di candela. Le linee 78, 84 e 90 in 'Sample.mq4' che hai allegato al tuo messaggio precedente non assicurano che l'allarme avvenga solo una volta per candela. Ho provato a cambiare i valori all'interno del '[]' ma questo ovviamente non ha risolto il problema. Come si fa a risolvere questo problema?

Come sempre qualsiasi ulteriore assistenza sarebbe molto apprezzata. Grazie.

 
greenpar :

Tuttavia, non avverte più una volta per barra, ma per ogni aumento del punto di candela al di sopra della dimensione minima dei punti di candela. Le linee 78, 84 e 90 in 'Sample.mq4' che hai allegato al tuo messaggio precedente non assicurano che l'allarme sia solo una volta per candela. Ho provato a cambiare i valori all'interno del '[]' ma questo ovviamente non ha risolto il problema. Come si fa a risolvere questo problema?

Certo. Dovrei scrivere le seguenti righe in "OnInit".

 //ArrayResize(candleTime, CPNO); 
 //ArrayResize(alert_bar,  CPNO); 
 //ArrayInitialize(alert_bar, 0); 
int OnInit ()
{
         //--- indicator buffers mapping 
        TFNO = ArraySize (timeFrame);
        CPNO = ArraySize (currencyPairs);
        
         ArrayResize (candleTime, CPNO);
         ArrayResize (alert_bar,  CPNO);
         ArrayInitialize (alert_bar, 0 );
        
         if ( StringLen ( Symbol ()) > 6 )
        {
                sufix = StringSubstr ( Symbol (), 6 , 0 );
                 for ( int i = 0 ; i < CPNO; i++)
                        currencyPairs[i] += sufix;
        }
         //--- 
         return ( INIT_SUCCEEDED );
}

I numeri in [ ] sono regolati con "ArrayResize" sopra. Anche se il numero di coppie di valute aumenta, sarà regolato automaticamente qui, ma se vuoi aggiungere un altro time frame devi modificare direttamente il programma. Questo perché è la specifica di MQL4.

 
Naguisa Unada:

Certo che lo è. Dovrei scrivere le seguenti righe in "OnInit".

I numeri in [ ] sono regolati con "ArrayResize" sopra. Anche se il numero di coppie di valute aumenta, sarà regolato automaticamente qui, ma se vuoi aggiungere un altro time frame devi modificare direttamente il programma. Questo perché è la specifica di MQL4.


Grazie ancora una volta. Ho aggiunto il codice.

L'avviso continua a segnalare ogni aumento del punto candela al di sopra della dimensione minima dei punti candela, anche dopo aver cancellato l'indicatore dal grafico, ricompilato, abbandonato MT ecc. Come posso risolvere questo problema?

Come sempre qualsiasi ulteriore assistenza sarebbe molto apprezzata. Grazie.

 
greenpar :

L'allarme continua a segnalare ogni aumento di punti candela al di sopra della dimensione minima dei punti candela - anche dopo aver cancellato l'indicatore dal grafico, ricompilato, abbandonato MT ecc. Come posso risolvere questo problema?

Sul mio PC funziona normalmente senza problemi. Penso che ci sia qualcosa di sbagliato, ma non so cosa sia.

 
Naguisa Unada:

Sul mio PC funziona normalmente senza problemi. Penso che qualcosa sia sbagliato, ma non so cosa sia.


Sto eseguendo MT4 build 1090. Non sono sicuro di quale sia il problema. Forse qualcun altro può aiutare?

Grazie.

 

qualcuno può modificare questo indicatore, quando gli stoch si incrociano le frecce mostrano sulla seconda candela ma ho bisogno che la freccia mostri sulla candela corrente, immediatamente ogni volta quando gli stoch si incrociano


thanx

 
fxprogramer:

qualcuno può modificare questo indicatore, quando gli stoch si incrociano le frecce vengono mostrate sulla seconda candela ma io ho bisogno che la freccia venga mostrata sulla candela corrente, immediatamente ogni volta che gli stoch si incrociano

//for(i=1; i<=limit; i++) 
  for(i=0; i<=limit; i++) 

È molto facile. Correggere i = 1 a i = 0 sulla linea 77.


Motivazione: