Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 76

 
FinEngineer: Rimane solo un errore 2012.12.22 00:56:44 Pair_delta_RSI (EURGBP,M1) Non tutti i dati di RSI1_Handle sono calcolati (-1bars ). Errore4806

Questo errore non viene fuori durante la compilazione, ma quando attacco l'indicatore al grafico, o quando cambio il timeframe.

Questo messaggio di errore suona sempre, o scompare con il tempo?

 
Ragazzi! L'MT5 può essere collegato a qualsiasi DC?
 
net:
Ragazzi! La MT5 può essere collegata a qualsiasi società di brokeraggio?

No. Il trading attraverso MT5 è possibile attraverso il broker che fornisce la possibilità di fare trading attraverso questa piattaforma, come VTB24 e Alfa forex.

Условия для трейдеров
  • www.alfa-forex.ru
Если у вас уже есть опыт работы на валютном рынке, то вы по достоинству оцените преимущества работы с Альфа-Форекс Самые узкие спреды на рынке: EUR/USD — от 0,7 пункта Отсутствие минимального депозита Быстрый ввод и вывод средств Исполнение ордеров без проскальзываний и реквот Альфа-Форекс входит в банковскую группу в составе Консорциума...
 
Yedelkin:

Questo messaggio di errore suona costantemente o scompare nel tempo?

Una volta, quando attacco l'indicatore al grafico...
 
Yedelkin:

Questo messaggio di errore suona sempre, o scompare con il tempo?

2012.12.22 11:40:32 Pair_delta_RSI (EURGBP,M1) array out of range in 'Pair_delta_RSI.mq5' (92,37)
risulta che anche questo errore appare... cioè.... ci sono due errori...
 
Yedelkin:

Questo messaggio di errore suona costantemente o scompare nel tempo?

Provato in alphaforex, appena provato in alpari, stesso errore...
 

FinEngineer:

Yedelkin: Questo messaggio di errore suona sempre, o scompare nel tempo?

Una volta, quando attacco l'indicatore al grafico...

Allora stai andando bene. Quando si attacca il programma a un grafico o si cambia timeframe, non ci sono nuovi dati calcolati per l'indicatore RSI o qualsiasi altro nel terminale. E il terminale ha bisogno di un po' di tempo per calcolare i buffer di indicatori necessari. Guarda attentamente il tuo codice (capisco che è scritto secondo l'esempio di qualcun altro, ma comunque): quando i dati calcolati per RSI non sono sufficienti, la funzione OnCalculate() smette di funzionare ('return(0);') e aspetta un nuovo tick. Non appena al prossimo tick i buffer dell'indicatore per l'RSI sono calcolati, il tuo indicatore inizia a lavorare in modalità normale. Cosa che fa, a giudicare da quello che dici.

Potete anche inserire il controllo con BarsCalculated() nella funzione OnInit() - allora l'errore si verificherà molto raramente (se mai). Un esempio è dato nella descrizione della funzione BarsCalculated().

 
FinEngineer: 2012.12.22 11:40:32 Pair_delta_RSI (EURGBP,M1) array out of range in 'Pair_delta_RSI.mq5' (92,37)
risulta che appare anche questo errore... cioè ci sono due errori...
Riguardo a questo errore vi ho già scritto ieri. (Non dimenticare di inserire il codice correttamente :) )
 
Yedelkin:
Su questo errore ti ho già scritto ieri. (Non dimenticare di inserire il codice correttamente :) )

Rimosso il pezzo di codice responsabile dei dati insufficienti (sotto)

int calculated=BarsCalculated(RSI1_Handle);

se(calcolato<tassi_totale)

{

Print("Non tutti i dati di RSI1_Handle sono calcolati (",calculated, "bars ). Error",GetLastError());

ritorno(0);

}

calculated=BarsCalculated(RSI2_Handle);

se(calcolato<tassi_totale)

{

Print("Non tutti i dati di RSI2_Handle sono calcolati (",calculated, "bars ). Errore",GetLastError();

ritorno(0);

Puoi dirmi come segnare i frammenti di codice nel messaggio?

Ora esce un errore:

2012.12.22 15:14:00 Pair_delta_RSI (EURGBP,M1) Ottenere RSI1 è fallito! Errore4806

 
FinEngineer: Si prega di consigliare come selezionare i frammenti di codice nel messaggio?

Inserire il codice correttamente.

FinEngineer : rimosso il pezzo di codice responsabile dei dati insufficienti (sotto)
   int calculated=BarsCalculated(RSI1_Handle);
   if(calculated<rates_total)
     {
      Print("Not all data of RSI1_Handle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
   calculated=BarsCalculated(RSI2_Handle);
   if(calculated<rates_total)
     {
      Print("Not all data of RSI2_Handle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);

Lì funzionava bene, quel "pezzo di codice che è responsabile dei dati insufficienti". E correttamente segnalato che al primo tick dati per RSI non è ancora calcolato dal terminale. Se non vi piace ricevere messaggi di errore, provate a fare come sopra, cioè a controllare i dati calcolati non solo in OnCalculate(), ma anche in OnInit(). In altre parole, provate ad aspettare il calcolo dei dati per gli indicatori tecnici selezionati in OnInit() e poi passate all'elaborazione dei tick in OnCalculate() quando il calcolo dei dati per gli indicatori è garantito.

Aggiungendo. Alla fine, la rimozione di una parte del codice di controllo non aumenta il numero di dati calcolati dell'indicatore :)