Fragen von einem "Dummy" - Seite 6

 
pusheax:

Einige DCs in echten Konten weisen den Symbolnamen alle möglichen Präfixe wie "." oder "FXF" zu.

Wie kann ich diese Präfixe verwenden?

Das habe ich getan:

#define DEF_SPEC "FXF"

string SymbolsTrade[] = {"AUDCAD "DEF_SPEC ... -funktioniert nicht

string SymbolsTrade[] = {"AUDCAD "+DEF_SPEC ... -auch das funktioniert so nicht

Ich erhalte nur FXF anstelle des erforderlichen AUDCADFXF.

Können Sie mir sagen, wie ich das umsetzen kann?


Erstens ist das Füllen eines Arrays mit Aufzählungen nur im globalen Bereich möglich, so dass dort kein + funktioniert, sondern nur Stringkonstanten.

Zweitens haben Sie ein statisches Array, das nicht verteilt ist, während ein dynamisches Array nicht mit einer Aufzählung gefüllt werden kann.

Am einfachsten ist es, eine Funktion zu schreiben, die ein dynamisches Array verteilt und füllt, sie kann alles tun, Definitionen zu Konstanten hinzufügen, usw.

 
Urain:

Erstens ist das Füllen eines Arrays mit einer Aufzählung nur im globalen Bereich möglich, daher funktioniert dort kein +, sondern nur Stringkonstanten.

Zweitens haben Sie kein statisches Array verteilt, und ein dynamisches Array kann nicht durch Aufzählung gefüllt werden.

Am einfachsten ist es, eine Funktion zu schreiben, die das dynamische Array verteilt und füllt, sie kann alles tun, Definitionen mit Konstanten hinzufügen, usw.

Sie können auch versuchen, alle in BC/BROKER vorhandenen Währungspaare zu durchsuchen und die darin enthaltenen zusammengesetzten Währungen zu analysieren.

Danach können Sie ein dynamisches Array von Währungspaaren erstellen und dabei alle Präfixe berücksichtigen.

Soweit ich mich erinnere, ist dies eine der universellen Optionen für MT5.

 
Urain:

Erstens ist das Füllen eines Arrays mit einer Aufzählung nur im globalen Bereich möglich, daher funktioniert dort kein +, sondern nur Stringkonstanten.

Zweitens haben Sie kein statisches Array verteilt, und ein dynamisches Array kann nicht durch Aufzählung gefüllt werden.

Am einfachsten ist es, eine Funktion zu schreiben, die das dynamische Array verteilt und füllt, sie kann alles tun, Definitionen zu Konstanten hinzufügen usw.

Kurz gesagt, wenn ich Sie richtig verstanden habe, können Sie nicht eine statische Zeichenfolge Array von zusammengesetzten Konstanten im globalen Bereich erstellen, richtig?

 
uncleVic:

Sie können den Code im Quellcode sehen. Zur Ermittlung der Divergenz werden zwei Methoden verwendet:

1. Die Methode bool CSignalMACD::ExtState(int ind) bereitet die Daten für die Suche vor;

2. Die Methode bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) sucht nach einem Marktmodell mit den angegebenen Parametern.

Wenn es hilft, hier sind Kommentare zu den Methoden auf Russisch:

Für die Methode bool CSignalMACD::ExtState(int ind)

Für die Methode bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)

Ich habe auch eine Frage - wie kann man die Divergenzvariante angeben, wenn man einen Expert Advisor erstellt, der das MACD-Signal verwendet? Im Nachschlagewerk gibt es mehrere Varianten des Signals.
 
strelec:
Ich habe auch eine Frage: Wie kann man die Divergenzvariante bei der Erstellung eines Expert Advisors mit MACD-Signal festlegen? Im Handbuch sind mehrere Varianten von Signalen aufgeführt.

Wie jeder bereits festgestellt hat, kann jedes Signal mehrere Marktmuster erkennen. Um die Verwendung von Mustern zu kontrollieren, rufen Sie die Methode PatternsUsage(int value) auf, wobei value die Bitmap der Musterverwendung ist (Bitnummer und Musternummer sind gleich). Bit ist 1 - Modell wird verwendet, Bit ist 0 - Modell wird nicht verwendet (standardmäßig sind alle Bits 1). Die Nummerierung der Modelle sowie der Bits beginnt bei 0.

Wenn Sie also nur Divergenz verwenden wollen, sollten Sie PatternsUsage(16); verwenden. Warum 16? 16 ist binär 10000b (d. h. Bit 4 ist 1, alle anderen Bits sind 0). Und nur Modell 4 "Divergenz des Oszillators und Preis".

Das einzige "aber" ist, dass Sie es "manuell" machen müssen.

Nach Abschluss des Assistenten wird der Quellcode im Editor geöffnet. Finden Sie eine Stelle wie diese im Editor:

//--- Creating filter CSignalMACD
   CSignalMACD *filter0=new CSignalMACD;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PeriodFast(Signal_MACD_PeriodFast);
   filter0.PeriodSlow(Signal_MACD_PeriodSlow);
   filter0.PeriodSignal(Signal_MACD_PeriodSignal);
   filter0.Applied(Signal_MACD_Applied);
   filter0.Weight(Signal_MACD_Weight);

und fügen Sie eine Zeile hinzu

filter0.PatternsUsage(16);

werden Sie es bekommen:

//--- Creating filter CSignalMACD
   CSignalMACD *filter0=new CSignalMACD;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.PatternsUsage(16);
   filter0.PeriodFast(Signal_MACD_PeriodFast);
   filter0.PeriodSlow(Signal_MACD_PeriodSlow);
   filter0.PeriodSignal(Signal_MACD_PeriodSignal);
   filter0.Applied(Signal_MACD_Applied);
   filter0.Weight(Signal_MACD_Weight);

Das ist alles für den Moment. Wenn Sie Fragen haben, können Sie mich gerne kontaktieren.

 
uncleVic:

Wie jeder bereits festgestellt hat, kann jedes Signal mehrere Marktmuster erkennen. Um die Verwendung von Mustern zu kontrollieren, rufen Sie die Methode PatternsUsage(int value) auf, wobei value eine Bitmap der Musterverwendung ist (die Bitnummer und die Musternummer sind identisch). Bit ist 1 - Modell wird verwendet, Bit ist 0 - Modell wird nicht verwendet (standardmäßig sind alle Bits 1). Sowohl die Modellnummerierung als auch die Bits beginnen bei 0.

Wenn Sie also nur die Divergenz verwenden wollen, müssen Sie PatternsUsage(16); verwenden. Warum 16? 16 ist 10000b im Binärformat (d.h. Bit 4 ist 1, die anderen Bits sind 0). Und nur Modell 4 "Divergenz von Oszillator und Preis".

Das einzige "aber" ist, dass Sie es "manuell" machen müssen.

Nach Abschluss des Assistenten wird der Quellcode im Editor geöffnet. Finden Sie eine Stelle wie diese im Editor:

und fügen Sie eine Zeile hinzu

filter0.PatternsUsage(16);

Sie bekommen es:

Das ist alles für den Moment. Wenn Sie Fragen haben, können Sie mich gerne kontaktieren.

Ich danke Ihnen. Ich hab's. Und schon gibt es weitere Fragen. Welcher zeitliche Abstand zwischen benachbarten Spitzen (Tälern) wird bei dieser Variante der Divergenz berücksichtigt?
 
strelec:
Ich danke Ihnen. Es hat funktioniert. Und schon gibt es weitere Fragen. Welcher zeitliche Abstand zwischen benachbarten Höchstständen (Tiefstständen) wird bei dieser Variante der Divergenz berücksichtigt?
Das Intervall wird nicht ausgewertet.
 

Ich habe einen Experten, mit dem ich versuche, die Ereignisse zu verarbeiten.

string event[10]=
{
"CHARTEVENT_KEYDOWN - событие нажатия клавиатуры, когда окно графика находится в фокусе",
"CHARTEVENT_OBJECT_CREATE — событие создания графического объекта",
"CHARTEVENT_OBJECT_CHANGE — событие изменения свойств объекта через диалог свойств",
"CHARTEVENT_OBJECT_DELETE — событие удаления графического объекта",
"CHARTEVENT_CLICK — cобытие щелчка мыши графике",
"CHARTEVENT_OBJECT_CLICK — событие щелчка мыши на графическом объекте, принадлежащего графику",
"CHARTEVENT_OBJECT_DRAG — событие перемещения графического объекта при помощи мыши",
"CHARTEVENT_OBJECT_ENDEDIT — событие окончания редактирования текста в поле ввода графического объекта LabelEdit",
"CHARTEVENT_CHART_CHANGE  — событие изменения графика",
"CHARTEVENT_CUSTOM+n — идентификатор пользовательского события, где n находится в диапазоне от 0 до 65535"
};
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   Print("id=(",id,") -- ",event[id],"  lparam=",lparam,"   dparam=",dparam,"   sparam=", sparam);
  }
//+------------------------------------------------------------------+

Ich erhalte Ereignisse, die nicht mit Aktionen übereinstimmen.

Entspricht genau einem Klick auf das Diagramm und einem Klick auf eine Schaltfläche

Ein umstrittenes Ereignis id=9(CHARTEVENT_CUSTOM), das erzeugt wird, wenn z.B. das Diagramm verschoben wird und es etwa 10 ähnliche Ereignisse gibt.

Das EreignisCHARTEVENT_OBJECT_ENDEDIT wurde nicht geprüft.

Alles andere ist unklar. Entweder stimmt die Beschreibung nicht mit der Ereignisnummer überein oder das Ereignis zum Anlegen eines Objekts wird beim manuellen Anlegen eines Objekts falsch erzeugt.

Bitte helfen Sie allgemein.

 
kPVT:

Ich habe einen Experten, mit dem ich versuche, die Ereignisse zu verarbeiten.

Ich erhalte Ereignisse, die nicht mit Aktionen übereinstimmen.

Entspricht genau einem Klick auf das Diagramm und einem Klick auf eine Schaltfläche

Ein umstrittenes Ereignis id=9(CHARTEVENT_CUSTOM), das erzeugt wird, wenn z.B. das Diagramm verschoben wird und es etwa 10 ähnliche Ereignisse gibt.

Das EreignisCHARTEVENT_OBJECT_ENDEDIT wurde nicht geprüft.

Bei allen anderen ist nicht alles klar. Entweder stimmt die Beschreibung nicht mit der Ereignisnummer überein oder das Ereignis zum Erstellen eines Objekts wird beim manuellen Erstellen des Objekts falsch generiert.

Alles in allem: Bitte helfen Sie.

Sie ordnen zunächst numerische Korrespondenzen zu bereits zugeordneten numerischen Konstanten CHARTEVENT_XXXXXXXX...

Das Problem ist folgendes:

event[id]

müssen Sie:

//--- нажатие мышкой на графическом объекте
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
     }
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
 
kPVT:

Der Rest ist unklar. Entweder stimmt die Beschreibung nicht mit der Ereignisnummer überein, oder das Ereignis z.B. der Objekterstellung wird nicht korrekt erzeugt, wenn das Objekt manuell erstellt wird.

Leider ist Ihre Frage nicht klar. Was genau läuft schief?