Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 143

 
barabashkakvn:
Sono d'accordo sull'int(round). Grazie. Una conversione esplicita del tipo non sarebbe male. Anche se ha funzionato senza conversione esplicita del tipo.
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:
Sono d'accordo sull'int(round). Grazie. Una conversione esplicita del tipo non sarebbe male. Ma ha funzionato bene senza conversione esplicita del tipo.
Ha funzionato, ma le osservazioni del compilatore... Sono fastidiosi.
 
barabashkakvn:

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.

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Virty:

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.

La cosa principale è che ha funzionato :).
 

Bisogna trovare il minimo nell'intervallo di tempo. Ho fatto il seguente codice per trovare il minimo nell'intervallo di tempo:

datetime ts=st+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
int tss=(int)ts;//преобразование в секунды
Alert( "tss",tss);
datetime tsp=st+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
int tspp=(int)tsp;//преобразование в секунды

Per trovare i minimi in questo intervallo uso la funzione CopyLow:

double Low[];
CopyLow(_Symbol,_Period,tss,tspp,Low); 

Poi, se ho capito bene, ottengo un array unidimensionaleLow[],

Sto cercando il minimo in esso con ArrayMinimum:

int start=0;
int count=WHOLE_ARRAY; 
double min=ArrayMinimum(Low,tss, tspp);  
Alert("min=",min);

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.

 
Salve. Cari commercianti, per favore aiutatemi con la corretta progettazione del pezzo di programma per 3 diapositive in un EA multivaluta.

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.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
DC2008:

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:

int st=tp[0];

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?

 
forexman77:

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ì:

Alert("min=",Low[ArrayMinimum(Low)]);
 

Controllare e testare nei fine settimana e oltre, è necessario copiare.

 
DC2008:

Controllare e testare nei fine settimana e oltre, si deve scrivere.

Grazie!
Motivazione: