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

 
Alexey Viktorov:

Artyom, non ho iniziato la mia risposta con le parole


La parabolica ha una stretta alternanza, due segnali in una direzione anche su barre diverse sono impossibili. E non c'è bisogno di inventare nulla per questo, non sferraglia nemmeno su zero bar, come il MA.

Sferragliare - l'ho notato più di una volta prima. Forse qualcosa è cambiato da allora, ma il punto sulla barra dello zero può scomparire - lo era.

Sto procedendo come al solito dalla situazione che più tardi si può cambiare l'indicatore per un altro - e questo blocco di codice funzionerà già indipendentemente - abitudine ...

 
Artyom Trishkin:
Sarebbe d'aiuto? Ho postato un modello lì, da cui puoi fare quello che vuoi.

Grazie, l'ho applicato in modo approssimativo, ma sembra ancora che a volte cambi SL immediatamente quando viene aperto un trade.
 
AlGuru:

Grazie, l'ho applicato in modo approssimativo, ma ho ancora la sensazione che a volte cambia SL immediatamente quando viene aperto un trade.
Allora devi srotolare i valori di SL e mettere anche Print() all'interno della rete a strascico, in modo che riporti il suo lavoro e i valori che raggiunge - altrimenti la sensazione è solo una sensazione ;)
 
È sorta una domanda, ragazzi! C'è un limite al numero di cifre in un numero di magia? Quante cifre dovrebbero esserci?
 
Rustam Bikbulatov:
Ecco una domanda per voi ragazzi! C'è un limite al numero di cifre nel numero magico? Quante cifre dovrebbero esserci?


Un magik è solitamente definito da un tipo int intero.

int

Il tipo intero int ha una dimensione di 4 byte (32 bit). Il valore minimo è -2.147.483.648, il valore massimo è 2.147.483.647.

Come questo.

 
Alekseu Fedotov:


Una magia è di solito definita dal tipo intero int.

int

Il tipo intero int ha una dimensione di 4 byte (32 bit). Il valore minimo è -2.147.483.648, il valore massimo è 2.147.483.647.

Come questo.


Grazie mille!
 

Ciao a tutti, ho scritto un EA e non riesco a capire il codice. Ho bisogno che la funzione venga eseguita ad ogni tick e ad ogni secondo del server. Ho appena chiamato la mia funzione 2 volte, attraversoOnTick e poi attraversoOnTimer sembra aver fatto tutto correttamente, ma manca ancora spesso un secondo e per questo a volte non funziona nel momento giusto. Un aiuto, chissà, sarebbe molto grato). Forse a causa di un'interruzione della connessione con il server cessa di funzionare? È possibile farlo funzionare ogni secondo, anche se c'è un'interruzione della comunicazione, e i secondi sono strettamente sincronizzati con l'ora del server?


int OnInit()

  {

   EventSetTimer(1);

   return(INIT_SUCCEEDED);

  }

void OnTick()

{

Clicker (); //-- старт каждый тик

}

void OnTimer()

{

Clicker (); //-- старт каждую секунду

}

void Clicker()

  {

//--- тут идёт порядка 30 строк кода, вырезал чтобы никого не грузить

   Comment("Sek = " + (Seconds()));

   return;                                      // Выход из start()  

  }

 
Amici miei, per favore aiutate un programmatore MQL4 principiante con qualche consiglio.
Ho scritto del codice che dovrebbe determinare il prezzo massimo di apertura della base per le ultime n barre, ma per qualche motivo l'EA considera il prezzo massimo di apertura di tutte le barre del grafico.

void OnTick()
{
   for (int i = 1; i <= BarTotal; i++)
   {
      double High_Open = iOpen(Symbol(), PERIOD_H1, i); 
      if (High_Open >= Current_High)
      {
         Current_High = High_Open;
         Print (Current_High); 
      }
   }
}

Grazie)

 
ivan-baaton:
Amici, per favore aiutate un programmatore MQL4 principiante con qualche consiglio.
Ho scritto un codice che dovrebbe determinare il prezzo massimo di apertura della base per le ultime n barre, ma l'EA per qualche motivo considera il prezzo massimo di apertura di tutte le barre del grafico.

...

Grazie)

Provate una funzione come questa:

//+------------------------------------------------------------------+
double GetMaxOpen(const string symbol_name,const ENUM_TIMEFRAMES timeframe,uint start_pos,const uint count){
   double array[];
   ResetLastError();
   if(CopyOpen(symbol_name,timeframe,start_pos,count,array)==count) return(array[ArrayMaximum(array)]);
   Print(__FUNCTION__," > Ошибка копирования в массив: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+

Non l'ho guardato, praticamente l'ho scritto da solo, quindi potrei essermi perso qualcosa.

 

Ho capito il mio errore, ma non ho capito come risolverlo. Il compito viene normalmente avviato ogni secondo, ma il tempo dall'inizio della candela corrente non viene contato correttamente.

La funzione Seconds() emette i secondi dai dati dell'ultimo tick conosciuto, ma ho bisogno di contare in qualche modo il numero reale di secondi dall'apertura della candela dei minuti nel momento in cui la funzione viene chiamata, anche se non ci sono stati tick negli ultimi due secondi.

TimeSeconds (TimeLocal()) o ( TimeLocal() - Time[0]) non funzionerà, perché l'ora locale può differire dal server di diversi secondi. Come risolvere il problema?