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

 

Grüße an alle Forumsmitglieder.

Bitte helfen Sie mir, dass der Indikator mit einem bestimmten Symbol funktioniert, unabhängig davon, auf welchen Chart er eingestellt ist.

Ich weiß, dass ein externer Parameter verwendet wird, um das Symbol zu ändern

input string   Symb   ="GBPJPY";
Ich weiß nicht, was ich als nächstes tun soll

Ich hänge den Indikator an

Dateien:
Fisher.mq4  3 kb
 

Können Sie mir bitte sagen, wie ich den Puffer zurücksetzen kann, wenn ein neuer Balken erscheint, aber so, dass die vorherigen Daten nicht gelöscht werden und im Diagramm angezeigt werden. Aus irgendeinem Grund kann ich den Puffer nicht auf Null zurücksetzen, und wennein neuer Balkenerscheint, werden die alten akkumulierten Daten mit neuen Daten überlagert. Was mache ich in meinem Code falsch? Danke für die Klarstellung.

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
  
   
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }
   
      
   if(Bid > Bid1) 
   {
   V1 = iVolume(NULL, 0, 0);
   V2 = V1 + V2;
   Buf_1[0]= V2;
   }                             
   else 
   {
   V3 = iVolume(NULL, 0, 0);
   V4 = V3 + V4;
   Buf_2[0]= (V4*-1);
   }
   Bid1=Bid;
   
   
  return(rates_total);
}
 
Alekseu Fedotov:

So ist das nun mal


Ich habe eine Frage mit dem Code, es stellt sich heraus, dass die nicht geschlossene aktuelle Kerze hat die Close-Zeit und bis die Kerze schließt, zeichnet der Indikator den Preis Schließung des Zeitraums, auf dem der Indikator steht rot in den Bildschirm-Bereich, die nicht gezeichnet werden sollte, weil die Stunde Kerze nicht geschlossen ist , das ist die Kompilierungszeit und dann nach der Kompilierung kommt die Zeichnung von jeder geschlossenen Kerze, natürlich können Sie einen anderen Weg, indem Sie die Stunde Bars zu lösen, aber ich wollte einen einfacheren Weg, schrieb ich früher so
for(i=limit; i>0; i--)
{
yesterday_weekday = TimeHour(iTime(Symbol(),0,i+1))-TimeHour(iTime(Symbol(),0,i));
if(yesterday_weekday!=0)

jede andere Lösung für das Problem? Ich würde es gerne in der Kompilierung sehen, aber ich wollte eine einfachere Lösung haben.

 
MakarFX: Bitte helfen Sie mir, den Indikator mit einem bestimmten Symbol arbeiten zu lassen, unabhängig davon, auf welchen Chart er eingestellt ist.

Es ist notwendig, diesen Parameter in Aufrufen Higest, Lowest zu schreiben - sie sind veraltet, besser iHigest, iLowest und lobte berüchtigten Fisher sofort auf ein Unentschieden vereinbart (V.Vysotsky)

 
PokrovMT5:
Ich habe eine Frage mit dem Code, es stellt sich heraus, dass die nicht geschlossene aktuelle einstündige Kerze die Close-Zeit hat und bis die Kerze schließt, zeichnet der Indikator die Preisschließung der Periode, auf der der Indikator steht, der rote Bereich im Screenshot ist nicht zu zeichnen, weil die einstündige Kerze nicht geschlossen ist Das ist die Kompilierungszeit und dann nach der Kompilierung kommt das Zeichnen von jeder geschlossenen Kerze, natürlich können Sie einen anderen Weg, indem Sie die Stunde Bars zu lösen, aber ich wollte einen einfacheren Weg, schrieb ich früher

Gibt es eine andere Lösung für das Problem? Ich danke Ihnen.

Wenn ich Sie richtig verstehe, möchten Sie den stündlichen Close im Chart markieren?

// (только для TF меньше часа) для всех свечей внутри часа поставить HourCloseBuff=цена закрытия часа

// предполагается что close индексирован как тайм-серия

for(int back=i+1;back<=limit && TimeHour(time[back]==TimeHour(time[i+1]);back++) {

  HourCloseBuff[back]=close[i+1];

}

 
STARIJ:

Wir sollten diesen Parameter in die Aufrufe Higest, Lowest schreiben - sie sind veraltet, besser sind iHigest, iLowest und der berühmt-berüchtigte Fischer stimmte sofort einem Remis zu (V.Vysotsky)

#property  copyright "Copyright © 2005, Yura Prokofiev"
#property  link      "Yura.prokofiev@gmail.com"

#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Lime
#property  indicator_color3  Red
 
input string   Symb     ="GBPJPY";
extern int     period   =10;

double         ExtBuffer0[];
double         ExtBuffer1[];
double         ExtBuffer2[];


int init()
  {
   
   
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2,Red);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2,Lime);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   IndicatorDigits(Digits+1);

   SetIndexBuffer(0,ExtBuffer0);
   SetIndexBuffer(1,ExtBuffer1);
   SetIndexBuffer(2,ExtBuffer2);

   IndicatorShortName("Fisher");
   SetIndexLabel(1,NULL);
   SetIndexLabel(2,NULL);

   return(0);
  }


int start()
  {
   //int     period=10;
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current,old;
   double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;
   double price;
   double MinL=0;
   double MaxH=0;  
   

   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;


   for(int i=0; i<limit; i++)
    {  MaxH = High[iHighest(Symb,0,MODE_HIGH,period,i)];
       MinL = Low[iLowest(Symb,0,MODE_LOW,period,i)];
      price = (High[i]+Low[i])/2;
      Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;     
      Value=MathMin(MathMax(Value,-0.999),0.999); 
      ExtBuffer0[i]=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;
      Value1=Value;
      Fish1=ExtBuffer0[i];
      
    }


   bool up=true;
   for(i=limit-2; i>=0; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+1];
           
      if (((current<0)&&(prev>0))||(current<0))   up= false;    
      if (((current>0)&&(prev<0))||(current>0))   up= true;
      
      if(!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]=0.0;
        }
        
       else
         {
          ExtBuffer1[i]=current;
          ExtBuffer2[i]=0.0;
         }
     }

   return(0);
  }
Das habe ich getan, aber das löst das Problem nicht für
price = (High[i]+Low[i])/2;
High und Low verwenden das aktuelle Symbol.
 
Maxim Kuznetsov:

Wenn ich Sie richtig verstehe, möchten Sie den stündlichen Close im Chart markieren?

// (только для TF меньше часа) для всех свечей внутри часа поставить HourCloseBuff=цена закрытия часа

// предполагается что close индексирован как тайм-серия

for(int back=i+1;back<=limit && TimeHour(time[back]==TimeHour(time[i+1]);back++) {

  HourCloseBuff[back]=close[i+1];

}

Maxim, guten Tag! Danke für die Variante, meine ist fast die gleiche, es funktioniert auch, aberAlekseu Fedotov schlug es vor und ich schrieb darüber, was ist die Idee, es zu korrigieren?



for(i=limit; i>=0; i--)
     {
      T = iTime(NULL,0,i); 
      shift=iBarShift(NULL,60,T); 
      C=iClose(NULL,60,shift);
      CC[i]=C;
     }
 

Können Sie mir bitte sagen, wie ich den Puffer zurücksetzen kann, wenn ein neuer Balken erscheint, aber so, dass die vorherigen Daten nicht gelöscht werden, sondern im Diagramm angezeigt werden. Aus irgendeinem Grund kann ich den Puffer nicht auf Null zurücksetzen, und wennein neuer Balkenerscheint, werden die alten akkumulierten Daten mit neuen Daten überlagert. Was mache ich in meinem Code falsch? Danke für die Klarstellung.

 datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }
   
      
   if(Bid > Bid1) 
   {
   V1 = iVolume(NULL, 0, 0);
   V2 = V1 + V2;
   Buf_1[0]= V2;
   }                             
   else 
   {
   V3 = iVolume(NULL, 0, 0);
   V4 = V3 + V4;
   Buf_2[0]= (V4*-1);
   }
   Bid1=Bid;
   
   
  return(rates_total);
 

Kann mir denn niemand helfen?

 

Guten Tag an Sie alle! Wie kann ich zum richtigen Kartenfenster wechseln?

Ich habe viele Fenster mit verschiedenen Paaren geöffnet, jedes mit einem EA, ein Handelssignal erscheint, aber die Währungen sind bis zu dem Motherfucker, und ich muss schnell die genaue Tabelle, auf der das Signal kam aktivieren.

Ich kenne den Befehl Symbol(), aber ich weiß nicht, wie ich das Fenster mit einem bestimmten Währungspaar aktivieren kann. Wer hat sich dieser Aufgabe vielleicht schon einmal gestellt?