Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 143
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
Sono d'accordo sull'int(round). Grazie. Una conversione esplicita del tipo non sarebbe male. Ma ha funzionato bene senza conversione esplicita del tipo.
Non ho nessun errore. La build è l'ultima.
Grazie, l'aggiornamento di MT5 ha aiutato. L'errore è sparito. la build era del 23 luglio 2013. nella vecchia build, tra l'altro, non c'erano mandati di conversione del tipo, ecco perché non li ho notati.
Chi si sarebbe aspettato errori così gravi dal compilatore.
Grazie, l'aggiornamento di MT5 ha aiutato. Il bug è sparito. La build era del 23 luglio 2013. Nella vecchia build, tra l'altro, non c'erano mandati di conversione dei tipi, quindi non li ho notati.
Chi si sarebbe aspettato errori così gravi dal compilatore.
Bisogna trovare il minimo nell'intervallo di tempo. Ho fatto il seguente codice per trovare il minimo nell'intervallo di tempo:
Per trovare i minimi in questo intervallo uso la funzione CopyLow:
Poi, se ho capito bene, ottengo un array unidimensionaleLow[],
Sto cercando il minimo in esso con ArrayMinimum:
Ho provato a impostare oggi un tempo di inizio di 1 ora, un tempo di fine di 2 ore e chiamare Alert per controllare min=-1.
Domanda: per questo problema, le funzioni sono scelte correttamente per risolvere questo problema, o c'è un errore da qualche parte? Ho bisogno di ottenere il prezzo minimo.
Ho provato a cercarlo nel Manuale, ma è un esempio basato sulla classe e non sono ancora pronto per quello.
Voglio scrivere un EA senza usare classi. Ho escluso tutte le cose estranee dalla considerazione e per ottenere 3 slittamenti per ogni
Ho scritto il seguente frammento di programma:
input int Kurtz_Period=5; // periodo Kurtz veloce
input int Mittel_Period=8 ;
input int Long_Period=13;
int maHandle; //handle dell'indicatore della media mobile
double ma_buf[]; // questo è un array buffer per le letture della media mobile dalla funzione MA
// e poi sarà copiato negli array corrispondenti
datetime Time_buf[]; // questo è un array di tempi di apertura delle barre
datetime Time_[6][150]; // array del tempo di apertura della barra
double Kurtz[6][70]; //questo è un array per il movimento veloce Kurtz, i numeri di riga corrispondono ai numeri di valute utilizzate, mentre le colonne sono i conteggi del movimento
double Mittel[6][70]; // questo è l'array per la media mobile Mittel
doppio Long[6][70]; // questo è un array per un lungo periodo scorrevole Long
string Name_symbol[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // questo è un array di testo di nomi di valuta:
int nomer_instr; // questo è un numero di strumento (valuta), solo per organizzare i cicli per valute
int OnInit()
{
//-----
//-------
}
void OnDeinit(const int reason)
{
//---
ArrayFree(Time_buf);
ArrayFree( ma_buf); // azzera l'array rilasciato
//-------
}
void OnTick()
{
//---------------------
ArraySetAsSeries(time_buf, true); //impostare l'indicizzazione per l'array time_array come in timeseries
ArraySetAsSeries(ma_buf, true); //impostare l'indicizzazione per l'array ma_buf come una serie temporale
for( nomer_instr=0; nomer_instr<=5; nomer_instr++ ) // questo è un ciclo su tutte le valute usate
{
int digit = int( SymbolInfoInteger( Name_symbol[nomer_instr], SYMBOL_DIGITS)); // questo è il numero di cifre nella quotazione della valuta
CopyTime( Name_symbol[nomer_instr], PERIOD_M1,0,160,Time_buf); // copia i dati temporali storici per ogni barra nel buffer
for( i=1; i<=145; i++ ) Time[nomer_instr][i]=Time_buf[i]; // tempo della 1a barra aperta
//#############################################################################################
//Blocco che genera i conteggi delle prime 3 barre scorrevoli:Kurtz, Mittel, Long
manHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Kurtz_Period , 0, MODE_SMMA, PRICE_CLOSE );
if( CopyBuffer(maHandle,0,0,155,ma_buf)<0 )
{
Alert("Errore nella copia dei buffer degli indicatori ---PERIOD_M1,Kurtz_Period--- Moving Average - numero di errore:",GetLastError());
ritorno;
}
for( i=1; i<=45; i++ ) Kurtz[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);
/*
//===============================================================
// BLOCK verifica l'offset delle barre come nelle serie temporali e la precisione della normalizzazione dei numeri
// movimento veloce MA-5
if( Multi_Torgi == 0 && Optim_parametrov == nomer_instr ) // questo è un tasto per selezionare la modalità dell'Expert Advisor, ora è in modalità debug
{
for( i=1; i<=5; i++ )
{
if(i==1) Alert("====================");
if(i==1) Alert(" tempo di apertura della 1a barra: Time[nomer_instr][1]=",Time[nomer_instr][1] );
Allarme(" numero di barra: i=",i,", MA_buf[i]=",MA_buf[i],", Kurtz[nomer_instr][i]=",Kurtz[nomer_instr][i]);
}
}
//=================================================================
*/
//---------------------------------------------------------------------------------------------------------------------------
maHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Mittel_Period, 0, MODE_SMMA, PRICE_CLOSE );
if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)
{
Alert("Errore nella copia dei buffer degli indicatori ===PERIODO_M1, Mittel_Periodo,=== Media mobile - numero di errore:",GetLastError());
ritorno;
}
for( i=1; i<=45; i++ ) Mittel[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);
//----------------------------------------------------------------------------------------------------------------------
maHandle = iMA( Name_symbol[nomer_instr],PERIOD_M1, Long_Period, 0, MODE_SMMA, PRICE_CLOSE );
if(CopyBuffer(maHandle,0,0,155,ma_buf)<0)
{
Alert("Errore nella copia dei buffer degli indicatori ===PERIOD_M1, Long_Period,===Moving Average - numero di errore:",GetLastError());
ritorno;
}
for( i=1; i<=45; i++ ) Long[nomer_instr][ i ] = NormalizeDouble( ma_buf[i], digit);
// fine del blocco che forma i conteggi delle prime 3 diapositive: Kurtz, Mittel,Long
//#############################################################################################
} // fine del ciclo per valute in uso
//============================================================
Altri operatori del programma
//============================================================
//-----------------------------------------
}// Fine di OnTick()
//+------------------------------------------------------------------+
Non vengono rilevati errori su questo programma in fase di compilazione, ma quando viene testato nel Logbook per ogni slittamento, un
messaggio di errore: 4806 è "dati richiesti non trovati".
Per favore, ditemi dove ho l'errore.
Grazie.
Non capite il principio del typecasting? È così semplice:
Sembra chiaro ora) Si scopre che l'operando int st è di un tipo minore di datetime tp[].
Ecco perché non c'è conversione in secondi nell'operazione:
Ho cercato di trovare il minimo nell'intervallo di tempo. Non sono sicuro di farlo bene. Puoi vedere il post precedente?
Come si può chiamare Alert o Comment senza nuove zecche per fare i controlli del fine settimana?
Bisogna trovare il minimo nell'intervallo di tempo. Ho fatto il seguente codice per trovare il minimo nell'intervallo di tempo:
Per trovare i minimi in questo intervallo uso la funzione CopyLow:
Poi, se ho capito bene, ottengo un array unidimensionaleLow[],
Sto cercando il minimo in esso con ArrayMinimum:
Ho provato a impostare oggi un tempo di inizio di 1 ora, un tempo di fine di 2 ore e chiamare Alert per controllare min=-1.
Domanda: per questo problema, le funzioni sono scelte correttamente per risolvere questo problema, o c'è un errore da qualche parte? È necessario ottenere il prezzo minimo.
Si prega di leggere attentamente:
Valore di ritorno.
La funzione restituisce l'indice dell'elemento trovato tenendo conto della serialità dell'array. Sefallisce, la funzione restituisce -1.
Pertanto, dovrebbe essere così:
Controllare e testare nei fine settimana e oltre, è necessario copiare.
Controllare e testare nei fine settimana e oltre, si deve scrivere.