Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1236

 
Vladimir Karputov:

Nel debug, passate e controllate in quali casi la vostra condizione reggerà?


Rates_total - prev_calculates è molto efficace.

  • Se è uguale a zero - significa che il calcolo sarà eseguito sulla barra corrente di un tick.
  • Se è uguale a 1 - significa che c'è una nuova barra e verranno 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 voi stessi calcolate a cosa è uguale il limite quando calcolate limite = rates_total - prev_calculates.
 
Artyom Trishkin:

rates_total - prev_calculates è una costruzione molto efficace.

  • Se è uguale a zero, significa che il calcolo viene eseguito sulla barra corrente dal 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 voi stessi calcolate qual è il limite calcolando limite = rates_total - prev_calculates.

Guarda il codice.

Poi date i vostri commenti.

 
Vladimir Karputov:

Guarda il codice.

Poi commentate.

Perché questa maleducazione? Non sono stato scortese.

Ho risposto quando la linea che hai citato e le sue condizioni reggeranno:

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

FAQ da principianti MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2020.08.06 13:03

Nel debug, passate e controllate in quali casi la vostra condizione sarà soddisfatta?


Ho anche aggiunto una risposta a tre possibili condizioni e cosa si fa in un caso simile:

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 calcolo sulla barra corrente per il 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.

Non c'è bisogno di fare nulla per l'elaborazione - questo stesso calcolo inizierà il ciclo dal valore necessario in ciascuno dei tre stati.

 
Artyom Trishkin:

Perché essere scortese? Non sono stato scortese.

Ho risposto in quali casi la linea che hai citato e la sua condizione saranno soddisfatte:

E ho anche completato la risposta con tre stati possibili, e cosa si fa in un caso simile:

Non c'è bisogno di fare nulla per elaborarlo da soli - questo calcolo esatto avvierà un ciclo dal valore desiderato in ciascuno dei tre stati.

Prendete il codice e passate al debugging. Poi, puoi farlo tu stesso - solo che ora lo porti alla fine e spieghi almeno tre errori.

 
Vladimir Karputov:

Prendete il codice e passate al debugging. Fai il resto da solo - ma ora segui e spiega almeno tre errori.

No, non ho tempo. Ho risposto solo alla riga che hai citato - non c'è nessun errore lì. E da qui (ho dato un'occhiata al codice con la coda dell'occhio) lasciatelo cercare di capirlo da solo (gli errori ci sono, e sono in superficie).

Ci sono molti esempi di questi costrutti qui sul forum e i suoi servizi.

Victor Nikolaev l'ha sempre usato (o lo fa ancora se non è pigro), e me l'ha insegnato molto tempo fa.

Victor Nikolaev
Victor Nikolaev
  • www.mql5.com
Профиль трейдера
 
Artyom Trishkin:

No, non ne ho il tempo. Ho risposto solo alla riga che hai citato - non c'è nessun errore. E inoltre (ho dato un'occhiata al codice con la coda dell'occhio) lasciatelo cercare di capirlo da solo (gli errori ci sono, e sono in superficie).

Ci sono molti esempi di questi costrutti qui sul forum e i suoi servizi.

Victor Nikolaev lo ha sempre usato (o lo usa ancora se non è pigro), e me lo ha insegnato molto tempo fa.

Ti conviene leggere il forum non da un cellulare, ma da un computer. E leggi tutti i post, non i preferiti. Se non vuoi aiutare, non partecipare affatto alla conversazione.

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


Ecco un esempio: in base a DRAW_COLOR_CANDLES, se la dimensione della candela è più piccola di quella impostata - la candela non viene disegnata.

Nota: questo è un indicatore ridisegnato - originariamente disegnava le candele per High e Low. E nessun tick ancora - solo un esempio di lavoro con DRAW_COLOR_CANDLES, se la dimensione della candela è inferiore a quella impostata - la candela non viene disegnata.

//+------------------------------------------------------------------+
//|                                             High Low Candles.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots   1
//--- plot HLC_
#property indicator_label1  "High Low Candles"
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  clrLimeGreen,clrLavender
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input uint     InpMinSize     = 150;            // Candles: min size
//--- indicator buffers
double   OpenBuffer[];  // open
double   HighBuffer[];  // high
double   LowBuffer[];   // low
double   CloseBuffer[]; // close
double   Colors[];
//---
double   m_min_size           = 0.0;            // Candles: min size          -> double
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,OpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,HighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,LowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,CloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,Colors,INDICATOR_COLOR_INDEX);
//--- an empty value
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- set the display of the symbol
   string symbol=Symbol();
   PlotIndexSetString(0,PLOT_LABEL,symbol+" Open;"+symbol+" High;"+symbol+" Low;"+symbol+" Close");
   IndicatorSetString(INDICATOR_SHORTNAME,"HLC ("+symbol+")");
//---
   m_min_size=InpMinSize*Point();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int limit=prev_calculated-1;
   if(prev_calculated==0)
      limit=0;
   for(int i=limit; i<rates_total; i++)
     {
      HighBuffer[i]=high[i];
      LowBuffer[i]=low[i];
      if(open[i]<close[i])
        {
         if(close[i]-open[i]>m_min_size)
           {
            OpenBuffer[i]=low[i];
            CloseBuffer[i]=high[i];
            Colors[i]=1.0;
           }
         else
           {
            OpenBuffer[i]=0.0;
            HighBuffer[i]=0.0;
            LowBuffer[i]=0.0;
            CloseBuffer[i]=0.0;
            Colors[i]=0.0;
           }
        }
      else
        {
         if(open[i]-close[i]>m_min_size)
           {
            OpenBuffer[i]=high[i];
            CloseBuffer[i]=low[i];
            Colors[i]=0.0;
           }
         else
           {
            OpenBuffer[i]=0.0;
            HighBuffer[i]=0.0;
            LowBuffer[i]=0.0;
            CloseBuffer[i]=0.0;
            Colors[i]=0.0;
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Risultato:


File:
 
Vladimir Karputov:

Dovresti leggere il forum dal tuo computer invece che dal tuo cellulare. E leggi tutti i post, non i preferiti. Se non vuoi aiutare, non partecipare affatto alla conversazione.

Sei malato? :)


 

Ragazzi, Artyom e Vladimir, non litigate, non c'è davvero niente su cui litigare... )))

Ora per gli errori. Ho iniziato a scrivere questo indicatore semplicemente per visualizzare ciò che ho letto in questo articolo. E ho cominciato a scriverlo dopo essere stato mandato ai bagni un mese fa. Questo perché ho avuto il tempo di trovare i miei errori. Non riuscivo a trovarli, per questo sono venuto qui a chiedere aiuto.

Ti ho chiesto di mostrarmi dove sbaglio (nel codice). E perché?

Non posso usare il debugger. Non so come. Nessuna variabile viene aggiunta a "guardabile" (l'ho scritto sul forum molto tempo fa...).

Mi dica solo dov'è il gancio?

Дискретизация ценового ряда, случайная составляющая и "шумы"
Дискретизация ценового ряда, случайная составляющая и "шумы"
  • www.mql5.com
Классический способ представления ценовых движений в виде временных отрезков возник на заре становления финансовых рынков, когда еще не было компьютеров и вся торговля шла на реальных рынках, реальными товарами. Хранить каждое изменение цены в течении дня было трудно, да и не имело смысла, цены менялись не так быстро. Поэтому представлялось...
 
Сергей Таболин:

Mi dica solo dov'è il gancio?

L'intoppo è nell'organizzazione del codice. Ho provato a guardarlo, ma è scritto in un modo tale che il mio cervello non può comprenderlo. Non so come spiegare cosa c'è che non va.

Posso solo consigliarvi di iniziare dall'inizio e con ordine.

  1. Cominciate a individuare tutte le candele N.
  2. Poi imposta una condizione per scegliere quale candela evidenziare.
E infine imparare a usare il debugger.
Motivazione: