Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 696

 
Northwest:

1. Legen Sie alles zurück und quälen Sie den Computer nicht .

Es tut mir leid, aber das geht nicht, der Indikator muss von links nach rechts zählen.

Ich störe mich nicht daran, ich benutze es für den vorgesehenen Zweck.

2. iBandsOnArray, iStdDevOnArray berechnet anhand der im Array gespeicherten Daten

Ja, sie werden anhand der Daten aus dem Array bbMacd[] berechnet, was nun?

Das Array wird in einer Schleife gefüllt.

In einer oder in der ersten?

Wollen Sie damit sagen, dass Sie, um ein Array zu füllen, eine persönliche Schleife benötigen, in der diese

Array gefüllt ist und keine weiteren Operationen durchgeführt werden können?


Für mich ist es wichtig herauszufinden, warum sich der Indikator verlangsamt und wie man die Stellen berechnet, an denen dies geschieht.

Ich habe noch mehr Fragen, aber keine Antworten.

Leider haben Sie keine Anhaltspunkte geliefert.

Wenn etwas mit einem Array aufgebaut wird, sollte es mit einem bereits vorhandenen Array aufgebaut werden. Dies ist ein Zyklus der Vorbereitung des Feldes und der zweite Zyklus des Zeichnens eines Indikators durch dieses Feld. Dies ist ein allgemeiner Fall. Es gibt noch einige spezifischere Fälle, die jedoch gesondert betrachtet werden sollten - zum Beispiel können wir Funktionen erstellen, die Werte aus nur einem berechneten Balken zurückgeben:

//+------------------------------------------------------------------+
//| BandsOnArray                                                     |
//+------------------------------------------------------------------+
double BandsOnArray(const int rates_total,const int index,const int period,const double deviation_bb,const double &array[],const int line,const bool as_series=true)
  {
//--- check position
   bool check_index=(as_series ? index<=rates_total-period-1 : index>=period-1);
   if(period<1 || !check_index)
      return 0;
   //--- calculate StdDev
   double dev=StdDevOnArray(rates_total,index,period,array);
   //--- base line
   double mid=0;              
   for(int i=0; i<period; i++)
      mid+=array[index+i];    
   mid/=period;               
   //--- upper line
   double top=mid+dev*deviation_bb;
   //--- lower line
   double btm=mid-dev*deviation_bb;
   return(line==UPPER_BAND ? top : line==LOWER_BAND ? btm : mid);
  }  
//+------------------------------------------------------------------+
//| StdDevOnArray                                                    |
//+------------------------------------------------------------------+
double StdDevOnArray(const int rates_total,const int index,const int period,const double &array[],const bool as_series=true)
  {
//--- check position
   bool check_index=(as_series ? index<=rates_total-period-1 : index>=period-1);
   if(period<1 || !check_index)
      return 0;
//--- calculate value
   double avg=0;              
   for(int i=0; i<period; i++)
      avg+=array[index+i];    
   avg/=period;               
   double sd=0;
   for(int i=0; i<period; i++)
      sd+=(avg-array[index+i])*(avg-array[index+i]);
   return(sqrt(sd/period));
  }  
//+------------------------------------------------------------------+

Sie erfordern aber auch ein bereits vorbereitetes Datenarray als Eingabe, da StdDevOnArray und BandsOnArray die einfache Glättung verwenden, für die die gefüllten Daten gleich dem Wert der Periodenglättung benötigt werden.

 

Forum für Handel, automatisierte Handelssysteme und Strategietests

Alle Fragen für Neulinge auf MQL4, Hilfe und Diskussion über Algorithmen und Codes

Artyom Trishkin, 2018.11.18 20:21

PlotIndexSetInteger(0,PLOT_ARROW,140);

Sie müssen jedoch eine Anzahl von Puffern anlegen, die der Anzahl der Wochen entspricht. Und für jeden Puffer müssen Sie einen Pfeilcode von 140 bis 149 angeben - 1,2,3,4,5,6,7,8,9,10 - reichen zehn Wochen für ein Jahr? Das sind nur 70 Tage. Oder wie haben Sie es sich gewünscht?


Ist es möglich, SetIndexArrow über Case zu überschreiben?

Oder zumindest die Zahlen in einem Histogramm anzeigen?


Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Alle MQL4 Anfänger Fragen, Hilfe und Diskussion über Algorithmen und Codes

Artyom Trishkin, 2018.11.18 20:02

Der Puffer wird mit dem Wert einer Stunde gefüllt. Und wenn die Stunde Null ist, wird das Histogramm nicht gezeichnet. Wir müssen also prüfen, ob die Stunde gleich Null ist (wir haben in den Einstellungen festgelegt, dass nach der Stunde Null gesucht wird), und wenn sie gleich Null ist, müssen wir 0,1 anstelle des Stundenwerts (Null) in den Puffer eingeben - um die Histogrammspalte anzuzeigen. Dadurch wird im Datenfenster ein Wert von 0 anstelle von 0,1 angezeigt, da das Kennzeichen Stellen auf Null gesetzt ist.


Ich sehe es jetzt, danke.

 
psyman:

Kann SetIndexArrow durch einen Fall überschrieben werden?

Oder zumindest die Zahlen in einem Balkendiagramm anzeigen?



Ich sehe es jetzt, danke.

Es wirkt auf den gesamten Puffer auf einmal.

Sie müssen ein Symbol für eine Wochennummer in die gefundene Leiste einfügen, und dort sollte die Anzahl der Wochen in einem Jahr stehen. Die Zahlenpfeile fehlen in Wingdings eindeutig.

Es ist möglich, mit Objekttexten zu arbeiten und die Balken mit dem Wert der Wochennummer zu markieren, aber das Symbol für den Puffer auf 32 zu setzen - ein leeres Zeichen. Der Wert steht auf dem Balken, wird aber nicht angezeigt. Dann kann der Wert die Nummer der Woche im Jahr sein, und in das Objekt schreiben, was Sie wollen, und das Objekt wird auf der gefundenen Bar angezeigt werden.

 

Forum für Handel, automatisierte Handelssysteme und Strategietests

Alle Fragen für Anfänger auf MQL4, Hilfe und Diskussion über Algorithmen und Codes

Artyom Trishkin, 2018.11.19 10:50 Uhr

Es wirkt auf den gesamten Puffer auf einmal.

Sie müssen ein Wochensymbol auf die gefundene Leiste setzen, und dort sollte die Anzahl der Wochen in einem Jahr stehen. Die Zahlenpfeile fehlen in Wingdings eindeutig.

Sie können aus, indem Sie Objekt-Texte, und markieren Sie die Bars mit den Werten der Zahl der Woche, aber das Symbol für den Puffer zu setzen 32 - ein leeres Zeichen. Der Wert steht auf dem Balken, wird aber nicht angezeigt. Dann kann der Wert die Nummer der Woche im Jahr sein, und in das Objekt schreiben, was Sie wollen, und das Objekt wird auf der gefundenen Bar angezeigt werden.


Ich habe über den Wochentag geschrieben - Mo, Di, Mi, nicht über die Zahl. Sie brauchen nur 5 verschiedene Markierungen auf der Karte.

 
psyman:

Ich habe über den Wochentag geschrieben - Mo, Di, Mi, nicht über die Zahl. Sie brauchen nur fünf verschiedene Markierungen auf der Karte.

Dann brauchen Sie fünf Puffer und weisen jedem eine andere Pfeilnummer zu - von 140 bis 144.

 
Artyom Trishkin:

Wenn etwas mit einem Array aufgebaut wird, sollte es mit einem bereits vorbereiteten Array aufgebaut werden. Dies ist ein Zyklus der Vorbereitung des Feldes und der zweite Zyklus des Zeichnens des Indikators durch dieses Feld. Dies ist ein allgemeiner Fall. Es gibt noch einige spezifischere Fälle, die jedoch gesondert betrachtet werden sollten - zum Beispiel können wir Funktionen erstellen, die Werte aus nur einem berechneten Balken zurückgeben:

Sie erfordern aber auch ein bereits vorbereitetes Datenarray als Eingabe, da StdDevOnArray und BandsOnArray die einfache Glättung verwenden, für die die gefüllten Daten gleich dem Wert der Periodenglättung benötigt werden.

Ich danke Ihnen für die Klarstellung der Situation.
 

hallo

Wie erstelle ich ein Pop-up-Fenster mit Schaltflächen zur manuellen Bestätigung/Abbruch einer Transaktion?

 
Andrey Sokolov:

hallo

Wie erstelle ich ein Pop-up-Fenster mit Schaltflächen zur manuellen Bestätigung/Abbruch einer Transaktion?

MessageBox()
 
Artyom Trishkin:
MessageBox()

Danke

 

Hallo zusammen.

Wie erhalte ich den Prozentsatz des maximalen Drawdowns wie in der Testversion?

Hier ist der Code:

double  MaxPeak,DD, MaxDD, DD2, MaxDD2;
--------------------------------------
--------------------------------------
это вывод:

 SM("Maximal drawdown        : " + DoubleToString(MaxDrawdown_Money(), 2)+ " (" + DoubleToString(MaxDrawdown_Protsent(), 2) +" %)");

-------------------------------------
-------------------------------------

//--------------------Рассчет % относительной просадки----------
double MaxDrawdown_Protsent()
{
if (AccountEquity() > MaxPeak)
{
MaxPeak = AccountEquity();
}
if (AccountEquity() < MaxPeak)
{
DD2 = NormalizeDouble((MaxPeak - AccountEquity())/MaxPeak*100,2);
}
if (MaxDD2< DD2)
{
MaxDD2 = DD2;
}
return (MaxDD2);
}
//---------------------Рассчет суммы максимальной просадки--------
double MaxDrawdown_Money()
{
if (AccountEquity() > MaxPeak)
{
MaxPeak = AccountEquity();
}
if (AccountEquity() < MaxPeak)
{
DD = NormalizeDouble(MaxPeak - AccountEquity(),2);
}
if (MaxDD< DD)
{
MaxDD = DD;
}
return (MaxDD);
}

Der Betrag des maximalen Drawdowns ist derselbe wie im Testgerät, der Prozentsatz des relativen Drawdowns ist ebenfalls derselbe wie im Testgerät.

Wie erhalte ich den Prozentsatz des maximalen Drawdowns wie in der Testversion ?

Grund der Beschwerde: