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

 
Boss11:

Buon giorno cari utenti del forum.

Per favore aiutatemi con il seguente compito:

Ho bisogno di ottenere i dati dell'indicatore in mt4 usando mql, ad esempio MA5 con timeframe 1d, alle 14.30 dell'altro ieri.

Cioè, se ho eseguito lo script con iMA l'altro ieri alle 14.30, non sorgerebbe nessuna domanda, ma come lo ottengo oggi.

almeno dimmi dove scavare

È molto semplice. È necessario impostare 7 parametri per calcolare l'iMA. Il primo parametro, il nome del simbolo, è ovvio. Come secondo, il quadro temporale, impostare M1. Il terzo parametro - il periodo - imposta quante volte hai bisogno, quanti giorni sono più di un minuto. Il quarto parametro - shift = 0. I prossimi due parametri - il metodo di mediazione e il tipo di prezzo - li conoscete. L'ultimo è il numero di barra. Per favore, calcola il numero di barra se conosci il tempo che ti serve. Questo è tutto! Ricontrolla facendo i calcoli per i tempi M5 e M15. Forse anche per M30.

 
STARIJ:

È molto semplice. Per calcolare l'iMA, sono necessari 7 parametri. Il primo parametro, il nome del simbolo, è ovvio. Come secondo parametro, timeframe, impostare M1. Il terzo parametro - il periodo - imposta quante volte hai bisogno, quanti giorni sono più di un minuto. Il quarto parametro - shift = 0. I prossimi due parametri - il metodo di mediazione e il tipo di prezzo - li conoscete. L'ultimo è il numero di barra. Per favore, calcola il numero di barra se conosci il tempo che ti serve. Questo è tutto! Ricontrolla facendo i calcoli per i tempi M5 e M15. Forse anche per M30.

Purtroppo non è facile. Se prendiamo il MA5, time frame 1440 (1 giorno), selezioniamo la barra numero 2 (l'altro ieri), otterremo il MA5 per l'apertura o la chiusura dell'ultima candela, ma non il momento delle 14.30. Ed è questo che dobbiamo specificare. Ancora una volta. Gli indicatori tecnici sono calcolati a partire da diverse candele, si aprono alle 00.00 (se stiamo parlando di un giorno), si chiudono alle 23.59, ma l'ultima candela (se è a barra 0) non è chiusa, e si prende l'ultimo prezzo della barra 0 per il suo calcolo. Se la MA è sulla barra zero, questo è facile, ma se non è la barra zero ma la metà del giorno precedente, cosa dobbiamo fare? Come possiamo calcolare МА a metà del giorno precedente in TF 1440?

 
Artyom Trishkin:

Grazie mille! Mi metterò a scrivere il codice :) Vi farò sapere i risultati.

 
Boss11:

Purtroppo non è facile. Se prendiamo il MA5, time frame 1440 (1 giorno), selezioniamo la barra numero 2 (l'altro ieri), otterremo il MA5 per l'apertura o la chiusura dell'ultima candela, ma non il momento 14.30. Ed è questo che dobbiamo specificare. Ancora una volta. Gli indicatori tecnici sono calcolati a partire da diverse candele, si aprono alle 00.00 (se stiamo parlando di un giorno), si chiudono alle 23.59, ma l'ultima candela (se è a barra 0) non è chiusa, e si prende l'ultimo prezzo della barra 0 per il suo calcolo. Se la MA è sulla barra zero, questo è facile, ma se non è la barra zero ma la metà del giorno precedente, cosa dobbiamo fare? Come posso calcolare МА a metà del giorno precedente con il time frame 1440?


È molto semplice

void OnStart()
  {
// Формируем время  
   Alert("14.30  позавчерашнего дня = ",StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30"));

//14.30  позавчерашнего дня
   datetime time=StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30");

//Бар 14.30  позавчерашнего дня
   int     shift=iBarShift(NULL,0,time);

//Машка 14.30  позавчерашнего дня  
   double ma=iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,shift);

   Alert("Машка 14.30  позавчерашнего дня = ",DoubleToString(ma,Digits));
}

Come questo

 

Qualche idea su come organizzare l'invio di segnali tramite script?

 

Ho bisogno dell'aiuto degli esperti

Ho un codice sorgente EA, compilato nel 2014 e tutto andava bene.

Ho deciso di scrivere un nuovo account e compilare l'EA su di esso, ma non vuole compilare

Ho 23 errori come questi ( } )

Cosa devo fare e cosa è cambiato dal 2014?

 
Boss11:

Purtroppo non è facile. Se prendiamo il MA5, time frame 1440 (1 giorno), selezioniamo la barra numero 2 (l'altro ieri), otterremo il MA5 per l'apertura o la chiusura dell'ultima candela, ma non il momento 14.30. Ed è questo che dobbiamo specificare. Ancora una volta. Gli indicatori tecnici sono calcolati a partire da diverse candele, si aprono alle 00.00 (se stiamo parlando di un giorno), si chiudono alle 23.59, ma l'ultima candela (se è a barra 0) non è chiusa, e si prende l'ultimo prezzo della barra 0 per il suo calcolo. Se la MA è sulla barra zero, questo è facile, ma se non è la barra zero ma la metà del giorno precedente, cosa dobbiamo fare? Come posso calcolare МА a metà del giorno precedente in TF 1440?

È molto semplice. Per calcolare l'iMA, sono necessari 7 parametri. Il primo parametro, il nome del simbolo, è ovvio. Come secondo parametro, il lasso di tempo, impostate M1. Il terzo parametro - il periodo - imposta quante volte hai bisogno, quanti giorni sono più di un minuto. Il quarto parametro - shift = 0. I prossimi due parametri - il metodo di mediazione e il tipo di prezzo - li conoscete. L'ultimo è il numero di barra. Per favore, calcola il numero di barra se conosci il tempo che ti serve. Questo è tutto! Ricontrolla facendo i calcoli per i tempi M5 e M15. Forse anche per M30.
 

Salve. Grazie aSTARIJ eArtyom Trishkin per l'ultima consultazione. Ma siccome sono ancora un novellino, sorgono altre domande. Per esempio, quanto segue. Uso la seguente funzione per aprire solo una posizione in una barra:

void Fun_New_Bar()                              // Ф-ия обнаружения нового бара   
  {                                             
   static datetime New_Time=0;                  // Время текущего бара  
   New_Bar=false;                               // Нового бара нет  
   if(New_Time!=Time[0])                        // Сравниваем время  
     {  
      New_Time=Time[0];                         // Теперь время такое  
      New_Bar=true;                             // Поймался новый бар  
     }  
  }

E sorge subito una domanda: perché devo inviare una variabile statica "all'inizio del tempo" ogni volta che accedo alla funzione? Dopo tutto, accetta il valore zero da solo alla prima chiamata, e poi lascia che memorizzi il valore della barra zero precedente fino alla prossima chiamata, invece di essere azzerata. Forse questa semplice funzione potrebbe essere semplificata. Tuttavia, io stesso ho paura di rovinare tutto. E un'altra domanda su questa funzione: non è possibile che l'espressioneNew_Time=Time[0]; non catturi il millisecondo quando si apre una nuova barra? Cosa succederà allora? Grazie.

 
novichok2018:

Salve. GrazieSTARIJ anche per l'ultima consultazione. Ma siccome sono ancora un principiante, sorgono altre domande. Per esempio, quanto segue. Uso la seguente funzione per aprire solo una posizione in una barra:

E subito sorge una domanda: perché devo inviare una variabile statica "all'inizio del tempo" ogni volta che accedo alla funzione? Dopo tutto, accetta il valore zero da solo alla prima chiamata, e poi lascia che memorizzi il valore della barra zero precedente fino alla prossima chiamata, invece di essere azzerata. Forse questa semplice funzione potrebbe essere semplificata. Tuttavia, io stesso ho paura di rovinare tutto. E un'altra domanda su questa funzione: non è possibile che l'espressioneNew_Time=Time[0]; non catturi il millisecondo quando si apre una nuova barra? Cosa succederà allora? Grazie.

E si può leggere quante volte una variabile statica viene inizializzata. E la domanda stessa scomparirà per la sua assurdità ;)
 
novichok2018:

Salve. Grazie aSTARIJ eArtyom Trishkin per l'ultima consultazione. Ma siccome sono ancora un novellino, sorgono altre domande. Per esempio, quanto segue. Uso la seguente funzione per aprire solo una posizione in una barra:

E sorge subito una domanda: perché devo inviare una variabile statica "all'inizio del tempo" ogni volta che accedo alla funzione? Dopo tutto, accetta il valore zero da solo alla prima chiamata, e poi lascia che memorizzi il valore della barra zero precedente fino alla prossima chiamata, invece di essere azzerata. Forse questa semplice funzione potrebbe essere semplificata. Tuttavia, io stesso ho paura di rovinare tutto. E ho un'altra domanda su questa funzione: è possibile che l'espressioneNew_Time=Time[0]; non catturi il millisecondo quando si apre una nuova barra? Cosa succederà allora? Grazie.


Per quanto riguarda la seconda domanda,

se la prima zecca non prende, la seconda lo farà.