Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1238

 
Alexey Viktorov:

E la prima parte della frase e la domanda nel suo insieme?

Beh, siamo programmatori. Bicchieri pieni e vuoti sul comodino e tutto il resto...

Tuttavia, ho scritto tre possibili scenari e cosa succede durante di essi nel ciclo di calcolo dell'indicatore principale:

Forum sul trading, sistemi di trading automatico e test di strategia

FAQ da principianti MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.08.06 15:17

rates_total - prev_calculates è un algoritmo molto efficiente.

  • Se è uguale a zero, significa il calcolo sulla barra corrente da parte del tick
  • Se è uguale a 1, significa che c'è una nuova barra e saranno calcolate due barre - la precedente e quella attuale
  • Se è maggiore di 1, significa o la prima esecuzione o un cambiamento nei dati della storia
Calcoliamo il limite. E nel ciclo da limite a maggiore o uguale a zero, calcoliamo i dati dell'indicatore. E calcola qual è il limite quando calcola il limite = rates_total - prev_calculates.

La quarta situazione - sotto zero - è abbastanza possibile. Ma non viene gestito nel ciclo calcolato for(int i=limit; i>=0; i--) ...

Poche persone vogliono pensarci e di solito si limitano a copiare e incollare. Corrispondentemente, il primo lancio e il cambiamento della storia sono quando limite>1, quindi dovremmo scrivere del primo lancio in tale situazione e non controllare prev_calculato per zero.

 
Сергей Таболин:

Alexei, sono interessato )))) Ma non vedo l'errore! E non c'è da vergognarsi di imparare. E se qualcuno è più intelligente o più esperto, non ci vedo niente di male neanche in questo.

Ho appena eseguito l'indicatore con un grande parametro di input per la dimensione di una candela. Voglio avere candelabri più piccoli.

Tutti i prezzi delle candele sono calcolati e inizializzati dai buffer degli indicatori. Tutto è corretto. Ma non c'era nessun rendering. Non capisco perché.

Ti ho suggerito

Alexey Viktorov:

......... per iniziare a selezionare le barre dopo un numero N, o almeno un'ultima barra chiusa. L'avete provato? Fa il rendering?

E ancora una volta vi suggerisco di iniziare selezionando almeno un'ultima barra chiusa. Quando si ottiene un risultato positivo, solo allora si procede ai calcoli e alle condizioni.

 
Alexey Viktorov:

Vi ho suggerito

e vi suggerisco di cominciare a individuare almeno un'ultima barra chiusa. Quando si ottiene un risultato positivo, solo allora si passa ai calcoli e alle condizioni.

Temo di non capirla... Quale barra proponete di assegnare? Quello che ho formato? O sul grafico?

Se è sulla carta, non ne ho bisogno a priori. L'indicatore è considerato lo stesso su qualsiasi timeframe.

Il calcolo precedente è stato eseguito su H1, e ora è su H4. Il risultato è lo stesso.

2020.08.08 11:06:14.580 newCandles (USDJPY,H4)  ~~~~ Предварительный расчёт индикатора.
2020.08.08 11:06:14.789 newCandles (USDJPY,H4)  2019.01.02 06:00:00 >>> Свеча 00000 >> open = 109.419 hihg = 109.462 low = 105.388 close = 105.388 > Сформирована за 122162 тика.
2020.08.08 11:06:15.230 newCandles (USDJPY,H4)  2019.01.03 00:41:15 >>> Свеча 00001 >> open = 105.388 hihg = 109.388 low = 105.268 close = 109.388 > Сформирована за 1336258 тиков.
2020.08.08 11:06:19.056 newCandles (USDJPY,H4)  2019.01.17 21:50:34 >>> Свеча 00002 >> open = 109.388 hihg = 112.398 low = 105.388 close = 105.388 > Сформирована за 11546466 тиков.
2020.08.08 11:06:20.788 newCandles (USDJPY,H4)  2019.08.09 18:57:55 >>> Свеча 00003 >> open = 105.388 hihg = 109.388 low = 104.453 close = 109.388 > Сформирована за 5400916 тиков.
2020.08.08 11:06:22.592 newCandles (USDJPY,H4)  2019.11.07 17:57:24 >>> Свеча 00004 >> open = 109.388 hihg = 112.225 low = 105.384 close = 105.384 > Сформирована за 5555641 тик.
2020.08.08 11:06:22.725 newCandles (USDJPY,H4)  2020.03.06 11:47:26 >>> Свеча 00005 >> open = 105.384 hihg = 105.732 low = 101.377 close = 101.377 > Сформирована за 272724 тика.
2020.08.08 11:06:22.822 newCandles (USDJPY,H4)  2020.03.09 15:37:48 >>> Свеча 00006 >> open = 101.377 hihg = 105.378 low = 101.187 close = 105.378 > Сформирована за 314847 тиков.
2020.08.08 11:06:23.736 newCandles (USDJPY,H4)  2020.03.10 21:05:27 >>> Свеча 00007 >> open = 105.378 hihg = 109.385 low = 103.094 close = 109.385 > Сформирована за 2045775 тиков.
2020.08.08 11:06:27.124 newCandles (USDJPY,H4)  2020.03.19 04:13:11 >>> Свеча 00008 >> open = 109.385 hihg = 111.711 low = 105.385 close = 105.385 > Сформирована за 10250092 тика.
2020.08.08 11:06:27.296 newCandles (USDJPY,H4)  ~~~~ Предварительный расчёт индикатора закончен.
 
Сергей Таболин:

Temo di non capirla... Quale barra propone di evidenziare? Quello che si è formato su di me? O sul grafico?

Se è sulla carta, non ne ho bisogno a priori. L'indicatore è considerato lo stesso su qualsiasi timeframe.

Il calcolo precedente è stato eseguito su H1, e ora è su H4. Il risultato è lo stesso.

Alexey ti ha detto che prima dovresti almeno far disegnare le candele al tuo indicatore. Come sono. Almeno sulla barra attuale. Se ci riuscite, considerate che il primo passo verso la comprensione è passato. Ma è auspicabile non cercare di trovarlo provando diversi parametri, ma con la propria mente.

Cosa c'entra questo con l'a priori? Ne avete molto bisogno - se non potete disegnare una candela con solo quattro valori.

 
Artyom Trishkin:

Alexey ti ha detto che dovresti prima rendere il tuo indicatore almeno solo disegnare le candele. Come sono. Almeno sulla barra attuale. Se ci riuscite, considerate che il primo passo verso la comprensione è passato. Ma è auspicabile non cercare di trovarlo provando diversi parametri, ma con la propria mente.

Cosa c'entra questo con "a priori"? Ne avete davvero bisogno poiché non potete disegnare una candela con solo quattro valori.

Capito. Sarà fatto. ...

 
Ciao utenti del forum. Potete per favore dirmi come fare una ricezione sequenziale di segnali. Per esempio, prendo il primo dal timeframe 4h, poi il timeframe dell'ora, 15 minuti e inserisco il trade solo sul minimo? Ho preso in prestito il codice da CodeBase
//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool  SearchTradingSignals(void)
  {
   if(m_prev_bars==m_last_deal_in) // on one bar - only one deal
      return(true);
//---
   double  ma[];
   MqlRates  rates_1[],rates_2[],rates_3[],rates_4[];
   ArraySetAsSeries(ma,true);
   ArraySetAsSeries(rates_1,true);
   ArraySetAsSeries(rates_2,true);
   ArraySetAsSeries(rates_3,true);
   ArraySetAsSeries(rates_4,true);
   int  start_pos=0,count=3;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma) ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_1,start_pos,count,rates_1)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_2,start_pos,count,rates_2)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_3,start_pos,count,rates_3)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_4,start_pos,count,rates_4)!=count)
     {
      return(false);
     }
   int  size_need_position=ArraySize(SPosition);
   if(size_need_position>0)
      return(true);

   if((rates_1[0].open<rates_1[0].close) && (rates_2[0].open<rates_2[0].close) &&
      (rates_3[0].open<rates_3[0].close) && (rates_4[0].open<rates_4[0].close) && ma[2]<ma[1] && ma[1]<ma[0])
     {
      if(!InpReverse)
        {
         if(InpTradeMode!=sell)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
      else
        {
         if(InpTradeMode!=buy)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
     }
   if((rates_1[0].open>rates_1[0].close) && (rates_2[0].open>rates_2[0].close) &&
      (rates_3[0].open>rates_3[0].close) && (rates_4[0].open>rates_4[0].close) && ma[2]>ma[1] && ma[1]>ma[0])
     {
      if(!InpReverse)
        {
         if(InpTradeMode!=buy)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
      else
        {
         if(InpTradeMode!=sell)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+

Four Timeframes 2
Four Timeframes 2
  • www.mql5.com
На одном из таймфреймов (задается через параметр 'MA Trend ') создаётся трендовый индикатор iMA (Moving Average, MA). Именно этот индикатор будет работать в качестве трендового фильтра. Тренд определяется так: MA на трёх барах (#2, #1 и #0) имеет одно направление. Советник проверяет направление бара #0 (это самый правый бар, который Вы видите...
 
Salve. Ho deciso di provare a padroneggiare sia il linguaggio mql5 che la piattaforma mt5. Ho una domanda sul tester. La mia domanda riguarda le citazioni. Ho messo la coppia audcad sulla piattaforma di Weltrade. Ho un piccolo pannello informativo nel mio Expert Advisor. Vedo in modalità di visualizzazione che gli spread non sono corretti (molto piccoli, simili agli spread di eurusd). Ho contattato il supporto tecnico della società (Veltrade) e ho chiesto se ci sono diversi spread per mt4 e mt5. Hanno risposto che sono uguali. Cosa devo fare se non c'è corrispondenza nel tester? Ho cercato di ottimizzarlo usando il codice genetico. Il carico della mia CPU era del 100%, e dopo pochi minuti di lavoro il mio computer si è bloccato (il processore era un phenom II x4 955 (4 core, 3,2 GHz), il refrigeratore era di riserva). Dopo due volte ho deciso di non rischiare più. Come dovrei capire una tale situazione? Poi, quando si testa senza visualizzazione non c'è nessuna informazione sull'accordo, solo un grafico. È vero o sto facendo qualcosa di sbagliato? L'informatività è piuttosto scarsa in modalità di visualizzazione. In effetti, sono più preoccupato per l'incoerenza degli spreads. In breve, la mia prima impressione è di completa delusione. Ma lo sconto è dovuto al fatto che non l'ho ancora capito.
 
Youri Lazurenko:
Salve. Ho deciso di provare a padroneggiare sia il linguaggio mql5 che la piattaforma mt5. Ho una domanda sul tester. Ho una domanda sulle citazioni. Ho messo la coppia audcad sulla piattaforma di Weltrade. Ho un piccolo pannello informativo nel mio Expert Advisor. Vedo in modalità di visualizzazione che gli spread non sono corretti (molto piccoli, simili agli spread di eurusd). Ho contattato il supporto tecnico della società (Veltrade) e ho chiesto se ci sono diversi spread per mt4 e mt5. Hanno risposto che sono uguali. Cosa devo fare se non c'è corrispondenza nel tester? Ho cercato di ottimizzarlo usando il codice genetico. Il carico della mia CPU era del 100%, e dopo pochi minuti di lavoro il mio computer si è bloccato (il processore era un phenom II x4 955 (4 core, 3,2 GHz), il refrigeratore era di riserva). Dopo due volte ho deciso di non rischiare più. Come dovrei capire una tale situazione? Poi, quando si testa senza visualizzazione non c'è nessuna informazione sull'accordo, solo un grafico. È vero o sto facendo qualcosa di sbagliato? L'informatività è piuttosto scarsa in modalità di visualizzazione. In effetti, sono più preoccupato per l'incoerenza degli spreads. In breve, la mia prima impressione è di completa delusione. Ma lo sconto è dovuto al fatto che non l'ho ancora capito.

Imposta i test basati su zecche reali. Allora tutti i dubbi sulla validità dello spread scompariranno.


 
Alexey Viktorov:

Imposta i test basati su zecche reali. Allora tutti i dubbi sulla validità dello spread scompariranno.


Grazie, lo proverò ora. Qual è il tuo consiglio sull'ottimizzazione. Sono più interessato alla velocità. Potrei correggere la qualità più tardi, durante i test.

P.S. Ho fatto come mi hai consigliato, gli spread sono gli stessi. Ho controllato di proposito il tipo di account. È specificato per diffondersi su audcad 4.1 (fluttuante). Sullo stesso conto (grafico demo) è 4,7 (fluttuante). Nel tester, mt5, massimo 2,8 (che galleggia su un lato più piccolo).

 
Youri Lazurenko:

Grazie, farò una prova. Qual è il tuo consiglio sull'ottimizzazione? Sono più interessato alla velocità. La qualità può essere regolata in seguito, durante i test.

Non posso darti alcun consiglio. Non uso l'ottimizzazione. Penso che sia solo un ciarlatano.