Der Wechsel der TF ist ein Problem - Seite 5

 

Hier ist ein Indikator:

//+------------------------------------------------------------------+
//|                                                    Shabl_ind.mq4 |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "eevviill"
#property link      "http://alievtm.blogspot.com"
#property version   "1.42"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property  indicator_color1 clrLightBlue
#property  indicator_color2 clrRed
#property  indicator_width1 2
#property  indicator_width2 2

input string   arr_set="Arrow settings";
input int      arrow_indent=22;
input int      up_arrow_code=233;
input int      down_arrow_code=234;

double         up_arr[];
double         down_arr[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,up_arr);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,up_arrow_code);
   SetIndexLabel(0,"UP arrow");

   SetIndexBuffer(1,down_arr);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,down_arrow_code);
   SetIndexLabel(1,"DOWN arrow");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Shabl_ind                                                        |
//+------------------------------------------------------------------+
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 i,limit=0;
//---
   if(rates_total<=20)
      return(0);
//--- last counted bar will be recounted
   if(prev_calculated==0)
      limit=rates_total-1;
   if(prev_calculated>0)
      limit=rates_total-prev_calculated+1;
   Comment("rates_total=",rates_total,"; prev_calculated=",prev_calculated,"; limit=",limit);
//--- Shabl_ind counted in the 1-st buffer
   datetime temp;
   for(i=0; i<limit; i++)
     {
      temp=time[i];
      if(close[i]>close[i+1])
         up_arr[i]=low[i]-arrow_indent*Point; //up arrow
      if(close[i]<close[i+1])
         down_arr[i]=high[i]+arrow_indent*Point; //down arrow
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

Beachten Sie nur, dass der Indikator je nach Ihren Bedingungen beide Puffer auf den Nullbalken ziehen kann.

Dateien:
 
Karputov Vladimir:

Hier ist ein Indikator:

Bitte beachten Sie, dass der Indikator, je nach Ihren Bedingungen, beide Puffer bei Null bar ziehen kann.

Um zu vermeiden, dass zwei Puffer gezeichnet werden, müssen Sie den anderen Puffer auf Null setzen, wenn der eine voll ist

      if(close[i]>close[i+1])
       {
        down_arr[i] = EMPTY_VALUE;
        up_arr[i]=low[i]-arrow_indent*Point; //up arrow
       }
      if(close[i]<close[i+1])
       {
        up_arr[i] = EMPTY_VALUE;
        down_arr[i]=high[i]+arrow_indent*Point; //down arrow
       }
 
Vasyl Nosal:
Haben Sie einen Lösungscode?

Wie viele andere auch, habe ich mehr als eine Lösung für Ihre Frage. Denn Indikatoren können sich in Nuancen unterscheiden (die Aufgaben, die sie ausführen/Code/Intervalle der Berechnung, im Allgemeinen viele Faktoren).

 
Karputov Vladimir:

Hier ist ein Indikator:

Beachten Sie einfach, dass der Indikator unter Ihren Bedingungen beide Puffer bei Nullbar zeichnen kann.

Wollt ihr mich alle verarschen oder habt ihr wirklich keine Ahnung, was das Problem ist?

Hier ist Ihr Indikator, wenn Sie TF auf unbelastete Geschichte ändern.

:)))))))))))))))))))))))))))))))))))))))))))

 
Dina Paches:

Wie viele andere auch, habe ich mehr als eine Lösung für Ihre Frage. Denn Indikatoren können sich in Nuancen unterscheiden (die Aufgaben, die sie ausführen/Code/Intervalle der Berechnung, im Allgemeinen viele Faktoren).

Blah blah blah...
 
Vasyl Nosal:

Wollt ihr mich alle verarschen oder habt ihr wirklich keine Ahnung, was das Problem ist?

Hier ist Ihr Indikator für die TF-Änderung bei unbelasteter Historie.

:)))))))))))))))))))))))))))))))))))))))))))

Können Sie mir sagen, welche Manipulationen Sie anwenden, um ein so interessantes Bild zu erhalten? Und ich hoffe, dass Sie in Zukunft etwas zurückhaltender sein werden.

Hinzugefügt: Ich habe oben erwähnt, dass man sich selbst Gedanken über den Inhalt der Indikatorpuffer machen muss, wenn man die Historie aufpumpt:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Der Wechsel von TFs ist ein Problem

Karputov Vladimir, 2015.12.07 10:09

Es stehen Ihnen zwei Variablen zur Verfügung: prev_calculated und rates_total. Wenn Sie das Laden der Historie kontrollieren (mit prev_calculated==0), müssen Sie sich überlegen, was mit den Indikatorpuffern geschehen soll - das übliche Verhalten in solchen Fällen ist, das Laden der Historie mit dem ersten Indikatorladeereignis gleichzusetzen.

Aber Sie haben es aus irgendeinem Grund ignoriert und wollten keine Änderungen vornehmen.

Wie auch immer, hier ist Version 1.43 (hier sind meine Korrekturen und die vonAlexey Viktorov):

Forum zum Thema Handel, automatische Handelssysteme und Strategietester

TF-Änderung - Problem

Alexey Viktorov, 2015.12.07 12:52

Wenn Sie vermeiden wollen, dass zwei Puffer gezeichnet werden, müssen Sie einen Puffer auf Null zurücksetzen, wenn er voll ist.

      if(close[i]>close[i+1])
       {
        down_arr[i] = EMPTY_VALUE;
        up_arr[i]=low[i]-arrow_indent*Point; //up arrow
       }
      if(close[i]<close[i+1])
       {
        up_arr[i] = EMPTY_VALUE;
        down_arr[i]=high[i]+arrow_indent*Point; //down arrow
       }

:

//+------------------------------------------------------------------+
//|                                                    Shabl_ind.mq4 |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "eevviill"
#property link      "http://alievtm.blogspot.com"
#property version   "1.43"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property  indicator_color1 clrLightBlue
#property  indicator_color2 clrRed
#property  indicator_width1 2
#property  indicator_width2 2

input string   arr_set="Arrow settings";
input int      arrow_indent=22;
input int      up_arrow_code=233;
input int      down_arrow_code=234;

double         up_arr[];
double         down_arr[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,up_arr);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,up_arrow_code);
   SetIndexLabel(0,"UP arrow");

   SetIndexBuffer(1,down_arr);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,down_arrow_code);
   SetIndexLabel(1,"DOWN arrow");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Shabl_ind                                                        |
//+------------------------------------------------------------------+
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 i,limit=0;
//---
   if(rates_total<=20)
      return(0);
//--- last counted bar will be recounted
   if(prev_calculated==0)
     {
      limit=rates_total-1;
      ArrayInitialize(up_arr,EMPTY_VALUE);
      ArrayInitialize(down_arr,EMPTY_VALUE);
     }
   if(prev_calculated>0)
      limit=rates_total-prev_calculated+1;
   Comment("rates_total=",rates_total,"; prev_calculated=",prev_calculated,"; limit=",limit);
//--- Shabl_ind counted in the 1-st buffer
   for(i=0; i<limit; i++)
     {
      if(close[i]>close[i+1])
        {
         down_arr[i]=EMPTY_VALUE;
         up_arr[i]=low[i]-arrow_indent*Point; //up arrow
        }
      if(close[i]<close[i+1])
        {
         up_arr[i]=EMPTY_VALUE;
         down_arr[i]=high[i]+arrow_indent*Point; //down arrow
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+
Dateien:
 
Karputov Vladimir:

Könnten Sie uns sagen, welche Manipulationen Sie verwenden, um ein so interessantes Bild zu erhalten? Und ich hoffe, dass Sie sich von nun an diskreter ausdrücken werden.

Ich öffne ein Diagramm eines Währungspaares, das ich noch nie geöffnet habe. M1, zum Beispiel. Ich füge Ihren Indikator bei. Ich ändere es in M5.

Ich hatte also Recht? Müssen wir die Pfeilpuffer zurücksetzen?

 
Vasyl Nosal:

mql4

Nein. Hier ist dein Entwurf für ein Paar, bei dem es keine Vorgeschichte gab.

Was ist DAS?

if(i>Bars-20) i=Bars-20;

Wie ich dachte, ist die Schleife intern verwurzelt. Da Sie im Schleifenkörper auf den vorherigen Balken ([i+1]) zugreifen, sollten Sie die Berechnung frühestens ab dem zweiten Balken in der Historie (von links gezählt) beginnen. Und die Puffer müssen bei jedem Takt ALL gefüllt werden, nicht nur bei einem. Nun, oder initialisieren Sie sie vorher in OnInit().

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 nStartBar = rates_total - MathMax(prev_calculated, 2);

   for(int i = nStartBar; i >= 0; i--)
   {
      if(Close[i] > Close[i+1])
      {
         up_arr[i] = Low[i] - arrow_indent * _Point; //up arrow
         down_arr[i] = 0;
      }
         
      if(Close[i] < Close[i+1])
      {
         up_arr[i] = 0;
         down_arr[i] = High[i] + arrow_indent * _Point; //down arrow
      }
   }

   return(rates_total);
}
 
Karputov Vladimir:

Wie auch immer, hier ist die Version 1.43 (meine Korrekturen undAlexey Viktorovs Korrekturen hier):


:

Vladimir, warum tun Sie dies innerhalb von OnCalculate()? Ich meine die letzten beiden Zeilen - Neuinitialisierung von Arrays. Beide Puffer werden für jeden Takt berechnet, das ist eine unnötige Aktion.

if(prev_calculated==0)
{
   limit=rates_total-1;
   ArrayInitialize(up_arr,EMPTY_VALUE);
   ArrayInitialize(down_arr,EMPTY_VALUE);
}
 
Sergei Vladimirov:

WAS IST DAS?

Wie ich dachte, ist die Schleife intern beschädigt. Wenn Sie außerdem im Schleifenkörper ([i+1]) auf den vorherigen Balken zugreifen, sollte die Berechnung frühestens ab dem zweiten Balken in der Historie (von links gezählt) beginnen. Und die Puffer müssen bei jedem Takt ALL gefüllt werden, nicht nur bei einem. Nun, oder initialisieren Sie sie vorher in OnInit().

Das war's? Es gibt keine Störung?