Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 212

 
Aleksei Stepanenko:

È ancora meglio fare una struttura

non dimenticare di azzerare gli elementi prima di iniziare a usarli

e poi aumentare il conteggio dove necessario

poi confrontare

Ora hai fatto un giro intorno alle 10 candele precedenti su ogni nuova candela. Questo non è razionale. Dovreste sempre sbarazzarvi dei cicli inutili ricordando i risultati dei calcoli dei valori precedenti. Nel tuo caso, quando arriva una nuova candela, basta aumentare il conteggio quando la condizione è soddisfatta, e se la condizione non è soddisfatta, allora sottrarlo. E controllare se non c'è eccesso. Il tuo ciclo per 10 elementi non è necessario, solo quello principale.

Aleksei, ho provato a farlo, ma ancora non funziona bene:

non aggiunge uno al count.up

 for(int i=1;i<=10;i++)              
     {    
     count.up=0;
     count.dn=0;
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     count.up++;
     }
    else
    {
    count.dn++;
    }
    }
    
    
    if (count.up>=8)
    {
    Comment("dsdsD");
    }
 

È necessario rimuovere dal ciclo

count.up=0;
count.dn=0;

perché ad ogni iterazione si azzerano i valori precedenti. Scrivilo prima del ciclo.

 
Aleksei Stepanenko:

È necessario rimuovere dal ciclo

perché ad ogni iterazione si azzerano i valori precedenti. Scrivilo prima del ciclo

Grazie mille ora funziona!

Tuttavia, è strano, stavo facendo la stessa cosa senza la struttura, ma solo con valori normali come

  for(int i=1;i<=10;i++)              
     {    
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     J=J+1;
    else
    {
    J=0;
    }
    }
    
    
    if (J>=8)
    {
    Comment("dfdf");

e comincerebbe a sommare ogni tick))

 

Anche la struttura sarà in ticchettio. Per lavorare solo all'inizio di una nuova candela, il tempo di quella candela deve essere tracciato

datetime LastTime;

if(LastTime!=Time[0])
   {
   LastTime=Time[0];
   //Здесь ваш код
   }
 
Potete consigliarmi per favore. Ho funzioni personalizzate in file separati .mqh prescritte attraverso #include, le chiamo nello start by sequence, quando lo start va a una funzione, poi a seconda delle azioni il programma ha bisogno di accedere a un altro file .mqh (per esempio per ottenere il valore del volume dell'ordine) e questo non succede. Se scrivo tutto in un foglio, funziona o se scrivo la formula per calcolare il lotto direttamente nei parametri di apertura dell'ordine. Ho cercato tra le lezioni di MQL4 e ho letto la documentazione del programma, ma non ho trovato nulla. Non capisco davvero perché una funzione .mqh non possa interagire con un'altra funzione .mqh all'interno dei calcoli. Oppure, dovremmo far tornare il programma all'inizio se ci trovassimo di fronte a una tale necessità - restituirebbe il risultato all'inizio e poi l'inizio con questo calcolo tornerebbe alla funzione aprendo un ordine .mqh? Questo è qualcosa di spazzatura... O forse dovremmo in qualche modo dichiarare tutte le funzioni esistenti in un modo diverso in modo che interagiscano insieme? Grazie
 
Buon pomeriggio!
Qual è il modo più semplice per eliminare l'anno (2020) e i minuti nella linea? TimeToStr non ha ancora altri formati di output?
TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
 
Nauris Zukas:
Buon pomeriggio!
Qual è il modo più semplice per eliminare l'anno (2020) e i minuti nella linea? TimeToStr non ha ancora altri formati di output?
tm=(string)Hour();
 
Vitaly Muzichenko:

Grazie!

 
Denis Diakonov:
Puoi darmi un suggerimento? Ho funzioni definite dall'utente in file .mqh separati e le ho scritte attraverso #include. Le chiamo all'avvio e quando l'avvio va a una funzione, il programma deve chiamare un altro file .mqh (per esempio, per ottenere un valore del volume dell'ordine) e questo non succede. Se scrivo tutto in un foglio, funziona o se scrivo la formula per calcolare il lotto direttamente nei parametri di apertura dell'ordine. Ho cercato tra le lezioni di MQL4 e ho letto la documentazione del programma, ma non ho trovato nulla. Non capisco davvero perché una funzione .mqh non possa interagire con un'altra funzione .mqh all'interno dei calcoli. Oppure, dovremmo fare in modo che il programma torni all'inizio se ci trovassimo di fronte a una tale necessità - restituirebbe il risultato all'inizio e poi l'inizio con questo calcolo tornerebbe alla funzione aprendo un ordine .mqh? Questo è qualcosa di spazzatura... O forse dovremmo in qualche modo dichiarare tutte le funzioni esistenti in un modo diverso in modo che interagiscano insieme? Grazie

Fate riferimento a funzioni, non a file, da funzioni, se vi siete collegati tramite un inline. Se ho capito bene, naturalmente.

 
Ho provato a riscrivere "olyakish_fractals_01" secondo la mia idea, la mia è basata sulle barre verdi di Williams. Ho un'idea sbagliata, ho un MQL4 sbagliato, non sta guardando il grafico. Se qualcuno ha un indizio, aiutatemi, se non vi costa nulla).
File:
18wbguVOL.mq4  13 kb
Motivazione: