Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 978

 
Vadim_2015:

L'algoritmo è chiaro, l'ho capito. Fatto l'esempio, tutto funziona.

Grazie mille!

E, con la prima domanda (sui massimi), potresti spiegare più dettagliatamente come implementarlo? Se possibile, datemi un piccolo algoritmo. Sei bravo :)

Sono contento di essere compreso da qualcuno che non sia me stesso.

Vadim_2015:
Ciao Cari utenti del forum!

Ho iniziato a studiare il linguaggio MQL4 e anche se sto scrivendo un semplice indicatore ho affrontato un problema che non riesco a risolvere. Il succo del problema:

1_Come trovare il High[i - fine giornata]. Ho un semplice ciclo Close[i]-Open[i+1], ho bisogno di trovare il High[i - fine giornata]. Per esempio, da[i],[1],[2] e fino alla fine del giorno (PERIOD_H1) . Non sono sicuro di come farlo. C'è la funzione 'iHigh', ma non è proprio la stessa cosa.


Questo è esattamente ciò di cui abbiamo bisogno. Alto del giorno corrente, non importa quanto tempo manca alla fine della giornata.

double  iHigh( 
   string           symbol,          // _Symbol
   int              timeframe,       // PERIOD_D1
   int              shift            // 0
   );

Se ho capito bene la domanda.

 
AlexeyVik:

Sono contento che qualcun altro mi capisca oltre a me stesso.

È semplicemente la cosa giusta da fare. Alto giorno corrente non importa quanto tempo è rimasto nel giorno.

Se ho capito bene la domanda.

È un po' diverso da quello che avevo capito. Ecco come stanno le cose.
bar=iBarShift(NULL,0,t1,false);   //по времени, находим индекс бара
barH=iHighest(NULL,0,MODE_HIGH,bar+1,1);  //находим максимум, в этом промежутке    
 
r772ra:
Leggermente diverso, da quanto ho capito. Ecco come stanno le cose.

Beh, questo è esattamente quello che mi è stato consigliato prima.
Ma iHighest(NULL, MODE_HIGH, bar+1, 1) restituisce l'indice della barra High che è superiore a tutte le altre in questo intervallo, mentre tu hai chiesto l'High del giorno corrente.

 
AlexeyVik:

Beh, questo è esattamente quello che mi è stato consigliato prima.
Ma iHighest(NULL, MODE_HIGH, bar+1, 1) restituisce l'indice della barra High che è più alto di tutti gli altri in questo intervallo, e tu hai chiesto l'High del giorno corrente.

Sono d'accordo,"iHighest(NULL, MODE_HIGH, bar+1, 1) restituiscel'indice della barra High che è superiore a tutte le altre in questo intervallo" . E intendo Alto giorno corrente rimanente del giorno.

Cercherò di spiegarmi meglio...

#property indicator_separate_window
#property indicator_buffers 1

#property  indicator_label1  "longBars"

#property  indicator_color1 clrBlue

#property  indicator_width1 2

//---углубление в историю на...
extern int barsToProcess = 100;
//---indicators Buffers
double   longBarsBuffer[];        
                

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,longBarsBuffer);
   SetIndexStyle(0,DRAW_HISTOGRAM);
   
   IndicatorDigits(Digits);
  
   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 counted_bars=IndicatorCounted(), 
       limit;

   if (counted_bars<0) return(-1);
   if (counted_bars>0)       
       counted_bars--;       
      
   limit=Bars-counted_bars;
   if(limit>barsToProcess)                                  
      limit=barsToProcess;
  
   double  longValue;
      
                            
   for(int i=0;i<limit;i++)
      {
       longValue = Close[i+1]-Open[i+3];
       
//--- само условие
         
       if(longValue>0) 

//---собственно что необходимо получить: если на i-том баре выполнилось условие(i>0), то находим High от этого бара и 
//---до конца этого дня,я имею ввиду максимум всего этого промежутка. Примерно: Если условие выполнилось 
//---на i=12h,то High от 12 до 00:00,
//--- если i=01:00, то High от 01:00 до 00:00, если i=22:00, то High от 22:00 до 00:00. Как то так.  Возможно ли это реализовать?  
//---Может я не правильно сделал цикл? Как его правильно организовать?
                  
       longBarsBuffer[i]=High[от i - и до конца дня] - то что необходимо получить. 
       else 
          longBarsBuffer[i]=0.0; 
       

Se non puoi rimproverarmi troppo :) ...per favore spiegami come si fa?

 
Vadim_2015:

Sono d'accordo, "iHighest(NULL, MODE_HIGH, bar+1, 1) restituiscel'indice della barra High che è superiore a tutte le altre in questo intervallo" . E intendo Alto il resto della corrente del giorno.

Cercherò di essere più specifico...

Se puoi per favore non rimproverarmi troppo :) ...puoi spiegarmi come si fa?

All'inizio ho pensato che fosse un semplice errore di ortografia, ma ora non ci sono dubbi, vuoi guardare nel futuro? Allora solo il Doc di Ritorno al futuro può aiutarti.
 
AlexeyVik:
All'inizio ho pensato che fosse un semplice errore di battitura, ma ora non ci sono dubbi, vuoi guardare nel futuro? Allora solo il Doc di Ritorno al futuro può aiutarti.

Temo che Doc non possa aiutarmi... è nel settore sbagliato:)

Sì, quella domanda, "Altoil resto di quello attuale. È un po' confuso. Mi è appena venuto in mente, si potrebbe davvero pensare che sia un tentativo di guardare al futuro in questo giorno. Questo è un po' fuori luogo. Volevo contare gli _AltiIl resto dell'attuale. del giorno dall'inizio della matrice dei prezzi fino al penultimo giorno (ieri), perché tutti i dati sono lì. E l'ultimo giorno (quello di oggi) dovrebbe essere ricalcolato appena finito. Altrimenti sembrerà come hai detto tu - un tentativodi guardare nel futuro! Se parto dall'inizio della matrice dei prezzi e mi sposto fino alla fine (la giornata di ieri), High cambierà su ogni barra successiva controllata. Ecco perché ho chiesto come sottrarre High dal resto della giornata. Ho dimenticato di dirvi che il giorno corrente non è preso in considerazione, perché non è ancora completato. Scusa, non l'ho capito subito :) . Puoi dirmi come organizzare un tale calcolo? È possibile?

 
Vadim_2015:

Temo che Doc non possa aiutarmi... è nel settore sbagliato:)

Sì, quella domanda, "Altoil resto di quello attuale. del giorno", è un po' confuso. Mi è venuto in mente solo ora, si potrebbe davvero pensare che sia un tentativo di guardare al futuro in questo giorno. È un po' un termine improprio. Volevo contare gli _Alti# il resto di quello attuale # del giorno dall'inizio della matrice dei prezzi fino al penultimo giorno (ieri), perché tutti i dati sono lì. E l'ultimo giorno (quello di oggi) dovrebbe essere ricalcolato appena finito. Altrimenti sembrerà come hai detto tu - un tentativodi guardare nel futuro! Se parto dall'inizio della matrice dei prezzi e mi sposto fino alla fine (la giornata di ieri), High cambierà su ogni barra successiva controllata. Ecco perché ho chiesto come sottrarre High dal resto della giornata. Ho dimenticato di dirvi che il giorno corrente non è preso in considerazione, perché non è ancora completato. Scusa, non l'ho capito subito :) . Puoi dirmi come organizzare un tale calcolo? È possibile?

Lasciatemi cercare di capire la vostra domanda. Hai bisogno di trovare High tra le barre 1) il giorno precedente e quello che hai oggi, o 2) solo quello che hai oggi? Forse iHighest() aiuterà?
 
paladin80:
Lasciatemi cercare di capire la vostra domanda. Avete bisogno di trovare Alta tra le barre 1) il giorno precedente e la data di oggi, o 2) solo la data che avete oggi? Forse iHighest() aiuterà?

Cari amici, cercherò di spiegare al meglio quello che voglio ottenere... ...o lo farò bene...o confonderò tutti!

Guarda, c'è un array di prezzi, diciamo dal _1.02.2015. al 15.12.2015 (giorno di oggi), prendi PERIODO_H1.

1_Prendo una semplice formula _val=Close[i]-Open[i]

2_impostare una semplice condizione if (val>0) - il controllo dovrebbe iniziare dal _1.02.2015.

-Se la condizione è soddisfatta, diciamo, su qualche barra, allora da questa barra e fino alla fine di questa giornata trovate _High. Per esempio:Close[4]-Open[4]>0, cioè supponiamo che la barra con indice[i=4] appartenga a _1.02.2015 10:00, quindidalle 10:00 - di questo giorno fino alle 00:00 - la fine di questo giorno- troviamo _High. Allo stesso modo, se la condizione ha funzionato l'altro giorno, agiamo secondo lo stesso principio. E così passa attraverso tutta la gamma dei prezzi. Il calcolo dovrebbe iniziare dal _1.02.2015 al 14.12.2015 (il penultimo giorno), perché fino al penultimo giorno, - perché l'ultimo giorno non è ancora completato e l'Alto di tutto il giorno non è noto. Appena finito l'ultimo giorno, controlliamo anche le condizioni. Dal momento che i dati dal _1.02.2015. al 14.12.2015 (il penultimo giorno) sono noti, non sembrerà -tentare diguardare nel futuro :)

- Se la condizione non è soddisfatta - non viene fatto nulla, il valore vuoto viene scritto nell'array.

Questa è in realtà l'intera "idea". Come farlo, come definirlo attraverso un ciclo - non riesco a pensare!

 
Vadim_2015:

Temo che Doc non possa aiutarmi... è nel settore sbagliato:)

Sì, quella domanda, "Altoil resto di quello attuale. del giorno", è un po' confuso. Mi è venuto in mente solo ora, si potrebbe davvero pensare che sia un tentativo di guardare al futuro in questo giorno. È un po' un termine improprio. Volevo contare gli _Alti# il resto di quello attuale # del giorno dall'inizio della matrice dei prezzi fino al penultimo giorno (ieri), perché tutti i dati sono lì. E l'ultimo giorno (quello di oggi) dovrebbe essere ricalcolato appena finito. Altrimenti sembrerà come hai detto tu - un tentativodi guardare nel futuro! Se parto dall'inizio della matrice dei prezzi e mi sposto fino alla fine (la giornata di ieri), High cambierà su ogni barra successiva controllata. Ecco perché ho chiesto come sottrarre High dal resto della giornata. Ho dimenticato di dirvi che il giorno corrente non è preso in considerazione, perché non è ancora completato. Scusa, non l'ho capito subito :) . Puoi dirmi come organizzare un tale calcolo? È possibile?

Se è così, torniamo a iHighest(), ma quante barre contare e da quali partire devono essere calcolate usando iBarShift()
 
AlexeyVik:
Se è così, torniamo a iHighest(), ma quante barre contare e da quale partire devono essere calcolate usando iBarShift()

Potresti mostrarmi come fare questo in un ciclo? Non riesco a capire come farlo correttamente.