Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1683

 
Ja, natürlich. Erste: 0, letzte: OrdersTotal()-1
 
Aleksei Stepanenko #:
Ja, natürlich. Erste: 0, letzte: OrdersTotal()-1

Ah, da ist eine Reihe, wirklich von Grund auf...

 
#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 #:
in Ihrem Fall funktionierte es nur 2 von 3 Linien, ich passte es an die Aufgabe zur Hand und es stellt sich heraus, dass die erste Linie bleiben (wie es sollte) und das Niveau der anderen beiden (rot und blau) mit den gegebenen Bedingungen (statt rot und blau Linie war eine einzige Linie - und es war rot, wennRSI2>RSI3 und blau, wennRSI2<RSI3) werden gerade und nur rot, als wüsste es nicht, dass es RSI ist
Ich füge einen Screenshot bei.
Dateien:
 
Andrey Kipyatkov #:
in Ihrem Fall stellt sich heraus, dass nur 2 der 3 Zeilen, ich es auf das Problem angepasst, und es stellt sich heraus, dass die erste Zeile bleiben (wie es sollte) und Ebene die beiden anderen (rot und blau) mit gegebenen Bedingungen (statt rot und blau Linie war eine einzige Zeile - und es war rot, wennRSI2>RSI3 und blau, wennRSI2<RSI3) werden gerade und nur rot, als wüsste es nicht, dass es RSI ist
Ich füge einen Screenshot bei.

Wie kann man Buf1 und Buf2 ausgleichen?

In Ihrem Zustand sind sie 0!

 
Andrey Kipyatkov #:
in Ihrem Fall funktionierte es nur 2 von 3 Linien, ich passte es an die Aufgabe zur Hand und es stellt sich heraus, dass die erste Linie bleiben (wie es sollte) und das Niveau der anderen beiden (rot und blau) mit den gegebenen Bedingungen (statt rot und blau Linie war eine einzige Linie - und es war rot, wennRSI2>RSI3 und blau, wennRSI2<RSI3) werden gerade und nur rot, als wüsste es nicht, dass es RSI ist
Ich füge einen Screenshot bei.


Dateien:
RSITEST-1.mq4  4 kb
 
Hallo zusammen, können Sie mir bitte sagen, was der Unterschied zwischen einem Handelsroboter und einem Expert Advisor ist?
 
Daniil Osipov #:
Hallo zusammen, können Sie mir bitte den Unterschied zwischen einem Handelsroboter und einem Trading Advisor erklären?
Es ist dasselbe... ein Wortspiel
 
MakarFX #:

Vielen Dank für die Hilfe mit dem Code, aber wenn es nicht schwierig ist, würde ich gerne den Punkt zu verstehen. Wenn Sie alles in eine Zeile schreiben, können Sie:
Buf0[i] = iRSI(NULL,0,D10,0,i); - in dieser Zeichenkette wird angegeben, dass das Null-Array eine Rsy-Zeile mit dem oben angegebenen Parameter ist
if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)) dann heißt das, dass Rsai mit dem Parameter D11 >D12
Buf1[i] = Buf0[i]; und dann passen Sie psi mit den Parametern D11 und D10 an (überlagern Sie eine Zeile über die andere)
sonst
Buf1[i] = EMPTY_VALUE; und Sie sagen, dass xy nicht mit dem Parameter D11 gerendert werden soll.
aber wenn Sie mit 3 Zeilen arbeiten
Buf0[i] = iRSI(NULL,0,D10,0,i); Sie sagen, wie man 1
Zeile
zeichnet
Buf1[i] = (iRSI(NULL,0,D11,0,i)+iRSI(NULL,0,D12,0,i))/2; anschließend addieren und dividieren Sie durch 2 2 und 3 - Diese Aktion ist mir nicht ganz klar, denn zuvor haben Sie die Felder gleichgesetzt und eine Zeile über die andere gelegt, weshalb dies die Syntax ist.
if(iRSI(NULL,0,D11,0,i)>iRSI(NULL,0,D12,0,i)) dann wiederholen Sie das Beispiel Sie sagenD11>D12
Buf2[i] = Buf1[i]; und Sie setzen die 3. und 2.
Zeile
gleich
else
Buf2[i] = EMPTY_VALUE; und sagen, dass die zweite Zeile nicht gezeichnet werden soll

Ich sehe richtig, wie Sie der Sprache "Parameter" geben und warum Sie im zweiten Fall Arrays hinzugefügt und durch 2 geteilt
haben

 
MakarFX #:
Das ist das Gleiche... ein Wortspiel
Vitaly Muzichenko #:

Ein Wortspiel.

Von der nächsten Verzweigung. Ohne Absprachen...

 
Andrey Kipyatkov #:
Ich danke Ihnen für Ihre Hilfe mit dem Code, aber wenn es nicht zu viel Mühe ist, würde ich gerne das Wesentliche verstehen. Wenn Sie alles in eine Zeile schreiben, können Sie:

Andrew, lassen Sie uns zunächst Ihre Bedingung aus dem ersten Beitrag definieren

Ich wollte klären, ob es eine Möglichkeit gibt, im Code statt einer roten und blauen Linie (RSI2 und RSI3 im Bild (ebenfalls angehängt)) eine Linie vorzuschreiben - und die war rot, wenn RSI2>RSI3 und blau, wenn RSI2 < RSI3

Anstelle der roten und blauen Linien erhalten wir also den Durchschnitt dieser Linien, d. h.

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

und diese Zeile hat standardmäßig eine rote Farbe.

Außerdem, wenn die Bedingung erfüllt ist

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

wir ändern die Linienfarbe nicht, da dies in MT4 nicht möglich ist,

wir nehmen eine andere Linie und überlagern sie mit einer anderen Farbe

Buf2[i] = Buf1[i];