Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 349

 
Pyro:

Bei der Initialisierung wird alles zurückgesetzt, außer den globalen Variablen
Und wenn Sie den Computer ausschalten oder der Server, auf dem der Expert Advisor läuft, nicht mehr verfügbar ist?
 
artmedia70:
Und hier sollten wir klarstellen, dass GV Endvariablen sind, nicht EA-Variablen.

Ich habe angefangen zu lesen und zu studieren. Jetzt weiß ich, dass globale Variablen und globale Variablen unterschiedliche Dinge sind.

Übrigens, zum Fehler 129, nach dem ich Sie so oft gefragt habe. Die Sache ist die, dass ich einen 5-stelligen DC habe,

Mein Expert Advisor ist ein Slipage 2, deshalb konnte er wahrscheinlich nicht mit dem Kurs mithalten. Jetzt habe ich ihn auf 15 Pips eingestellt.

 
artmedia70:
Und hier sollte klargestellt werden, dass GVs Terminalvariablen sind, nicht EA-Variablen.


Nun, ich meine, dass der EA mit ihnen arbeiten kann, nur um Werte während der Initialisierung zu speichern (unter anderem).
 
Forexman77:
Was ist, wenn ich meinen Computer einfach ausschalte oder der Server, auf dem der EA läuft, abstürzt?


Jetzt wird es interessant. Globale Variablen werden im Cache gespeichert und unter Umständen auch in eine Datei geschrieben. Es sieht aus wie nach einiger Zeit oder während der Deinitialisierung. Manchmal ging die Datei gvariables.dat (Werte der globalen Variablen) beim Neustart verloren. Dem muss Rechnung getragen werden. Oder sie hatten einfach keine Zeit, sie aus dem Zwischenspeicher auf die Festplatte zu kopieren. Das bedeutet, dass wir keine Garantie dafür haben, dass sie sich bereits auf der Festplatte und nicht im Cache befinden. Korrigieren Sie mich, wenn ich falsch liege.


Forexman77:

Ich begann zu lesen und zu studieren. Ich weiß jetzt, dass globale Variablen und globale Variablen unterschiedliche Dinge sind.

Übrigens, zum Fehler 129, nach dem ich so oft gefragt wurde. Die Sache ist die, dass ich eine fünfstellige DC habe,

Mein Expert Advisor ist ein Slipage 2, deshalb konnte er wahrscheinlich nicht mit dem Kurs mithalten. Ich würde ihn auf 15 Pips setzen.


Ich glaube nicht, dass das der Grund ist. Ich habe eine 3 auf meinen fünf Ziffern. Alles öffnet sich normal. Soweit ich mich erinnere, haben sich die Makler darauf geeinigt, dass ein Punkt immer noch ein Basispunkt ist, der allgemein akzeptiert wird (die 4. Stelle nach der Null), und dass ein gebrochener Punkt ein gebrochener Punkt ist. So müssen Sie bei der Eingabe von 6, 7 und 8 Ziffern nicht jedes Mal die Bedeutung von "Punkt" ändern.
 
Pyro:

Jetzt wird es interessant. Globale Variablen werden in einem Cache gespeichert und unter Umständen auch in eine Datei geschrieben. Es ist wie nach einer gewissen Zeit. Es gab Fälle, in denen im Echtbetrieb die gvariables.dat (Datei, in der die Werte der globalen Variablen gespeichert wurden) bei einem scharfen Neustart des Computers einfach verloren ging. Dies muss berücksichtigt werden. Oder sie hatten einfach keine Zeit, sie aus dem Zwischenspeicher auf die Festplatte zu kopieren. Das bedeutet, dass wir keine Garantie dafür haben, dass sie sich bereits auf der Festplatte und nicht im Cache befinden. Korrigieren Sie mich, wenn ich falsch liege.
Vielleicht könnten Sie versuchen, ihn zu schreiben und dann den Computer auszuschalten. Und wenn Sie ihn einschalten, versuchen Sie Alert, um zu sehen, ob er da ist. Obwohl ich nicht lügen werde, verwende ich bisher nur statische Variablen und Flaggen und kann nichts über globale Variablen sagen.
 
Forexman77:
Vielleicht können Sie versuchen, es aufzunehmen und dann den Computer auszuschalten. Und wenn Sie es einschalten, versuchen Sie, den Notruf anzurufen, um zu sehen, ob er da ist. Obwohl ich nicht lügen werde, verwende ich bisher nur statische Variablen und Flaggen und kann nichts über globale Variablen sagen.


Sie können einfach im Menü -> Werkzeuge -> Globale Variablen nachsehen. Dort gibt es eine Liste. Oder GlobalVariableCheck. Meine Erfahrung zeigt jedoch, dass es besser ist, alles in einer physischen Datei zu speichern.
 
Hallo!
Bitte finden Sie Fehler in meiner Argumentation.

Heute ist der zweite Tag, an dem ich mit der Erstellung des Indikators kämpfe, und zwar mit der Anzeige der Linie in dem zusätzlichen Fenster, das an das Hauptfenster angehängt ist. Meiner Meinung nach ist es notwendig, Berechnungen über die nicht berechneten Balken durchzuführen und die Werte der Berechnungsergebnisse an den Puffer zu geben. Diesmal verwende ich einen komplexeren Code für das Beispiel (ich arbeite gerne mit relativ großem Code). Hier ist die "Lichtung der Kreativität":

//+--------------------------------------------+
#property indicator_separate_window
#property indicator_minimum -10
#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
extern double N = 1;
//+--------------------------------------------+
//Deklaration                                  |
//+--------------------------------------------+
double A; double C;       
double M; double D;
double L; double I;
double B; double F;
double K; double Buf_0[];
double G; 
//+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//+--------------------------------------------+
int start() {
//Level 1
A = iRSI(Symbol(),0,10,0,0);
M = iRSI(Symbol(),0,20,0,0);
L = iRSI(Symbol(),0,15,0,0);
B = iStochastic(Symbol(),0,10,6,6,0,0,0,0);
K = iStochastic(Symbol(),0,10,6,6,0,0,1,0);
C = iADX(Symbol(),0,10,0,0,0);
D = iADX(Symbol(),0,10,0,1,0);
I = iADX(Symbol(),0,10,0,2,0);
F = iRVI(Symbol(),0,10,0,0);
  //Level 2
  Buf_0[0] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
  return; } 
//+-------------------------------------------+ 

.

Sie können deutlich sehen, dass der Pufferwert "in diesem Clearing" "0" ist, d.h. dieser Indikator wird die Linie nur ab dem Zeitpunkt des Starts der Handelsplattform zeichnen. Und ich brauche nicht nur aktuelle, sondern auch historische Daten.

Ich habe die in diesem Code beschriebenen Informationen verwendet (aus dem MQ4-Tutorial):

//--------------------------------------------------------------------
// separatewindow.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
#property indicator_separate_window // Отображение в отдельном окне
#property indicator_buffers 1       // Количество буферов
#property  indicator_color1 Blue     // Цвет первой линии
#property  indicator_color2 Red      // Цвет второй линии
 
extern int History  =50;            // Колич.баров в расчётной истории
extern int Aver_Bars=5;             // Количество баров для расчёта
 
double Buf_0[];                     // Объявление индикаторного массива
//--------------------------------------------------------------------
int init()                          // Специальная функция init()
  {
   SetIndexBuffer(0,Buf_0);         // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
   return;                          // Выход из спец. ф-ии init()
  }
//--------------------------------------------------------------------
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                    // Количество просчитанных баров 
   double
   Sum_H,                           // Сумма значений High за период
   Sum_L;                           // Сумма значений Low  за период
//--------------------------------------------------------------------
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      Sum_H=0;                      // Обнуление в начале цикла
      Sum_L=0;                      // Обнуление в начале цикла
      for(n=i;n<=i+Aver_Bars-1;n++) // Цикл суммирования значений 
        {
         Sum_H=Sum_H + High[n];     // Накопление суммы макс.значений
         Sum_L=Sum_L + Low[n];      // Накопление суммы мин. значений
        }
      Buf_0[i]=(Sum_H-Sum_L)/Aver_Bars;// Знач. 0 буфера на i-ом баре
      i--;                          // Расчёт индекса следующего бара
     }
//--------------------------------------------------------------------
   return;                          // Выход из спец. ф-ии start()
  }
//--------------------------------------------------------------------
Ich suche mir aus, was ich brauche, und ich besorge es...
extern int History  =50;            // Колич.баров в расчётной истории
extern int Aver_Bars=5;             // Количество баров для расчёта
double Buf_0[];                     // Объявление индикаторного массива
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                    // Количество просчитанных баров 
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
      Buf_0[i]=(Sum_H-Sum_L)/Aver_Bars;// Знач. 0 буфера на i-ом баре
      i--;  

Wenn ich dann die Kommentare entferne und logisch unterteile, erhalte ich eine "Paradeansicht":

//|+--------------------------------------+
//|Inputs                                 |
//|+--------------------------------------+
extern int History  =50;
//|+--------------------------------------+
//|Declaration                            |
//|+--------------------------------------+
double Buf_0[];
int i;
int n;
int Counted_bars;
//|+--------------------------------------+
//| Start?                                |
//| Yes, babe!                            |
//|+--------------------------------------+
int start(){
//+-----------+
//Level 1 
//+-----------+
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
  //+-----------+
  //Level 2
  //+-----------+
  if (i>History-1) i=History-1;
    //+------------+
    //Level 3 
    //+------------+
    Buf_0[i]= 
    i--;  
//+---------------------------------------+

Hier habe ich nur noch Objekte, die mit dem "Hauptcode" synthetisiert werden müssen. Nach der Durchführung der Fusion erhalte ich folgenden Code:

//+--------------------------------------------+
#property indicator_separate_window
#property indicator_minimum -10
#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
//|+--------------------------------------------+
//|Inputs                                       |
//|+--------------------------------------------+
extern double N = 1;
extern int History  =50;
//|+--------------------------------------------+
//|Deklaration                                  |
//|+--------------------------------------------+
double A; double C;       int i;
double M; double D;
double L; double I;       int Counted_bars;
double B; double F;
double K; double Buf_0[];
double G; 
//|+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//|+--------------------------------------------+
int start() {
       //|+-----------+
       //|Level 1     |
       //|+-----------+
       A = iRSI(Symbol(),0,10,0,0);
       M = iRSI(Symbol(),0,20,0,0);
       L = iRSI(Symbol(),0,15,0,0);
B = iStochastic(Symbol(),0,10,6,6,0,0,0,0);
K = iStochastic(Symbol(),0,10,6,6,0,0,1,0);
       C = iADX(Symbol(),0,10,0,0,0);
       D = iADX(Symbol(),0,10,0,1,0);
       I = iADX(Symbol(),0,10,0,2,0);
       F = iRVI(Symbol(),0,10,0,0);
   Counted_bars=IndicatorCounted();
              i=Bars-Counted_bars-1;
         //+-----------+
         //Level 2     |
         //+-----------+
         if (i>History-1) i=History-1;
         Buf_0[i] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
         return; } 
//+-------------------------------------------+
Während der Programmierung habe ich den "Haupt"-Code dekorativ verändert und einige Werte aus dem "Anhängsel"-Code entfernt. Nachdem ich den Code ausgeführt hatte, bemerkte ich die horizontale Linie, die auf einen Fehler in meiner Argumentation hinwies, denn die technischen Indikatoren, die in dem benutzerdefinierten Indikator verwendet werden, können über einen langen Zeitraum nicht die Werte liefern, die den Graphen der Funktion "y = x" bilden.

Inhaltsangabe.
Mein Name ist John (Eugene, aber auf amerikanische Art).

Ich bin 15 Jahre alt, ich handle seit 5 Tagen und ich fühle einen großen Fortschritt beim Erlernen der Bereiche des Devisenhandels, nämlich der Indikatoranalyse und der grafischen Analyse (kurz gesagt, t.a. :) ).
Ich habe das Gefühl, dass der "manuelle Handel" immer weniger erfolgversprechend ist, deshalb habe ich beschlossen, direkt zum "automatischen Handel" überzugehen.

ALLE UNANGEMESSENEN URTEILE "AUFHEBEN"! Ich möchte mehr wissen, und Ihre Kommentare werden mir dabei helfen.

 
Link_x:
Hallo!
Bitte finden Sie Fehler in meiner Argumentation.

Hier endet der zweite Tag, an dem ich mit der Erstellung des Indikators kämpfe, nämlich mit der Anzeige der Linie in einem zusätzlichen Fenster, das an das Hauptfenster angehängt ist. Meiner Meinung nach ist es notwendig, Berechnungen über die nicht berechneten Balken durchzuführen und die Ergebnisse der Berechnungen an den Puffer weiterzugeben. Diesmal verwende ich einen komplexeren Code für das Beispiel (ich arbeite gerne mit relativ großem Code). Hier ist die "Lichtung der Kreativität":

.

Sie können deutlich sehen, dass der Pufferwert "0" ist, d.h. dieser Indikator zeichnet eine Linie nur ab dem Moment, in dem die Handelsplattform gestartet wird. Und ich brauche nicht nur aktuelle, sondern auch historische Daten.

Ich habe die in diesem Code beschriebenen Informationen verwendet (aus dem MQ4-Tutorial):

Ich werde herausfinden, was ich brauche und ich werde...

Wenn ich dann die Kommentare entferne und logisch unterteile, erhalte ich eine "Paradeansicht":

Hier habe ich nur noch Objekte, die mit dem "Hauptcode" synthetisiert werden müssen. Nachdem ich die Fusion durchgeführt habe, erhalte ich diesen Code:

Während der Programmierung habe ich den "Haupt"-Code dekorativ verändert und einige Werte aus dem "Anhängsel"-Code entfernt. Nachdem ich den Code gestartet hatte, bemerkte ich die horizontale Linie, die auf einen Fehler in meiner Argumentation hinwies, da die technischen Indikatoren, die in dem benutzerdefinierten Indikator verwendet werden, nicht in der Lage sind, während einer langen Zeit die Werte zu liefern, die den Graphen der Funktion "y = x" bilden.

Inhaltsangabe.
Mein Name ist John (Eugene, aber auf amerikanische Art).

Ich bin 15 Jahre alt, beschäftige mich seit 5 Tagen mit dem Handel und habe das Gefühl, dass ich große Fortschritte beim Studium der Bereiche des Devisenhandels, nämlich der Indikatoranalyse und der Chartanalyse (kurz gesagt, t.a. :) ) mache.
Ich habe das Gefühl, dass der "manuelle Handel" immer weniger erfolgversprechend ist, so dass ich beschlossen habe, direkt zum "automatisierten Handel" überzugehen.

ALLE UNZULÄNGLICHEN URTEILE "AUF DIE SCHIPPE NEHMEN"! Ich möchte mehr wissen, und Ihre Kommentare werden mir dabei helfen.

Der Anfang ist ein guter Anfang.

Achten Sie auf die Variable History und versuchen Sie, einen anderen Wert einzusetzen.

//                Джон(Евгений).mq4 

//+--------------------------------------------+
#property indicator_separate_window
//#property indicator_minimum -10
//#property indicator_maximum 10
#property indicator_buffers 1
#property  indicator_color1 Blue
//|+--------------------------------------------+
//|Inputs                                       |
//|+--------------------------------------------+
extern double N = 1;
extern int History  =50;
//|+--------------------------------------------+
//|Deklaration                                  |
//|+--------------------------------------------+
double A; double C;       int i;
double M; double D;
double L; double I;       int Counted_bars;
double B; double F;
double K; double Buf_0[];
double G; 
//|+--------------------------------------------+
int init(){
SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
return; }
//|+--------------------------------------------+
int start()
{
       //|+-----------+
       //|Level 1     |
       //|+-----------+
 for( i=0; i<History; i++)
    {    
       A = iRSI(Symbol(),0,10,0,i);
       M = iRSI(Symbol(),0,20,0,i);
       L = iRSI(Symbol(),0,15,0,0);
       B = iStochastic(Symbol(),0,10,6,6,0,0,0,i);
       K = iStochastic(Symbol(),0,10,6,6,0,0,1,i);
       C = iADX(Symbol(),0,10,0,0,i);
       D = iADX(Symbol(),0,10,0,1,i);
       I = iADX(Symbol(),0,10,0,2,i);
       F = iRVI(Symbol(),0,10,0,i);
    Buf_0[i] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
   }
 return;
} 
//+-------------------------------------------+
 
Link_x:
Hallo!
Bitte finden Sie Fehler in meiner Argumentation.

Der zweite Tag der Entwicklung des Indikators neigt sich dem Ende zu, ich kämpfe mit der Anzeige der Linie in dem zusätzlichen Fenster, das an das Hauptfenster angehängt ist. Meiner Meinung nach ist es notwendig, Berechnungen über die nicht berechneten Balken vorzunehmen und den Ergebnissen der Berechnungen Werte für den Puffer zu geben. Diesmal verwende ich einen komplexeren Code für das Beispiel (ich arbeite gerne mit relativ großem Code). Hier ist die "Lichtung der Kreativität":

.

Sie können deutlich sehen, dass der Pufferwert "0" ist, d.h. dieser Indikator zeichnet eine Linie nur ab dem Moment, in dem die Handelsplattform gestartet wird. Und ich brauche nicht nur aktuelle, sondern auch historische Daten.

Ich habe die in diesem Code beschriebenen Informationen verwendet (aus dem MQ4-Tutorial):

Ich werde herausfinden, was ich brauche und ich werde...

Wenn ich dann die Kommentare entferne und logisch unterteile, erhalte ich eine "Paradeansicht":

Hier habe ich nur noch Objekte, die mit dem "Hauptcode" synthetisiert werden müssen. Nachdem ich die Fusion durchgeführt habe, erhalte ich diesen Code:

Während der Programmierung habe ich den "Haupt"-Code dekorativ verändert und einige Werte aus dem "Anhängsel"-Code entfernt. Nachdem ich den Code gestartet hatte, bemerkte ich die horizontale Linie, die auf einen Fehler in meiner Argumentation hinwies, da die technischen Indikatoren, die in dem benutzerdefinierten Indikator verwendet werden, nicht in der Lage sind, während einer langen Zeit die Werte zu liefern, die den Graphen der Funktion "y = x" bilden.

Inhaltsangabe.
Mein Name ist John (Eugene, aber auf amerikanische Art).

Ich bin 15 Jahre alt, beschäftige mich seit 5 Tagen mit dem Handel und habe das Gefühl, dass ich große Fortschritte beim Studium der Bereiche des Devisenhandels, nämlich der Indikatoranalyse und der Chartanalyse (kurz gesagt, t.a. :) ) mache.
Ich habe das Gefühl, dass der "manuelle Handel" immer weniger erfolgversprechend ist, so dass ich beschlossen habe, direkt zum "automatisierten Handel" überzugehen.

ALLE UNZULÄNGLICHEN URTEILE "AUF DIE SCHIPPE NEHMEN"! Ich möchte mehr wissen, und Ihre Kommentare werden mir dabei helfen.


Fangen Sie an, in Richtung Schleifen (for, wile, while do) zu graben, warum Sie sie überhaupt brauchen )))


Wenn Sie Werte zu historischen Daten benötigen, geht es nicht ohne Aufzählung eben dieser Daten in einer Schleife ;)

Oben haben Sie ein Beispiel mit History gegeben, das die Anzahl der Balken der History festlegt, die vom Indikator verarbeitet werden, und so sollten Sie auch vorgehen.

 


Auf dem Bild habe ich mit einem Pfeil markiert, wo der Ausgang sein soll. Ich verstehe nicht, wo das Problem liegt. Wir gehen rein und merken uns die Zeit,

Steigen Sie dann aus, wenn die Zeit länger ist als die Einstiegszeit mit einem Versatz von einer Periode und der Kurs unter dem 3-Tage-MA min liegt.

Der Code lautet wie folgt:

signal =   MA_6_t - iClose(Symbol(),Period(),0);
MA_2_t=iMA(NULL,0,3,0,MODE_EMA,PRICE_LOW,0); 
static datetime t;

if  (signal > 0.006) 
          {                                          
          Opn_S=true; 
          t=Time[0];                      
          }
if  (Bid <= MA_2_t)
      {
       if (Time[1]>t)
          {                                      
          Cls_S=true;         
          }
      }
Was meinen Sie dazu?