Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1683

 
Sì, certo. Primo: 0, ultimo: OrdiniTotali()-1
 
Aleksei Stepanenko #:
Sì, certo. Primo: 0, ultimo: OrdiniTotali()-1

Ah, c'è un array, davvero da zero...

 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
                                                              
extern int RSIPERIOD=3;
extern double KOEFF1=2.5;
extern double KOEFF2=1.86; 
                                                                                                                                                                  
double mass0[],Buf1[],Buf2[];
double D10,D11,D12;
                                                                                                                                                                                                                                                                                                                                             
int init()
  {
   IndicatorDigits(0);
   string short_name="RSITEST";           
   IndicatorShortName("RSITEST");
   
   D10=RSIPERIOD;D11=D10*KOEFF1;D12=D11*KOEFF2;;
 
   SetIndexBuffer(0,mass0);
   SetIndexLabel (0,"Stoch "+Ds_0(D10)+")\n");
   SetIndexBuffer(1,Buf1);
   SetIndexLabel (1,"Stoch ("+Ds_0(D11)+")\n");
   SetIndexBuffer(2,Buf2);
   SetIndexLabel (2,"Stoch ("+Ds_0(D12)+")\n");
   return(0);
  }
                                                                                                               
int start()
  {
   if(Bars<=RSIPERIOD) return(0);
   int ExtCountedBars=IndicatorCounted();
   if (ExtCountedBars<0) return(-1);
   if (ExtCountedBars>0) ExtCountedBars--;
   for(int i=0;i<Bars-RSIPERIOD;i++)
      {
       mass0[i] = iRSI(NULL,0,D10,0,i);
       if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i))
       Buf1[i] = Buf2[i];
       Buf1[i] = DRAW_LINE;
       Buf2[i] = EMPTY_VALUE;
      }
   return(0);
  }

string Ds_0(double DOUBLE) {return(DoubleToStr(DOUBLE,0));}
MakarFX #:
nel tuo caso ha funzionato solo 2 delle 3 linee, l'ho adattato al compito a portata di mano e risulta che la prima linea rimane (come dovrebbe) e il livello delle altre due (rosso e blu) con le condizioni date (invece della linea rossa e blu era una sola linea - ed era rossa seRSI2>RSI3 e blu seRSI2<RSI3) diventano dritti e solo rossi come se non sapesse di essere RSI
Allego uno screenshot.
File:
 
Andrey Kipyatkov #:
nel tuo caso, risulta che solo 2 delle 3 linee, l'ho adattato al problema, e risulta che la prima linea rimane (come dovrebbe) e il livello delle altre due (rosso e blu) con determinate condizioni (invece di una linea rossa e blu era una sola linea - ed era rossa seRSI2>RSI3 e blu seRSI2<RSI3) diventano dritti e solo rossi come se non sapesse di essere RSI
Allego uno screenshot.

Come si fa a equalizzare Buf1 e Buf2?

Nelle tue condizioni sono 0!

 
Andrey Kipyatkov #:
nel tuo caso ha funzionato solo 2 delle 3 linee, l'ho adattato al compito a portata di mano e risulta che la prima linea rimane (come dovrebbe) e il livello delle altre due (rosso e blu) con le condizioni date (invece della linea rossa e blu era una sola linea - ed era rossa seRSI2>RSI3 e blu seRSI2<RSI3) diventano dritti e solo rossi come se non sapesse di essere RSI
Allego uno screenshot.


File:
RSITEST-1.mq4  4 kb
 
Ciao a tutti, potete dirmi per favore qual è la differenza tra un robot di trading e un Expert Advisor?
 
Daniil Osipov #:
Ciao a tutti, potete dirmi la differenza tra un robot di trading e un consulente di trading?
È la stessa cosa... un gioco di parole
 
MakarFX #:

Grazie per l'aiuto con il codice, ma se non è difficile vorrei capire il punto. Quando si scrive tutto in una riga si:
Buf0[i] = iRSI(NULL,0,D10,0,i); - si specifica in questa stringa che l'array zero è una linea rsy con il parametro dato sopra
se(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)) allora state dicendo che Rsai con parametro D11 >D12
Buf1[i] = Buf0[i]; e poi abbinate (sovrapponete una linea all'altra) psi con il parametro D11 e D10
else
Buf1[i] = EMPTY_VALUE; e gli dite di non rendere xy con il parametro D11.
ma quando si lavora con 3 linee
Buf0[i] = iRSI(NULL,0,D10,0,i); si dice come disegnare 1
linea Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2; poi si aggiunge e si divide per 2 2 e 3 - Questa azione non mi è molto chiara perché prima stavi equiparando gli array e sovrapponendo una riga all'altra perché questa è la sintassi.
se(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)) allora ripetete l'esempio voi diteD11>D12
Buf2[i] = Buf1[i]; ed equiparate
la
terza e la seconda
linea
else
Buf2[i] = EMPTY_VALUE; e dire di non disegnare la seconda linea

Vedo correttamente come date i "parametri" del linguaggio e perché nel secondo caso avete aggiunto gli array e diviso per 2

 
MakarFX #:
È la stessa cosa... un gioco di parole
Vitaly Muzichenko #:

Un gioco di parole.

Dal ramo successivo. Senza colludere...

 
Andrey Kipyatkov #:
Ti ringrazio per il tuo aiuto con il codice, ma se non è troppo disturbo, vorrei capirne l'essenza. Quando si scrive tutto in una riga si:

Andrew, definiamo prima la tua condizione dal primo post

Volevo chiarire se c'è un modo per prescrivere nel codice invece di una linea rossa e blu (RSI2 e RSI3 nell'immagine (allegata pure), rispettivamente) era una linea - ed era rossa se RSI2>RSI3 e blu se RSI2 < RSI3

quindi, invece di quella rossa e blu - otteniamo la media di queste linee, cioè

Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2;

e questa linea, per default, ha il colore rosso.

Inoltre, quando la condizione è soddisfatta

if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i))

non cambiamo il colore della linea perché non può essere fatto in MT4,

prendiamo e sovrapponiamo un'altra linea con un altro colore

Buf2[i] = Buf1[i];