Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 874

 

Salve, potreste consigliarmi per favore, nel codice qui sotto senza il blocco di loop (che viene dopo il CopyByffer), l'indicatore funziona normalmente, ma se si include un ciclo confrontando il prezzo di una candela con il prezzo di una delle barre, le barre stesse dopo l'inizio non vengono visualizzate, quale potrebbe essere il problema?

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_color1  Olive
#property indicator_type2   DRAW_LINE
#property indicator_color2  Green
#property indicator_type3   DRAW_LINE
#property indicator_color3  Olive

input int peroid = 20;        // период полос 1
input int bands_shift= 0;           // смещение полос 1 
input double deviation = 2.3;   // отклонение полос 1

input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE; // тип цены 

double      Base[];     // массив для BASE_LINE индикатора iBands
double      Upper[];    // массив для UPPER_BAND индикатора iBands
double      Lower[];    // массив для LOWER_BAND индикатора iBands

int iBands1_handle; //Указатель на первый индикатор 
int iBands2_handle; //Указатель на первый индикатор 

int g_i_Window;


int OnInit()
  {
   g_i_Window=ChartWindowFind();
   SetIndexBuffer(0,Base,INDICATOR_DATA);
   SetIndexBuffer(1,Upper,INDICATOR_DATA);
   SetIndexBuffer(2,Lower,INDICATOR_DATA);
           
   iBands1_handle=iBands(NULL,PERIOD_CURRENT,peroid,bands_shift,deviation,applied_price);

   if(iBands1_handle==INVALID_HANDLE){
         Alert("Неудалось загрузить индикатор, повторите попытку");
         return(-1);
         }
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[])         // Spread 
  {
   int i;
   int shift = 0;
   int shift1;
   int shift2;
   int shift3;
   string alert;
   
   double O, O1, O2, C, C1, C2, L, L1, L2, H, H1, H2;
      shift1 = shift;
      shift2 = shift + 1;
      shift3 = shift + 2;   
      O = open[shift1];
      O1 = open[shift2];
      O2 = open[shift3];
      H = high[shift1];
      H1 = high[shift2];
      H2 = high[shift3];
      L = low[shift1];
      L1 = low[shift2];
      L2 = low[shift3];;
      C = close[shift1];
      C1 = close[shift2];
      C2 = close[shift3]; 
   
   i = (prev_calculated==0)?1: prev_calculated;
   i = (prev_calculated==rates_total)?rates_total-1: i;
   
   CopyBuffer(iBands1_handle,0,0,rates_total-1,Base);
   CopyBuffer(iBands1_handle,1,0,rates_total-1,Upper);
   CopyBuffer(iBands1_handle,2,0,rates_total-1,Lower);

   for (i = i; i < rates_total; i++)
   {
    if(H > L && O > Lower[i])
    {
     int time_waiting = (int)TimeLocal() + 1;
     while(TimeLocal() < time_waiting){}
     Comment("True");
     return(0);
    }
     else Comment("False"); 
   }
   
   
   if (prev_calculated==0) ChartRedraw();   
   return(rates_total);
  }

Risultato:


 
Aleksey Vyazmikin:

Non si può.

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

Bug, bug, domande

Alexey Viktorov, 2018.05.30 15:53

Beh, non proprio in modo dinamico, ma una volta attraverso la reinizializzazione è possibile. L'ho fatto.


 
Alexey Viktorov:

Se puoi approfondire, per favore descrivi

 
Andrii Djola:

se puoi essere più specifico

Quanto più dettagliato?

In una situazione avevo bisogno di fare barre colorate o candele colorate. Usano 4 buffer di valore e 1 buffer di colore. L'altro, avevo bisogno di visualizzare una linea colorata, dove 1 buffer di valore e 1 buffer di colore.

Chiamare e modificare le proprietà dell'indicatore provoca l'inizializzazione dell'indicatore. Di conseguenza, se le impostazioni contengono barre o candele, allora un'opzione di inizializzazione. Se la linea, l'altra opzione di inizializzazione.

È impossibile cambiare il numero di buffer nel mezzo dell'indicatore, che è quello che ha detto Alexey Vyazmikin senza essere a conoscenza delle altre opzioni.

 
Alexey Viktorov:

Quanti altri dettagli?

In una situazione avevo bisogno di fare barre colorate o candele colorate. Usano 4 buffer di valore e 1 buffer di colore. L'altro, avevo bisogno di visualizzare una linea colorata, dove 1 buffer di valore e 1 buffer di colore.

Chiamare e modificare le proprietà dell'indicatore provoca l'inizializzazione dell'indicatore. Di conseguenza, se le impostazioni contengono barre o candele, allora un'opzione di inizializzazione. Se una linea, allora un'altra opzione di inizializzazione.

È impossibile cambiare il numero di buffer nel mezzo dell'indicatore, che è quello che ha detto Alexey Vyazmikin, senza essere a conoscenza di altre opzioni.

Se si decide di scrivere il mio cognome in russo, suona come Vyazmikin.

Per quanto riguarda i miei sospetti - penso che la risposta sia corretta alla domanda posta. Senza una spiegazione dei bisogni non ha senso dire il contrario. La reinizializzazione è un riavvio del programma, è chiaro che si può cambiare qualcosa nelle impostazioni.

 
Aleksey Vyazmikin:

Se si sceglie di scrivere il mio cognome in russo, suona come Vyazmikin.

Per quanto riguarda i miei sospetti - credo che la risposta alla domanda posta sia corretta. Senza una spiegazione dei bisogni, non ha senso dire il contrario. La reinizializzazione è un riavvio del programma, è chiaro che si può cambiare qualcosa nelle impostazioni.

La mancanza di un segno morbido offende così tanto?

Ho parlato di scorrettezza, secondo me ho sottolineato esattamente la correttezza della risposta.

 
alph:
Potete dirmi se si tratta di una figura realistica di tester? Ed è un buon o cattivo risultato per un anno con un deposito di 3000$?
reale.
 
Alexey Viktorov:

La mancanza di un segno morbido offende così tanto?

Sono guidato dall'illuminazione, non dall'offesa. Perché dovrei essere offeso, sai come si scrive e vuoi offendermi? Non ho nemmeno preso in considerazione questa opzione, è stato per niente?

 
Aleksey Vyazmikin:

Sono motivato dall'illuminazione, non dal risentimento. Perché dovrei essere offeso, sapevi scrivere correttamente e volevi offendermi? Non ho nemmeno preso in considerazione questa opzione, è stato per niente?

Pace, amicizia, gomme da masticare.

 
Alexey Viktorov:

Pace, amicizia, gomma.

E i mezzi litri?