Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 440
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ciao 2015.09.17_19:07 GMT+3 .Ho impostato le dimensioni degli array dinamici nel programma EA. E il compilatore dà errori: "virgola prevista". E se c'è una variabile nel testo del programma, -- dà avvertimenti: "la variabile tale-e-quella tale nasconde la dichiarazione della variabile a livello globale". Non capisco. Tutto sembra essere corretto, come in Help. Ecco alcuni frammenti di codice:
//--- array di prezzi massimi delle barre
bool ArraySetAsSeries(double &High[],bool);
//---
bool ArraySetAsSeries(double &Low[],bool);
//--- impostare le dimensioni dell'array con riserva (reserve)
int ArrayResize(double &mrate[],int 16,int 9);
int ArrayResize(double &maVal[],int 16,int 9);
int ArrayResize(double &fVal[],int 3,int 2);
int ArrayResize(double &zVal[],int 3,int 0);
int ArrayResize(double &High[],int 1,int 0);
int ArrayResize(double &Low[],int 1,int 0);
//+------------------------------------------------------------------+
//| Funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Ciao 2015.09.17_19:07 GMT+3 .Ho impostato le dimensioni degli array dinamici nel programma EA. E il compilatore dà errori: "virgola prevista". E se nel testo del programma c'è
Se intendi il mio codice - allora sì, il mio codice sta controllando la presenza di una nuova barra.
Sono interessato al codice che ho allegato - voglio capire cosa fa.
Il codice che hai dato non fa nulla, o meglio non funziona. Errore:
Questa condizione funzionerà solo una volta - la prima volta che si esegue il programma. A questo punto, la variabile statica sarà inizializzata.
La condizione qui sotto non ha alcun senso da controllare poiché la variabile TimeN nel vostro codice sarà uguale all'eterno zero (ovvero la data 1 gennaio 1970) e questo eterno zero sarà confrontato con la variabile TimeC che è uguale al tempo di apertura della barra corrente):
Il codice che hai dato non fa nulla, o meglio non funziona. Errore:
Questa condizione funzionerà solo una volta - la prima volta che si esegue il programma. A questo punto, la variabile statica sarà inizializzata.
La condizione qui sotto non ha alcun senso da controllare poiché la variabile TimeN nel vostro codice sarà uguale all'eterno zero (o meglio sarà la data 1 gennaio 1970) e questo eterno zero sarà confrontato con la variabile TimeC che è uguale al tempo di apertura della barra corrente):
Ora mi chiedo perché avrei dovuto scriverlo... in Expert Advisor.
Grazie per il chiarimento!
Se la nuova barra è sul timeframe M1, allora stampa il messaggio:
Si scopre che non ho dato il codice completo, quello corretto era
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Si scopre che non ho dato il codice completo, il codice corretto era
int init()
{
static datetime TimeN=0;
return(INIT_SUCCEEDED);
}
int start()
{
datetime TimeC=iTime(NULL,TF,0);
if(TimeN==0)TimeN=TimeC;
if(TimeN==TimeC) return(0);
TimeN=TimeC;
// Код программы исполняется при появлении нового бара
return(INIT_SUCCEEDED);
}
Ecco il codice funzionante:
Hai provato a compilare questo codice? C'è un errore qui: la variabile TimeN è dichiarata in OnInit() e questa variabile sarà distrutta all'uscita da OnInit(). Pertanto, si verifica un errore nella funzione OnTick()
Ecco il codice funzionante:
Ho scritto static datetime TimeN=0; nell'area prima diint OnInit() - dove sono dichiarate le variabili esterne e le altre variabili.