Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 770

 
Igor Zakharov:

Utilizzare l'indicatore ATR

Grazie, ma ancora non capisco come può essere usato nel mio caso.

Qualcuno ha lanciato un link a CopyRates (grazie, purtroppo il commento è stato cancellato), quindi sto cercando di capire iVolume() è la differenza tra prezzo alto e basso o qualcos'altro?

Cioè nel mio caso (come ho capito) posso creare un array di dati mensili e settimanali e poi fare la media dei valori, ecc.

 
Alexander Layzerevich:

cercando di capire iVolume() è la differenza tra il prezzo alto e basso o qualcos'altro?

questi sono volumi in tick, clicca con il tasto destro sul grafico in MT e seleziona mostra volumi - gli istogrammi appariranno nella parte inferiore del grafico - questo è quanto

https://docs.mql4.com/ru/series/ivolume

iVolume - Доступ к таймсериям и индикаторам - Справочник MQL4
iVolume - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
Значение тикового объема бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().
 
Igor Makanu:

questi sono volumi in tick, clicca con il tasto destro sul grafico in MT e seleziona mostra volumi - gli istogrammi appariranno nella parte inferiore del grafico - questi sono loro

https://docs.mql4.com/ru/series/ivolume

Grazie mille per il chiarimento.

Quindi rimane quanto segue: Creare 2 matriciHigh e Low per calcolare i dati per il mese e 2 matriciHigh e Low per calcolare la settimana.

Poi si fa la media di tutto, ecc.

Cercherò di implementare il tutto nel codice...

Ho un'altra domanda: cosa è meglio per calcolare l'ultimo mese e l'ultima settimana?

A giudicare dall'esempio :

Riferimento per posizione iniziale e numero di elementi richiesti

intCopyHigh(
stringasymbol_name,// nome del simbolo
ENUM_TIMEFRAMEStimeframe,// periodo
intstart_pos,//dove iniziare
intcount,// quanti ne copiamo
doublehigh_array[]// array per copiare i prezzi massimi
);

timeframe = PERIOD_D1;

start_pos = 1; // barra precedente

count = 30; // 30 giorni (mese)

 
Alexander Layzerevich:

Un'altra domanda: qual è il modo migliore per contare l'ultimo mese e l'ultima settimana?

È meglio datarlo, perché ci sono salti di bar e fine settimana in cui non ci sono bar, quindi questo aiuterà:

Обращение по начальной и конечной датам требуемого интервала времени

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   datetime         start_time,       // с какой даты
   datetime         stop_time,        // по какую дату
   double           high_array[]      // массив для копирования максимальных цен
   );

https://docs.mql4.com/ru/series/copyhigh

CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
Функция получает в массив high_array исторические данные максимальных цен баров для указанной пары символ-период в указанном количестве. Необходимо отметить, что отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар. При копировании заранее неизвестного количества...
 
Igor Makanu:

Sarebbe meglio datare, visto che ci sono salti (citazioni) di bar e fine settimana in cui non ci sono bar, questo aiuterebbe:

https://docs.mql4.com/ru/series/copyhigh

Grazie, solo come far sapere all'EA (Robot) con quale data iniziare e dove fermarsi.

Trovo più facile contare 30 candele (30 giorni) a partire da 1. O 7 candelabri (giorni).

Ho questo codice:

//************************************************************************************************/
double iPointOrderStep()
{
double Awerage30 = 0, SummAwerage30 = 0;
double Awerage7 = 0, SummAwerage7 = 0;

double High30[], Low30[], High7[], Low7[];
//----------------Для месяца---------------------------
int iHigh30 = CopyHigh(Symbol(),PERIOD_D1,1,30,High30);
int iLow30 = CopyLow(Symbol(),PERIOD_D1,1,30,Low30);
//----------------Для недели---------------------------
int iHigh7 = CopyHigh(Symbol(),PERIOD_D1,1,7,High7);
int iLow7 = CopyLow(Symbol(),PERIOD_D1,1,7,Low7);

for(int i=0;i<30;i++) 
   {
      SummAwerage30 += (High30[i]-Low30[i]);
   }
for(int i=0;i<7;i++) 
   {
      SummAwerage7 += (High7[i]-Low7[i]);
   }

   Awerage30 = SummAwerage30/30;
   Awerage7 = SummAwerage7/7;
   
   double iPointOrderStep = NormalizeDouble(((Awerage30+Awerage7)/2),0);
   return (iPointOrderStep/6);
}
//************************************************************************************************/

Ma purtroppo dà un valore = 0.

Puoi dirmi dov'è l'errore...

E anche...

Come fare il calcolo una volta alla settimana all'inizio della sessione o quando il terminale è stato riavviato?

 
Alexander Layzerevich:

Grazie, ma non ho ancora capito come può essere usato nel mio caso.

L'essenza dell'ATR è l'altezza media delle barre su un periodo. Potresti anche usare MA(high)-MA(low). È più facile che dispiegare l'overshoot

 
Igor Zakharov:

L'essenza dell'ATR è l'altezza media delle barre su un periodo. Potresti anche usare MA(high)-MA(low). È più facile che invertire l'overshoot

cioè secondo l'esempio

intiATR(
stringasimbolo,// nome del simbolo
ENUM_TIMEFRAMESperiodo,// periodo
intma_period// periodo medio
);

double Awerage30= iATR(Symbol(),PERIOD_D1, 30); questo sarà il valore numerico medio per 30 giorni ?

 
Alexander Layzerevich:

cioè secondo l'esempio

intiATR(
stringasimbolo,// nome del simbolo
ENUM_TIMEFRAMESperiodo,// periodo
intma_period// periodo medio
);

double Awerage30= iATR(Symbol(),PERIOD_D1, 30); sarà il valore medio per 30 giorni ?

Non giorni di calendario. 30 giorni indietro (domenica, sabato)

A giudicare dalla funzione senza spostamento di parametri che stai facendo in 5, e hai fatto una domanda in 4 :)

 
Igor Zakharov:

Solo non quelli del calendario. Barre di 30 giorni all'indietro (domenica, sabato)

A giudicare dalla funzione senza il parametro shift che stai facendo in 5 e hai fatto la domanda in 4 :)

Questo ramo è per entrambi i terminali. Soprattutto con le stesse funzioni.

 
Artyom Trishkin:
Questo ramo è su entrambi i terminali. Soprattutto con le stesse funzioni.

Il titolo deve essere corretto allora?