Ich habe nie Programmieren studiert, aber ich möchte einen EA schreiben - Seite 8

 

Also, was ist los, liebe Programmierer?
Ich bin der Verfasser dieses Threads und bitte weiterhin um Rat.


also in der in der Kopfzeile deklarierten Struktur

und jetzt kommt der interessante Teil: WAS IST DAS?
Ich habe eine Bedingung in OnTick definiert, die besagt, dass, wenn es keine offenen Aufträge gibt
dann:
wenn ein schneller Schwung größer ist als ein langsamer Schwung,
dann: einen Auftrag eröffnen



Frage: Warum wird ein Auftrag bei jedem Tick geöffnet?

 
Sergey Lobzankin:

Also, was ist los, liebe Programmierer?
Ich bin der Autor dieses Threads und bitte immer wieder um Rat.


Also habe ich die Struktur in der Kopfzeile deklariert

Und jetzt kommt das Interessante: WAS IST DAS?
Ich habe eine Bedingung in OnTick definiert, die besagt, dass, wenn es keine offenen Aufträge gibt
dann:
wenn ein schneller Schwung größer ist als ein langsamer Schwung,
dann: einen Auftrag eröffnen



Frage: Warum wird ein Auftrag bei jedem Tick geöffnet?

Das bedeutet, dass bei jedem Ticken die Bedingung erfüllt ist.

Wenn die Bedingung ein MA-Durchgang sein sollte, dann war er auf dem ersten Balken < weniger und auf dem Null-Balken wurde er > mehr. Aber in Ihrer Bedingung auf dem Nullbalken > mehr und auf dem ersten Balken > mehr.

 

https://code.org/

https://scratch.mit.edu/

Wenn Sie das Programmieren (es ist wirklich ein Denkstil, keine Sprache) in MQL lernen wollen, ist das für Sie und Ihre Umgebung ein echtes Problem.

Klicken Sie auf die Links - alles ist einfach, auf Schulniveau (an manchen Stellen sogar auf Grundschulniveau), aber zumindest eine Einführung in Algorithmen und deren Aufzeichnung. Andernfalls müssen Sie jedes Mal, wenn Sie niesen, das Forum kontaktieren und auf eine Antwort warten, und das ist Zeitverschwendung, und Zeit ist Geld.

PS/ und ich rate jedem, es zu lesen, Scratch ist ein Meisterwerk von innen - der Großvater der modernen Programmierung.

Code.org: Любой может научиться
Code.org: Любой может научиться
  • code.org
Каждый студент в каждой школе заслуживает возможность изучения компьютерных наук.
 
Sergey Lobzankin:

Also, was ist los, liebe Programmierer?
Ich bin der Autor des Themas und bitte weiterhin um Rat.


so wird in der Kopfzeile die Struktur

Und jetzt kommt das Interessante: WAS IST DAS?
Ich habe eine Bedingung in OnTick definiert, die besagt, dass, wenn keine offenen Aufträge vorhanden sind
dann:
wenn ein schneller Schwung größer ist als ein langsamer Schwung,
dann: einen Auftrag eröffnen.



Frage: Warum wird ein Auftrag bei jedem Tick geöffnet?

Also, Genosse Autor des Themas?

Ich habe Sie vor einem Monat darauf hingewiesen, aber Sie hören nicht einmal zu:

Dies ist das Forum für Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien.

Ich habe noch nie programmiert, aber ich möchte einen Expert Advisor schreiben.

Alexey Volchanskiy, 2018.04.10 17:47

Links neben der Schaltfläche mit den Buchstaben Aa befindet sich die Schaltfläche "Code". Wenn Sie nicht wissen, wie man es benutzt, können Sie es zum Beispiel benutzen, um Ihren eigenen Code zu veröffentlichen ).


Dies ist ein Forum für Handel, automatisierte Handelssysteme und Strategietests.

Ich habe noch nie programmiert, aber ich möchte einen Expert Advisor schreiben.

Konstantin Nikitin, 2018.04.10 21:18

Nun, Sie haben dort nichts besonders Natürliches. Also die beste Option. Posten Sie es hier, aber nur über

Jemand wird etwas Nützliches vorschlagen.


Und Sie fügen immer noch Code mit einem Bild ein.

 
Hallo, ich stehe vor folgendem Problem. Der EA benötigt die Daten des gleitenden Durchschnitts am Nullpunkt und am ersten Balken zur Analyse der Situation und für weitere Berechnungen.
Die Funktion OnCalculate wurde im Grunde genommen erfunden, um einen Indikator zu schreiben. Ich habe diese Funktion separat in meinem EA, aber ich kann nicht herausfinden, wie man es von OnTick zugreifen.
 
Sergey Lobzankin:
Hallo, ich bin auf ein solches Problem gestoßen. Der Expert Advisor benötigt die Daten des gleitenden Durchschnitts am Nullpunkt und am ersten Balken zur Analyse der Situation und für weitere Berechnungen.
Die Funktion OnCalculate wurde im Grunde erfunden, um einen Indikator zu schreiben. Ich habe diese Funktion in einem EA separat, aber ich kann nicht geben eine Idee, wie man es von OnTick zugreifen

Sie brauchen nicht einmal zu versuchen, OnCalculate aus einem Indikator in einen EA zu übernehmen! Sie müssen sich nur auf den Indikator im EA beziehen (mit dem Indikator-Handle) und die Daten abrufen.

Beispiel für die Arbeit mit iMA und iStdDev imiMA-Code iStdDev- aus OnTick extrahierter Code, der Daten von iMA-Indikatoren erhält

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;
 
Vladimir Karputov:

Sie brauchen nicht einmal zu versuchen, OnCalculate vom Indikator in den EA zu übernehmen! Sie müssen sich nur auf den Indikator im Expert Advisor (mit dem Indikator-Handle) beziehen und die Daten abrufen.

Beispiel für die Arbeit mit iMA und iStdDev imiMA-Code iStdDev- Code-Extrakt aus OnTick, Abrufen von Daten aus iMA-Indikatoren

ich vermute, du hast verdammt recht))))
jetzt werde ich versuchen, mit Arrays zu spielen über ...Array...

 

Und hier ist die andere Sache...
Ich habe die Griffe im Hut des Experten richtig

extern int    zazor      = 0;
extern double Lots       = 0.1;
extern int    TrailingStop = 15;
extern int    TrailingStep = 2;
extern int    Magic      = 123;
extern int    Slippage   = 5;
int Digits;

int timeprev=0;

int    ticket;
double price,TP,SL,lastlot;
string;

int ima1_handle          = iMA (Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE);               //хендл
int ima2_handle          = iMA (Symbol(),0,64,0,MODE_EMA,PRICE_CLOSE);               //хендл
int Stoch_handle         = iStochastic (Symbol(),0,20,15,15,MODE_EMA,STO_CLOSECLOSE);//хендл
int ATR_handle           = iATR        (Symbol(),0,21);                              //хендл
double ima1_massiv [2];                                                              //статический массив для быстрой машки 

und in den Foren, wer es tut... Jeder macht es anders, manche in oninit, manche in ontik,
Der Punkt ist, dass ich in meinem Layout Daten in ein Array kopiere und die Anzahl der zu kopierenden Elemente ermittle

void OnTick()
  { 
    int ima_count1 = CopyBuffer(ima1_handle,0,1,2,ima1_massiv);    //скопировал данные из 2х буферов быстрой машки
    string str_ima1 = IntegerToString(ima_count1);                 //отладочная
    printf("мой первый хендл = "  + str_ima1);                     //отладочная
   }
P.S., übrigens, der Tester sah alle Indikatoren, deren Handles im Expert Advisor Header sind und zeichnete alles auf dem Visualizer Chart
 

Hier ist ein Artikel, der deutlich erklärt, wie man den Zugang zu den Indikatordaten implementiert
https://www.mql5.com/ru/articles/43

Aber Jungs, die Daten in ein Array kopiert wird, kein Zweifel, aber ich brauche, um bestimmte Zahlen zu erhalten, das heißt, wenn die Welle auf dem letzten Tick des aktuellen bar 1.32456 ist, dann brauche ich, um diese Zahl in das Protokoll zu erhalten (um sicherzustellen, dass die Zahl tatsächlich erhalten wird), ich brauche, um diese spezifischen Informationen in der Double-Typ zu nehmen,

die Anzahl der Punkte vom Typ int zwischen zwei verschiedenen Maischen zu berechnen . wie erhalte ich diesen Wert?


Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • www.mql5.com
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
 
Sergey Lobzankin:

Hier ist ein Artikel, der deutlich erklärt, wie man den Zugang zu den Indikatordaten implementiert
https://www.mql5.com/ru/articles/43

Aber Jungs, die Daten in ein Array kopiert wird, kein Zweifel, aber ich brauche, um bestimmte Zahlen, d.h. zu erhalten, wenn die Welle auf der letzten Tick des aktuellen bar 1,32456 ist, ich brauche, um diese Zahl in das Protokoll zu erhalten (um sicherzustellen, dass die Zahl tatsächlich erhalten wird), ich brauche, um diese spezifische Informationen in der Double-Typ zu nehmen,

um die Anzahl der int-Punkte zwischen zwei verschiedenen Mash-ups zu berechnen . Wie erhalten Sie diesen Wert?


Schauen Sie überhaupt hin und lesen Sie, was man Ihnen sagt? Ich habe Ihnen in Beitrag ein Beispiel gegeben. Es werden lediglich Daten von zwei iMAs abgerufen:

   double ma_fast[],ma_normal[],stddev[];
   MqlRates rates[];
   ArraySetAsSeries(ma_fast,true);
   ArraySetAsSeries(ma_normal,true);
   ArraySetAsSeries(stddev,true);
   ArraySetAsSeries(rates,true);
   int buffer=0,start_pos=0,count=3;
   if(!iGetArray(handle_iMA_Fast,buffer,start_pos,count,ma_fast) || 
      !iGetArray(handle_iMA_Normal,buffer,start_pos,count,ma_normal) || 
      !iGetArray(handle_iStdDev,buffer,start_pos,count,stddev) || 
      CopyRates(m_symbol.Name(),Period(),start_pos,count,rates)!=count)
     {
      PrevBars=0;
      return;
     }
//---
   if(ma_fast[0]>ma_normal[0])
      if(rates[1].close>rates[1].open)
         if(rates[1].close>ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_buy=true;
   if(ma_fast[0]<ma_normal[0])
      if(rates[1].close<rates[1].open)
         if(rates[1].close<ma_normal[0])
            if(stddev[0]>stddev[1])
               m_need_open_sell=true;

Es gibt zwei iMA-Indikatoren - "Schnell" und "Normal". Die Daten dieser beiden Indikatoren werden in den Arraysma_fast bzw.ma_normal erfasst. Wir fordern dieZählung von #start_pos vom Balken an.

Und dann greifen wir auf die erhaltenen Daten zu (in diesem Beispiel greifen wir auf die Daten des Taktes #0 zu)