Fragen von einem "Dummy" - Seite 78

 
Interesting:

Ich denke, es wäre einfacher, den Expert Advisor neu zu erstellen oder ihn mit einer Datei zu bearbeiten.

Ich denke, es wäre einfacher, vollständig zu beschreiben, was Sie von dem Expert Advisor erwarten, und den gesamten von VISARD erstellten Code bereitzustellen.

Ich brauche zum Beispiel einen Expert Advisor, der Trades eröffnet, wenn der Preis eines Envelopes-Indikators überschritten wird. Das habe ich bekommen:

//+------------------------------------------------------------------+
//|                                                    envelopes.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalEnvelopes.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string             Expert_Title              ="envelopes"; // Document name
ulong                    Expert_MagicNumber        =28572;       // 
bool                     Expert_EveryTick          =false;       // 
//--- inputs for main signal
input int                Signal_ThresholdOpen      =10;          // Signal threshold value to open [0...100]
input int                Signal_ThresholdClose     =10;          // Signal threshold value to close [0...100]
input double             Signal_PriceLevel         =0.0;         // Price level to execute a deal
input double             Signal_StopLevel          =50.0;        // Stop Loss level (in points)
input double             Signal_TakeLevel          =50.0;        // Take Profit level (in points)
input int                Signal_Expiration         =4;           // Expiration of pending orders (in bars)
input int                Signal_Envelopes_PeriodMA =240;         // Envelopes(240,0,MODE_LWMA,...) Period of averaging
input int                Signal_Envelopes_Shift    =0;           // Envelopes(240,0,MODE_LWMA,...) Time shift
input ENUM_MA_METHOD     Signal_Envelopes_Method   =MODE_LWMA;   // Envelopes(240,0,MODE_LWMA,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_Envelopes_Applied  =PRICE_CLOSE; // Envelopes(240,0,MODE_LWMA,...) Prices series
input double             Signal_Envelopes_Deviation=0.15;        // Envelopes(240,0,MODE_LWMA,...) Deviation
input double             Signal_Envelopes_Weight   =1.0;         // Envelopes(240,0,MODE_LWMA,...) Weight [0...1.0]
//--- inputs for money
input double             Money_FixLot_Percent      =10.0;        // Percent
input double             Money_FixLot_Lots         =0.01;        // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),PERIOD_H4,Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(-1);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(-2);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalEnvelopes
   CSignalEnvelopes *filter0=new CSignalEnvelopes;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(-3);
     }
   signal.AddFilter(filter0);
   filter0.PatternsUsage(2);
//--- Set filter parameters
   filter0.PeriodMA(Signal_Envelopes_PeriodMA);
   filter0.Shift(Signal_Envelopes_Shift);
   filter0.Method(Signal_Envelopes_Method);
   filter0.Applied(Signal_Envelopes_Applied);
   filter0.Deviation(Signal_Envelopes_Deviation);
   filter0.Weight(Signal_Envelopes_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(-4);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(-5);
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedLot *money=new CMoneyFixedLot;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(-6);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(-7);
     }
//--- Set money parameters
   money.Percent(Money_FixLot_Percent);
   money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(-8);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(-9);
     }
//--- ok
   return(0);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+
 
Genossen Entwickler, bitte erklärt mir, was ich im Code ändern sollte, damit nach einem Kauf-/Verkaufssignal eine Position einmal geöffnet und geschlossen wird und das war's, der Expert Advisor öffnet keine Positionen bis zum nächsten Signal. Dies ist insbesondere dann der Fall, wenn das System aus mehreren Indikatoren besteht. Der Expert Advisor ist immer in Position. Er schließt einen bei Take oder Stop und öffnet sofort einen anderen.
 

Frage zu den Indikatoren.

Es gibt eine solche Konstruktion von Eingabeparametern in OnCalculate:

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[])
  {
     ...
  }

All dieser Spaß ist streng an den aktuellen Zeitrahmen gebunden. Um also an die ähnlichen Daten eines anderen Zeitrahmens zu gelangen, können Sie zum Beispiel das Handle des gewünschten eingebauten Standardindikators auf dem gewünschten Zeitrahmen aufrufen:

handle=iGator(_Symbol, PERIOD_W1);

und kopieren Sie dann die erforderlichen Daten in die Puffer mit Hilfe der Copy-functions-Varianten.

All dies wäre in Ordnung, aber es besteht die Notwendigkeit, rates_total und prev_calculated in anderen Zeiträumen als dem aktuellen zu verwenden. Und die gibt es, soweit ich weiß, nicht. Wo und wie können wir sie bekommen, wenn sie offensichtlich nicht in den aktuellen Zeitrahmen passen?

Natürlich gibt es eine klare Erklärung in der Hilfe:

"Wir müssen die Beziehung zwischen dem von OnCalculate() zurückgegebenen Wert und dem zweiten Eingabeparameter prev_calculated beachten. Der Parameter prev_calculated enthält beim Aufruf der Funktion den von OnCalculate() beim vorherigen Aufruf zurückgegebenen Wert. Dies ermöglicht sparsame Algorithmen für die Berechnung des benutzerdefinierten Indikators, um wiederholte Berechnungen für die Balken zu vermeiden, die sich seit dem letzten Aufruf dieser Funktion nicht verändert haben.

Dazu reicht es in der Regel aus, den Wert des Parameters rates_total zurückzugeben, der die Anzahl der Takte im aktuellen Funktionsaufruf enthält. Wenn seit dem letzten Aufruf von OnCalculate() Preisdaten geändert wurden (eine tiefere Historie wurde gepumpt oder Historienleerstellen wurden gefüllt), dann wird der Wert des Eingabeparameters prev_calculated vom Terminal auf Null gesetzt."

Müssen wir also wirklich manuell unsere eigenen Analoga von rates_total und prev_calculated für andere Zeiträume nach dem oben beschriebenen Prinzip implementieren? Oder gibt es etwas, das sofort verwendet werden kann? Nun, zum Beispiel so:

rates_total = BarsCalculated(handle);
oder den Rückgabewert der Kopierfunktion übernehmen. Aber mit prev_calculated wäre es, gelinde gesagt, nicht so einfach... Wie wird sie richtig umgesetzt?
 

Ich habe den Artikel von Rosh über die Mathematikauf https://www.mql5.com/ru/articles/1492 gelesen.

Gibt es eine Möglichkeit, eine solche Analyse z.B. in OnTester() einzubinden?

Gibt es vorgefertigte Lösungen, die frei verfügbar sind?

Математика в трейдинге. Оценка результатов торговых сделок - Статьи по MQL4
  • www.mql5.com
Математика в трейдинге. Оценка результатов торговых сделок - Статьи по MQL4: автоматическая торговля
 
Karlson:

Ich habe den Artikel von Rosh über die Mathematikauf https://www.mql5.com/ru/articles/1492 gelesen.

Gibt es eine Möglichkeit, eine solche Analyse z.B. in OnTester() einzubinden?

Gibt es vorgefertigte Lösungen, die frei verfügbar sind?

Ja - Prüfstatistiken
 
Rosh:
Ja - Teststatistiken
Ich danke Ihnen.
 

Können Sie uns beraten?

Ich habe ein Geschäft aus der Historie ausgewählt,die Richtung des Geschäfts ist "pivot" (in/out), dann bestimme ich das Volumen des Geschäfts HistoryDealGetDouble(ticket,DEAL_VOLUME).
Ich erhalte das Gesamtvolumen, aber woher weiß ich, welches Volumen ich geschlossen und welches geöffnet habe? Ich möchte wissen, welches Volumen ich geschlossen und welches ich geöffnet habe. Danke.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
Rosh:
Ja - Teststatistiken

Ich habe eine lineare Regression geschrieben. Haben Sie vor, so etwas zum Terminal hinzuzufügen und es sogar im Diagramm des Testers anzuzeigen?

Und wie zu verstehen, um die Z-Zahl zu berechnen ist erforderlich, um unabhängig voneinander berechnen die Gesamtzahl der positiven und negativen Serie?

 
Kann MetaTrader 5 an diese Börsehttps://mtgox.com/ angeschlossen werden?
 
Karlson:

Und ich verstehe auch, dass man für die Berechnung des Z-Zählers die Gesamtzahl der positiven und negativen Reihen selbst berechnen muss?

Ja, ganz allein. Grundsätzlich kann ich den Code zur Berechnung in MQL5 veröffentlichen.