[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 552

 
iruogl:

Sono un principiante.

Gente, per favore consigliatemi, perché so che il robot si attiva ogni volta che cambia un tick. Come farlo attivare solo quando si apre una nuova candela, cioè quando appare il prezzo di apertura della candela.

Grazie a tutti per i consigli.

Per citare il moderatore "La funzione restituisce vero quando una nuova barra appare su M15. Usare solo in EA".

bool CheckOpenM15()
{
   static int PrevTime=0;
   if (PrevTime==iTime(NULL, PERIOD_M15,0)) return(false);
   PrevTime=iTime(NULL, PERIOD_M15,0);
   return(true);
}
 
paladin80:

Per citare il moderatore "La funzione restituisce vero quando una nuova barra appare su M15. Usare solo in EA".


Grazie mille.
 
iruogl:

Grazie mille.

paladino80:

Per citare il moderatore "La funzione restituisce vero quando una nuova barra appare su M15. Usare solo in EA".


Sto ancora imparando. E in questa funzione, come si può determinare il prezzo di apertura di una candela.
 
rigonich:

Domande per i professionisti da parte dei manichini:

1. quando si eseguono operazioni con variabili normalizzate di tipo doppio, esse si comportano come variabili di tipo int (il risultato è un numero normalizzato), oppure

il risultato dovrebbe essere normalizzato?

2. Nell'aiuto è scritto: "Due numeri in virgola mobile non normalizzati non possono essere collegati usando le operazioni == o !=". Posso confrontare una normalizzata e una non normalizzata

numero? Si possono usare le operazioni >= e <=?

Qualsiasi numero può essere confrontato tra di loro usando >= e <=. Dopo che NormalizeDouble è normalizzato, è già possibile confrontare come == o !=. Tuttavia, bisogna vedere se ha senso confrontare numeri come questo, ad esempio 10 decimali, non è realistico trovare una situazione in cui sarebbero uguali o disuguali.
 
iruogl:


Sto ancora imparando. E in questa funzione come si può determinare il prezzo di apertura di una candela.

Questa funzione rileva solo quando appare una candela. Per trovare il prezzo di apertura, usate iOpen. Qualcosa del genere:

int init()
{ ...
}
//---
int start()
{ 
   if (CheckOpenM15())
   {  double BarOpenPrice=iOpen(NULL, PERIOD_M15, 0)
   }
...
}
//---
int deinit()
{ ...
}

// сама функция должна находиться отдельно
bool CheckOpenM15()
{
   static int PrevTime=0;
   if (PrevTime==iTime(NULL, PERIOD_M15,0)) return(false);
   PrevTime=iTime(NULL, PERIOD_M15,0);
   return(true);
}
 
iruogl:

Sono un principiante.

Gente, per favore consigliatemi, perché so che il robot si attiva ogni volta che cambia un tick. Come farlo attivare solo quando si apre una nuova candela, cioè quando appare il prezzo di apertura della candela.

Grazie a tutti per i consigli.


Anch'io sono un principiante, ma penso di dover dichiarare una variabile di tipo datetime a livello globale (per esempio datetime TIME;), in init()e controllare all'inizio di start() se TIME== Time[0] -- return(0); se no -- TIME= Time[0];. In questo caso, expert eseguirà start() solo una volta all'apertura di una nuova barra.
 
paladin80:
Qualsiasi numero può essere confrontato tra di loro usando >= e <=. Dopo che NormalizeDouble è normalizzato, è possibile confrontarli come == o !=. Tuttavia, bisogna vedere se ha senso confrontare numeri con ad esempio 10 cifre decimali, non è realistico trovare una situazione in cui sarebbero uguali o disuguali.

Grazie mille per la risposta. Solo per chiarire una domanda: dopo la normalizzazione il numero nella memoria del computer rimane lo stesso e cambia solo la sua rappresentazione. o il numero stesso cambia?
 
rigonich:

Grazie mille per la sua risposta. Solo per chiarire una domanda: dopo la normalizzazione il numero nella memoria del computer rimane lo stesso e cambia solo la sua rappresentazione, o il numero stesso cambia?

Dopo la normalizzazione il numero cambia, ad esempio

double var1=0.12345 6789;
double var2=NormalizeDouble(var1,5); // var2=0.12346

Un'altra cosa è quando lo stampate, con DoubleToStr, per esempio:

double var1=0.12345 6789;
Print("var1 = ",DoubleToStr(var1,5)); // Выход: var1=0.12345

E se lo stampate dopo la normalizzazione, va così:

double var1=0.12345 6789;
double var2=NormalizeDouble(var1,5);  // var2=0.12346
Print("var2 = ",DoubleToStr(var2,5)); // Выход: var2=0.12346
 
paladin80:

Questa funzione rileva solo quando appare una candela. Per trovare il prezzo di apertura, usate iOpen. Qualcosa del genere:


Grazie, sei molto utile
 
okvseok:

Per favore, consigliatemi!

È possibile stampare un singolo foglio, ma come posso impostare che inizi a stampare i fogli da una certa data a una certa data? In modo che non venga stampato un foglio alla volta.

Grazie!



ignorare)