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

 
Alexey Viktorov:

La domanda sembra riguardare MT5. La risposta è: non programmaticamente. La questione può essere chiusa.

Grazie

 

Buon pomeriggio a tutti, come promesso sono tornato per altri tutorialЈ ;-) Naturalmente ho fatto funzionare la grail machine, ma è stata lenta nei test quindi ho cercato il modo di eseguire il codice al suo interno spuntando solo quando arriva una nuova barra. Ho trovato la seguente opzione. A livello globale, viene definita una variabile

int intBars;// ГЛОБАЛЬНО ОПРЕДЕЛЁННАЯ ПЕРЕМЕННАЯ ДЛЯ ОПРЕДЕЛЕНИЯ НАСТУПЛЕНИЯ

Poi ho scritto una funzione che controlla se si è verificata una nuova barra - questo è un capolavoro


bool f_IsNewBar()
{
   if(intBars != Bars) 
   {
      intBars = Bars;
      return(true);
   } 
return(false);
}

Quando ho trovato questa variante, dicono che dovrei creare una funzione con tutta la logica dell'on-tick. Non mi piace questo approccio con le funzioni, francamente parlando, quindi controllo solo se c'è una nuova barra e se è vero, eseguirò del codice nell'on-tick. In forma semplificata - senza alcun lavoro reale appare così

void OnTick()
{//НАЧАЛО ОН ТИК
   // если появился новый бар:
   if(f_IsNewBar()) // ЕСЛИ ПОЯВИЛСЯ НОВЫЙ БАР
    {// ВЫПОЛНЯЕМ ВЕСЬ КОД В ОН ТИК
/*
МНОГО МНОГО СЕКРЕТНОГО ГРААЛЬНОГО КОДА😃😃😃
*/

    }
}// КОНЕЦ ОН ТИК

Ho una domanda diversa. Il graal funzionerà naturalmente sul caso reale. Quindi, questo controllo dovrebbe essere rimosso nella versione del grail che non sarà testato nel tester ma sarà eseguito sul tick reale, in modo che l'EA operi su ogni tick, o dovremmo lasciare questo controllo anche per il tick reale? Se questo controllo è incluso anche nella versione del conto reale, come dobbiamo pianificare un secondo tentativo di aprire gli ordini se non sono stati aperti la prima volta?

 
DanilaMactep:

Buon pomeriggio a tutti, come promesso sono tornato per altri tutorialЈ ;-) Naturalmente ho fatto funzionare la grail machine, ma è stata lenta nei test quindi ho cercato il modo di eseguire il codice al suo interno spuntando solo quando arriva una nuova barra. Ho trovato la seguente opzione. A livello globale, viene definita una variabile

Poi ho scritto una funzione che controlla se si è verificata una nuova barra - questo è un capolavoro


Quando ho trovato questa variante, dicono che dovrei creare una funzione con tutta la logica dell'on-tick. Non mi piace questo approccio con le funzioni, francamente parlando, quindi controllo solo se c'è una nuova barra e se è vero, eseguirò del codice nell'on-tick. In forma semplificata - senza alcun lavoro reale appare così

Ho una domanda diversa. Il graal funzionerà naturalmente sul caso reale. Quindi, questo controllo dovrebbe essere rimosso nella versione del grail che non sarà testato nel tester ma sarà eseguito sul tick reale, in modo che l'EA operi su ogni tick, o dovremmo lasciare questo controllo anche per il tick reale? Se questo controllo è incluso anche nella versione del conto reale, come dobbiamo pianificare un secondo tentativo di aprire gli ordini se non sono stati aperti la prima volta?

Se i calcoli vengono eseguiti sui valori delle barre di OPT, HI, LO, CLOSES, non abbiamo bisogno di farlo su ogni tick. Ma è corretto monitorare il prezzo su ogni tick. Questo dovrebbe essere un calcolo separato o un controllo delle condizioni.

La nuova barra è anche tracciata dal tempo di apertura della barra zero.

FlagNewBar=false;   // глобальная или статик булева переменная
   if(BarTime!=Time[0])
     {
      BarTime=Time[0];
      FlagNewBar=true;
     }
 
Artyom Trishkin:

In questo thread voglio iniziare ad aiutare coloro che vogliono veramente capire e imparare la programmazione nel nuovo MQL4 e vogliono passare facilmente a MQL5 - i linguaggi sono molto simili.

Questo blog sarà un buon posto per discutere di compiti, algoritmi della loro soluzione e qualsiasi altra domanda riguardante la programmazione MT in un modo o nell'altro.

Spero che altri membri esperti del nostro forum si uniscano alla discussione e che il ramo sia interessante per tutti.

MQL4 Tasks: Determinare il numero di posizione di una lettera maiuscola in una stringa. Grazie.

 
Mikhail Nazarenko:

MQL4 Compito: determinare il numero di posizione di una lettera maiuscola in una stringa. Grazie.

string str="preved mEdved";
string uppercase="ABCDEF.....ZАБВГД....Я";

int finish=StringLen(str)-1;
int pos=-1;
for(int i=0; i<=finish; i++)
   {
   pos=StringFind(uppercase,StringSubstr(str,i,1));
   if(pos>=0) break;
   }
printf(pos);
 
Aleksei Stepanenko:

Grazie.

 
Mikhail Nazarenko:

Grazie.

Sbagliato, non è il risultato di StringFind che vogliamo, ma la i.

Giusto:

string str="preved mEdved";
string uppercase="ABCDEF.....ZАБВГД....Я";

int finish=StringLen(str)-1;
int pos=-1;
for(int i=0; i<=finish; i++)
   {
   if(StringFind(uppercase,StringSubstr(str,i,1))>=0)
      {
      pos=i;
      break;
      }
   }
printf(pos);
 
Mikhail Nazarenko:

MQL4 Compito: determinare il numero di posizione di una lettera maiuscola in una stringa. Grazie.

Potete usare StringGetCharacter() Il carattere "A" è 65 e "a" è 32 in più - 97. E lo stesso vale per tutti i personaggi. Quindi, se un codice di carattere è > 90 e <= 122, è un carattere latino minuscolo. I caratteri cirillici differiscono anche di 32

 
Alexey Viktorov:

È possibile

Esattamente, una buona opzione.

 
Ciao, come faccio a creare un account di leadership qui?
Motivazione: