Fragen von einem "Dummy" - Seite 132

 
Yedelkin:

Wenn Sie an der Berechnung der Daten eines anderen Indikators interessiert sind, können Sie dies auf folgende Weise tun. Zuerst erstellen wir einen anderen Indikator mit seiner eigenen Methode der Datenberechnung, und dann nehmen wir das Handle dieses Indikators(MQL5 Reference Guide / Technical Indicators / iCustom ) und dieses Handle wird im neuen Indikator verwendet. Sehen Sie sich das Beispiel genau an. Wenn Sie Fragen zum Beispiel haben

Ich habe Fragen, die ich immer noch nicht verstehe.
Nehmen wir die Datei Custom Moving Average.mq5 als Grundlage.

das neue Glättungsverfahren MODE_MYMA hinzufügen - kein Problem.

die Frage ist, wie die Daten zu füttern. durch die i-cast von einem anderen Indikator? ok. nehmen wir einen beliebigen Indikator von der zweiten Form als Beispiel (wenn der Indikator von der ersten Form gemacht wird... ich weiß nicht, wie man die High-Low nehmen... so bedeutet es nur die zweite Form?)

Ok, lasst uns erklären

int newHandl;

Definieren Sie es in der onInit (parabolisch, d.h. was auch immer, die Hauptsache ist der 2. Typ, richtig? Ich weiß, wie ich meine implementieren kann)

newHandl=iCustom(_Symbol,0, "ParabolicSAR.mq5",0.02,0.2);

und dann? in onCalculate geben wir ihn anstelle des Standardpreises ein?

CalculateEMA(rates_total,prev_calculated,begin,newHandl);???

schwört es. oder was? bitte erklären, ich verstehe nicht... (((((

ja, ich verwende immer noch mcl4-Vorlagen. dort ist es einfach - Schleife, Daten (beliebige!) nehmen, glätten, ausgeben.
Aber hier.... Ich weiß nicht, woran ich mich festhalten soll...

 
GameOver:

(wenn der Indikator durch die erste Form gemacht wird... Ich habe nicht verstanden, woher der Hoch-Tief-Wert kommen soll... also nur durch die zweite Form?)

Ja, das mit dem Hoch-Tief war nur ein Beispiel, wie man selbst mit Artikeln umgehen kann. Für die erste Form kann man die Aufgabe übernehmen, die close[i]/2-Linie [oder sqrt(close[i]/2 )] zu zeichnen . Im Allgemeinen können Sie auch mit einem einzigen Array eine Reihe von Variationen entwickeln.

GameOver:

OK, lasst uns erklären, dass

int newHandl;

in onInit definieren (als Beispiel - parabolisch. was auch immer, die Hauptsache ist der 2. Typ, nicht wahr? wie Sie Ihre eigene implementieren ist ungefähr klar)

newHandl=iCustom(_Symbol,0, "ParabolicSAR.mq5",0.02,0.2);

Das ist in Ordnung. Ich werde es jetzt beenden.

Wenn der Indikator-Handle korrekt ist, bedeutet dies, dass wir die Puffer dieses Indikators ansprechen können. Schauen Sie sich noch einmal das Beispiel aus MQL5 Reference / Technical Indicators / iCustom an. Es gibt eine Zeile:

//--- скопируем значения индикатора Custom Moving Average в наш индикаторный буфер
   int copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer);

Lesen Sie nun MQL5 Referenz / Zugriff auf Zeitreihen und Indikatoren / CopyBuffer (...Nochmals: viele Dinge werden klar, wenn man die Beispiele Zeile für Zeile analysiert).

Versuchen Sie, die Daten eines beliebigen, von Ihnen ausgewählten Indikatorpuffers zu empfangen. Ich habe kein Terminal, aber in Parabolic können Sie sehen, welche Puffer berechnet werden und wie sie nummeriert sind.

Документация по MQL5: Технические индикаторы
Документация по MQL5: Технические индикаторы
  • www.mql5.com
Технические индикаторы - Документация по MQL5
 

Frage zur Beschreibung der Funktionen ArrayIsSeries() und ArrayGetAsSeries().

Es gibt einen solchen Satz im Referenzhandbuch:"Die an die Funktion übergebenen Arrays spiegeln die Preisdaten wider, d.h. diese Arrays haben das Vorzeichen der Zeitreihe und die Funktion ArrayIsSeries() gibt true zurück, wenn sie diese Arrays überprüft . Dennoch sollte die Indizierungsrichtung in jedem Fall nur mit der Funktion ArrayGetAsSeries()" überprüft werden.

Aus einer wörtlichen Lesung folgt, dass selbst wenn die Funktion ArrayIsSeries() true zurückgibt (d.h. bestätigt, dass das überprüfte Array ein Zeitreihen-Array ist), die Indizierungsrichtung trotzdem nur durch die Funktion ArrayGetAsSeries() überprüft werden sollte. Dann verstehe ich den Grund für die Einführung der Funktion ArrayIsSeries() nicht, wenn deren Ergebnisse ohnehin zusätzlich überprüft werden müssen. Was soll das bringen? Ist es möglich, dass das Array eine Zeitreihe ist, aber die Indizierungsrichtung nicht die gleiche ist wie die einer Zeitreihe (das AS_SERIES-Flag wird nicht gesetzt)?

 


Bei der Portierung von Mql4 nach Mql5 ist ein Lot-Fehler aufgetreten:

'Lot' - Konstante kann nicht geändert werden

input double Lot = 0.1; // Lot

if (MartingaleType ==7)
 {
 if (Counter1==1)
 Lot=Lots() ;
}

Wie kann man das korrigieren?


 
Dark.Angel:


Bei der Portierung von Mql4 nach Mql5 ist ein Lot-Fehler aufgetreten:

'Lot' - Konstante kann nicht geändert werden

Wie kann man das beheben?

Das können Sie nicht. Das ist kein Fehler, sondern eine Funktion. :)

In mql5 sind Eingabevariablen nicht änderbar (const).

Nehmen Sie eine einfache Entkopplung vor:

input int x=5;
input double StartLot = 0.01;

int X;
double Lot;
...
...
void OnInit()
  {
   ....
    X=x;
    Lot=StartLot;
   .......
  }
.....
void OnStart()
  {
   ....
   Lot=Lots();
  }
 

ImMQL5 Handbuch / Array Operationen / ArraySetAsSeries Abschnitt gibt es ein Beispiel, wenn die Funktion ArraySetAsSeries() auf das const datetime Array &time[] bei jedem Tick angewendet wird:

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[])
  {
//---  будем хранить время открытия текущего нулевого бара
   static datetime currentBarTimeOpen=0;
//--- перевернем доступ к массиву time[] - сделаем как в таймсерии
   ArraySetAsSeries(time,true);
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Ist dies, was jeder tut (Flips das Array auf jedem Tick), um mit dem Array als eine Zeitreihe zu arbeiten?

Eine weitere Frage: können Arrays, die von OnCalculate() verwendet werden, ihre Indexierungsrichtung beliebig ändern? Oder genügt es, diese Richtung einmal zu überprüfen?

 


Bei der Portierung von Mql4 nach Mql5 wird ein Fehler SymbolInfoDouble:
'SymbolInfoDouble' - keine der Überladungen kann auf den Funktionsaufruf angewendet werden

на Mql4:
double a = balance / MarketInfo (Symbol (), MODE_MARGINREQUIRED) - 0.2 ; 

на Mql5:
double a = balance / SymbolInfoDouble(Symbol(), 0) - 0.2 ;

Wie kann ich sie korrigieren?
 
Dark.Angel:


Bei der Portierung von Mql4 nach Mql5 ist der Fehler SymbolInfoDouble aufgetreten:
SymbolInfoDouble" - keine der Überladungen kann auf den Funktionsaufruf angewendet werden


Wie kann ich sie korrigieren?

Warum steht am Ende eine 0?

https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_double

Außerdem ist zu prüfen, ob eine Division durch 0 möglich ist.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Die Ergebnisse des Strategietesters werden in Diagrammen angezeigt:


Können Sie mir sagen, wo ich herausfinden kann, was die verschiedenen Farben auf den Karten bedeuten?

 
pusheax:

Die Ergebnisse des Strategietesters werden in Diagrammen angezeigt:

Können Sie mir sagen, wo ich herausfinden kann, was die verschiedenen Farben auf den Karten bedeuten?

Die blauen sind Gewinne, die roten sind Verluste. Aber der obere linke ist nur fragwürdig...
Grund der Beschwerde: