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

 
Können Sie mir sagen, wie ich alle Zeichnungen im Indikator als Hintergrund und nicht über den Candlesticks einstellen kann?
 
Roman Sharanov:
Können Sie mir sagen, wie ich alle Zeichnungen im Indikator als Hintergrund und nicht über den Candlesticks einrichten kann?

Verwenden Sie die Einstellung der Eigenschaft ChartSetInteger(chart_id,CHART_FOREGROUND,value);

Dies gilt nicht nur für Indikatoren.

 

Hallo, ich habe einen Pulse Flat Histogramm-Indikator und möchte ihn von einem Histogramm in einen Linienindikator umwandeln. Wo soll ich anfangen?!

//+------------------------------------------------------------------+
//|                                             FM Signal Filter.mq4 |
//|                                                 Copyright © 2008 |
//|                                                 enhanced version |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008 Arney Derick"
#property link      "http://metatrader.com/"

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 DarkBlue
#property indicator_color4 Maroon
#property indicator_color5 Lime
#property indicator_color6 Yellow

//---- input parameters
extern int       bolPrd=20;
extern double    bolDev=2.0;
extern int       keltPrd=20;
extern double    keltFactor=1.5;
extern int       momPrd=12;
//---- buffers
double upB[];
double upB2[];
double loB[];
double loB2[];
double upK[];
double loK[];

int i,j,slippage=3;
double breakpoint=0.0;
double ema=0.0;
int peakf=0;
int peaks=0;
int valleyf=0;
int valleys=0, limit=0;
double ccis[61],ccif[61];
double delta=0;
double ugol=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexBuffer(0,upB);
   SetIndexEmptyValue(0,EMPTY_VALUE);

   SetIndexStyle(1,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexBuffer(1,loB);
   SetIndexEmptyValue(1,EMPTY_VALUE);

   SetIndexStyle(4,DRAW_ARROW,EMPTY,3);
   SetIndexBuffer(4,upK);
   SetIndexEmptyValue(4,EMPTY_VALUE);
   SetIndexArrow(4,159);
   SetIndexStyle(5,DRAW_ARROW,EMPTY,1);
   SetIndexBuffer(5,loK);
   SetIndexEmptyValue(5,EMPTY_VALUE);
   SetIndexArrow(5,159);

   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexEmptyValue(2,EMPTY_VALUE);
   SetIndexBuffer(2,upB2);

   SetIndexStyle(3,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexEmptyValue(3,EMPTY_VALUE);
   SetIndexBuffer(3,loB2);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   int shift,limit;
   double diff,d,dPrev,std,bbs;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-31;
   if(counted_bars>=31) limit=Bars-counted_bars-1;

   for(shift=limit;shift>=0;shift--) 
     {
      //d=iMomentum(NULL,0,momPrd,PRICE_CLOSE,shift);
      d=LinearRegressionValue(bolPrd,shift);
      dPrev=LinearRegressionValue(bolPrd,shift+1);
      if(d>0) 
        {
         if((dPrev>0) && (dPrev>d)){ upB2[shift]=d; upB[shift]=0; } else { upB[shift]=d; upB2[shift]=0; }
         //upB[shift]=0;
         loB[shift]=0;
         loB2[shift]=0;
           } else {
         if((dPrev<0) && (dPrev<d)){ loB2[shift]=d; loB[shift]=0; } else { loB[shift]=d; loB2[shift]=0; }
         upB[shift]=0;
         upB2[shift]=0;
         //loB[shift]=d;
        }
      diff= iATR(NULL,0,keltPrd,shift)*keltFactor;
      std = iStdDev(NULL,0,bolPrd,MODE_SMA,0,PRICE_CLOSE,shift);
      bbs = bolDev * std / diff;
      if(bbs<1) 
        {
         upK[shift]=0;
         loK[shift]=EMPTY_VALUE;
           } else {
         loK[shift]=0;
         upK[shift]=EMPTY_VALUE;
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+

double LinearRegressionValue(int Len,int shift) 
  {
   double SumBars=0;
   double SumSqrBars=0;
   double SumY = 0;
   double Sum1 = 0;
   double Sum2 = 0;
   double Slope= 0;

   SumBars=Len *(Len-1)*0.5;
   SumSqrBars=(Len-1)*Len *(2*Len-1)/6;

   for(int x=0; x<=Len-1;x++) 
     {
      double HH = Low[x+shift];
      double LL = High[x+shift];
      for(int y=x; y<=(x+Len)-1; y++) 
        {
         HH = MathMax(HH, High[y+shift]);
         LL = MathMin(LL, Low[y+shift]);
        }
      Sum1 += x* (Close[x+shift]-((HH+LL)/2 + iMA(NULL,0,Len,0,MODE_EMA,PRICE_CLOSE,x+shift))/2);
      SumY += (Close[x+shift]-((HH+LL)/2 + iMA(NULL,0,Len,0,MODE_EMA,PRICE_CLOSE,x+shift))/2);
     }
   Sum2=SumBars*SumY;
   double Num1 = Len * Sum1 - Sum2;
   double Num2 = SumBars * SumBars-Len * SumSqrBars;

   if(Num2!=0.0) 
     {
      Slope=Num1/Num2;
        } else {
      Slope=0;
     }

   double Intercept=(SumY-Slope*SumBars)/Len;
   double LinearRegValue=Intercept+Slope *(Len-1);

   return (LinearRegValue);

  }
//+------------------------------------------------------------------+

 

Ich ersetzte DRAW-HISTOGRAM durch DRAW_LINE und löschte die letzten 2 Puffer , die die Linie auf Ebene 0 zeichnen, und erhielt dies.


war - ist

Dateien:
26.png  27 kb
27.png  29 kb
 
Kos Mos:

Ich ersetzte DRAW-HISTOGRAM durch DRAW_LINE und entfernte die letzten 2 Puffer , die die Linie auf Ebene 0 zeichnen, und erhielt dies.


war - ist

Du hast es selbst herausgefunden :)

 
Artyom Trishkin:

Ich habe es herausgefunden :)

Ja))), es sieht furchtbar aus, weil 4 Puffer übrig sind, ich dachte, es müssten entweder 2 oder 1 sein, habe ich recht?!

 

Wer kann mir sagen, wie ich z.B. nicht den letzten Tag, sondern den vorletzten Tag und so weiter rückwärts mindestens die letzten sieben Tage schreiben kann oder wo ich das hier im Forum oder im Funktionsverzeichnis suche. Hier ist ein Beispiel vom Vortag:

#property indicator_chart_window

extern bool Show_LABELS=true;

extern inttern Shift_Prev_LABEL=10; // Zahl gibt die horizontale Verschiebung an

double DHi,DLo;

//---- Zurück

DHi =iHigh(NULL,PERIOD_D1,1);

DLo =iLow(NULL,PERIOD_D1,1);

if (Show_LABELS==true)

{

if(ObjectFind("Pre_day_maximum")!=0)

{

ObjectCreate("Pre_day_Maximum", OBJ_TEXT, 0, Time[Shift_Prev_LABEL+196], DHi);

ObjectSetText("Prev_D1"+DoubleToStr(DHi,Digits)+" ", 9, "Arial", Magenta);

}

sonst

{

ObjectMove("Prev_D1", 0, Time[Shift_Prev_LABEL+196], DHi);

}

if(ObjectFind("Pre_day_minimum")!=0)

{

ObjectCreate("Pre_day_minimum", OBJ_TEXT, 0, Time[Shift_Prev_LABEL+196], DLo);

ObjectSetText("Pre_day_minimum", "Prev_D1"+DoubleToStr(DLo,Digits)+" ", 9, "Arial", LawnGreen);

}

sonst

{

ObjectMove("Prev_day_minimum", 0, Time[Shift_Prev_LABEL+196], DLo);

}

}

Code, der nicht in inite, deinite und start geschrieben wurde.

double DHi,DLo; // Anscheinend müssen wir hier anfangen, aber ich weiß nicht genau was und dann würde ich alles selbst schreiben.

 
Artyom Trishkin:

Wir haben es herausgefunden :)

Hallo! Bitte sagen Sie mir, wie ich eine durchgezogene Linie erstellen kann.

 
koctja:

DHi =iHigh(NULL,PERIOD_D1,1);

DLo =iLow(NULL,PERIOD_D1,1);


double DHi,DLo; // Anscheinend müssen wir hier anfangen, und was genau weiß ich nicht, aber dann würde ich alles selbst schreiben.

Beginnen Sie mit Hilfe! Ändern Sie einfach eine Ziffer auf die gewünschte Taktverschiebung iHigh(NULL,PERIOD_D1,1);

 
Kos Mos:

Hallo! Bitte sagen Sie mir, wie ich eine durchgezogene Linie erstellen kann.

Hilfe zu "indicator_style" lesen

indikator_styleN

int

Linienart in grafischen Reihen, die mit dem Wert von ENUM_LINE_STYLE angegeben wird. N - Nummer der Grafikserie, Nummerierung von 1 an