Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1328

 
Ich bitte um Hilfe aus der Gemeinschaft...
MT5
Es ist nicht möglich, die Optimierung durch Überschreitung der Parameter für mehrere Paare gleichzeitig durchzuführen.
Wenn ich im Tester unter "Symbol" die Option "Alle Symbole von Market Watch" auswähle, wird die Möglichkeit, die Überschreitung der Eingabeparameter auf der Registerkarte "Parameter" einzustellen, deaktiviert, d. h. es werden keine Kontrollkästchen aktiviert und keine Werte eingegeben. Was sollte getan werden?
 
MikeZv:
Ich bitte um die Hilfe der Gemeinschaft...
MT5
konnte keine Optimierung durch Überschreitung der Parameter für mehrere Paare gleichzeitig durchführen.
Wenn ich im Tester in der Spalte "Symbol" die Option "Alle Symbole von Market Watch" auswähle, wird die Möglichkeit, die Überschreitung der Eingabeparameter auf der Registerkarte "Parameter" einzustellen, deaktiviert, es werden nur keine Ticks und keine Werte eingegeben. Was sollte getan werden?

ist nicht auf wenige Zeichen optimiert, nur getestet

 
Mikhail Mishanin:

ist nicht auf mehrere Zeichen optimiert, nur getestet

Und es muss die Parameter für jedes Symbol in einem separaten Test durchgehen?
Dasselbe gilt für MT4. Die Möglichkeit der Multiwährungsprüfung im MT5 ist also ein Mythos?

UPD In der Dokumentation steht jedoch ausdrücklich :

  • Die Angabe eines Symbols bedeutet nicht, dass der Prüfer nur diese historischen Daten verwenden wird. Informationen über alle im EA verwendeten Symbole, der Tester lädt sie automatisch.
D.h. es soll ein Symbol mit Parametersätzen ausgewählt werden, und der Tester wendet diese Parameter dann "auf alle am EA beteiligten Symbole " an.
 
MikeZv:

Muss ich die Parameter für jedes Symbol in einem separaten Test durchgehen?
In MT4 auf die gleiche Weise. Das Testen mehrerer Währungen in MT5 ist also ein Mythos?

.....

Kennen Sie den Unterschied zwischen den Begriffen "Prüfung" und "Optimierung"?

 
Сергей Таболин:

Kennen Sie den Unterschied zwischen "Prüfung" und "Optimierung"?

Wird Zeichenfür Zeichen getestet oder optimiert?

 
Vitaly Muzichenko:

Er muss also über offene Stellen Bescheid wissen

Forum zum Thema Handel, automatisierte Handelssysteme & Strategietests

FAQ von Anfängern MQL5 MT5 MetaTrader 5

Aleksandr Egorov, 2021.07.14 18:04

Wie berechnet man die Provision für offene Aufträge in mt5 für jedes Paar separat?

Ja, mein Fehler. Durch Aufzählung der Positionen auf jedem Paar)

 
Hallo zusammen, weiß jemand, wo das Fadenkreuz auf dem Chart im MT-5 Strategietester eingeschaltet ist und ob es überhaupt vorhanden ist?
 
Yuriy Vins:
Hallo zusammen, weiß jemand, wo das Fadenkreuz auf dem Chart im MT-5 Strategietester aktiviert ist und ist es überhaupt da?

Mittlere Taste der Maus (Klick auf das Scrollrad)

 

Freunde, die mir sagen können, wie man einen Trailing-Stop setzt,

//+------------------------------------------------------------------+
//|                          EMA_WMA v2(barabashkakvn's edition).mq5 |
//|                               Copyright © 2009, Vladimir Hlystov |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Vladimir Hlystov"
#property link      "cmillion@narod.ru"
#property version   "2.000"
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                      // trading object
CSymbolInfo    m_symbol;                     // symbol info object
CAccountInfo   m_account;                    // account info wrapper
//+------------------------------------------------------------------+
//| Enum Prices                                                      |
//+------------------------------------------------------------------+
enum enPrices
  {
   pr_close,      // Close
   pr_open,       // Open
   pr_high,       // High
   pr_low,        // Low
   pr_median,     // Median
   pr_typical,    // Typical
   pr_weighted,   // Weighted1
   pr_average     // Average (high+low+oprn+close)/4
  };
//+------------------------------------------------------------------+
//--- Super Trend Hull Indicator
int      Inp_hullPeriod             = 18;         // Hull period
int      Inp_hullPeriod2            = 6660;         // Hull period
enPrices Inp_Price                  = pr_close;    // Price

 
extern double  Lots                = 5.0; 
//---
int            period_EMA          = 80;        // EMA: averaging period
int            period_WMA          = 80;         // WMA: averaging period
extern int     InpStopLoss         = 5000;          // StopLoss
extern int     InpTakeProfit       = 10000;          // TakeProfit
double         my_lot;
ulong          m_magic=72406264;                  // magic number

 
 
//---
double         my_SL,my_TP;
datetime       TimeBar;



double         ExtStopLoss=0.0;
double         ExtTakeProfit=0.0;


 
int            m_bar_current=0;
int            handle_iCustom;               // variable for storing the handle of the iCustom indicator
int            handle_iCustom2;              // variable for storing the handle of the iCustom indicator
int            handle_iMA_EMA;               // variable for storing the handle of the iMA indicator
int            handle_iMA_WMA;               // variable for storing the handle of the iMA indicator
int            all_positions;                // offene Positionen
input bool     Reverse                = true;


bool           UseTimeLimit = true;
int            startHour    = 1 ;
int            stopHour     = 23;
bool           YesStop=false;
input          ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+


int OnInit()
  {
 
//---
 
   m_symbol.Name(Symbol());                  // sets symbol name
//---
   m_trade.SetExpertMagicNumber(m_magic);    // sets magic number
   if(!RefreshRates())
     {
      Print("Error RefreshRates. Bid=",DoubleToString(m_symbol.Bid(),Digits()),
            ", Ask=",DoubleToString(m_symbol.Ask(),Digits()));
      return(INIT_FAILED);
     }
   m_symbol.Refresh();
//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;
 
   ExtStopLoss    = InpStopLoss     * digits_adjust;
   ExtTakeProfit  = InpTakeProfit   * digits_adjust;
 
//--- create handle of the indicator iMA
   handle_iMA_EMA=iMA(Symbol(),Period(),period_EMA,0,MODE_EMA,PRICE_OPEN);
//--- if the handle is not created
   if(handle_iMA_EMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }
//--- create handle of the indicator iMA
   handle_iMA_WMA=iMA(Symbol(),Period(),period_WMA,0,MODE_LWMA,PRICE_OPEN);
//--- if the handle is not created
   if(handle_iMA_WMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }
//--- create handle of the indicator iCustom
   handle_iCustom=iCustom(m_symbol.Name(),Period(),"hull_variation",Inp_hullPeriod,Inp_Price );
   handle_iCustom2=iCustom(m_symbol.Name(),Period(),"23",Inp_hullPeriod2,Inp_Price );
//--- if the handle is not created
   if(handle_iCustom==INVALID_HANDLE || handle_iCustom2==INVALID_HANDLE)
        {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iCustom indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
}
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

int Crossed(double line1,double line2)
  {
   static int last_direction=0;
   static int current_direction=0;
//--- don't work in the first load, wait for the first cross!
   static bool first_time=true;
   if(first_time==true)
     {
      first_time=false;
      //---
      if(line1>line2)
         current_direction=1;  //up
      else
         current_direction=2;  //(line1<line2) //down

      last_direction=current_direction;
      //---
      return (0);
     }
//---
   if(line1>line2)
      current_direction=1;  //up
   else
      current_direction=2;  //(line1<line2) //down
//---
   if(current_direction!=last_direction) //changed
     {
      last_direction=current_direction;
      return(last_direction);
     }
   else
     {
      return(0);  //not changed
     }
  }
void OnTick()
  {
  
  double close1 = iClose(_Symbol,Timeframe,1);

   datetime time_0=iTime(0);
   if(TimeBar==time_0)
      return;
   if(TimeBar==0)
     {
      TimeBar=time_0;
      return;
     }//first program run
 
   double colorBuffer[],hull[],EMA0[],WMA0[];
   ArraySetAsSeries(colorBuffer,true);
   ArraySetAsSeries(hull,true);
   ArraySetAsSeries(EMA0,true);
   ArraySetAsSeries(WMA0,true);

 
 
 
   int start_pos=1,count=3;
   if(!iGetArray(handle_iCustom,1,start_pos,count,colorBuffer))
     return;
   if(!iGetArray(handle_iCustom2,1,start_pos,count,hull))
      return;
   if(!iGetArray(handle_iMA_EMA,0,start_pos,count,EMA0))
      return;
   if(!iGetArray(handle_iMA_WMA,0,start_pos,count,WMA0))
      return;
//---

   if(UseTimeLimit)
     {
       YesStop=true;
       MqlDateTime str1;
       TimeToStruct(TimeCurrent() , str1);
       if(str1.hour > startHour && str1.hour < stopHour)
          YesStop=false;
     }
   if(YesStop==false)
   ulong  m_ticket=0;
   double SEma,LEma;
   
   SEma = iMAGet(handle_iMA_WMA,0);
   LEma = iMAGet(handle_iMA_EMA,0);
   
      static int isCrossed=0;
   if(!Reverse)
      isCrossed=Crossed(LEma,SEma);
   else
      isCrossed=Crossed(SEma,LEma);
//---
   if(!RefreshRates())
      return;


  {  
   bool Buy_Condition_1 = (WMA0[m_bar_current] < EMA0[m_bar_current+1]);
   bool Buy_Condition_2 = (close1 > WMA0[0]);

     {  
        int pos_total=PositionsTotal();
   if(pos_total==0)
     {
       if(isCrossed==1)
       {

      if(!RefreshRates())
         return;
      TimeBar=time_0;
      my_TP = m_symbol.Ask() + ExtTakeProfit*Point();
      my_SL = m_symbol.Ask() - ExtStopLoss*Point();
      my_lot = Lots;
      OPENORDER("Sell");
            }
      
 }
 
      if(isCrossed==2)       
         {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      my_TP  = m_symbol.Bid() - ExtTakeProfit*Point();
      my_SL  = m_symbol.Bid() + ExtStopLoss*Point();

      my_lot= Lots;
      OPENORDER("Buy");
         }
     }
     
   
 } 
   if(colorBuffer[m_bar_current+1]>colorBuffer[m_bar_current] ) //Buy
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Sell");
     }
 
  if(colorBuffer[m_bar_current+1]<colorBuffer[m_bar_current] ) //Sell
     {
      if(!RefreshRates())
         return;
      TimeBar=time_0;
      CLOSEORDER("Buy");
     }
 
   return;
  }
  
//--------------------------------------------------------------------
void CLOSEORDER(string ord)
  {
   for(int i=PositionsTotal()-1; i>=0; i--)  // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY && ord=="Buy")
               m_trade.PositionClose(m_position.Ticket());  // Close Buy
            if(m_position.PositionType()==POSITION_TYPE_SELL && ord=="Sell")
               m_trade.PositionClose(m_position.Ticket()); // Close Sell
           }
  }
//--------------------------------------------------------------------

void OPENORDER(string ord)
  {
  if(ord=="Sell")
      for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
         if(m_position.SelectByIndex(i))
           if(m_position.PositionType()==POSITION_TYPE_SELL)
 
               return;                          // Если sell, то не открываемся
 
      if(!m_trade.Sell(my_lot,Symbol(),m_symbol.Bid(),my_SL,my_TP,""))
         Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
               ", description of result: ",m_trade.ResultRetcodeDescription(),
               ", ticket of deal: ",m_trade.ResultDeal());
   if(ord=="Buy")
      for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
         if(m_position.SelectByIndex(i))
 
            if(m_position.PositionType()==POSITION_TYPE_BUY)
               return;                          // Если buy, то не открываемся
 

      if(!m_trade.Buy(my_lot,Symbol(),m_symbol.Ask(),my_SL,my_TP,""))
         Print("BUY_STOP -> false. Result Retcode: ",m_trade.ResultRetcode(),
               ", description of Retcode: ",m_trade.ResultRetcodeDescription(),
               ", ticket of order: ",m_trade.ResultOrder());
   return;
  }
  double iMAGet(const int handle,const int index)
  {
   double MA[];
   ArraySetAsSeries(MA,true);
//--- reset error code
   ResetLastError();
//--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index
   if(CopyBuffer(handle,0,0,index+1,MA)<0)
     {
      //--- if the copying fails, tell the error code
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated
      return(0.0);
     }
   return(MA[index]);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
 
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
      return(false);
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+
//| Get Time for specified bar index                                 |
//+------------------------------------------------------------------+
datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   datetime Time[];
   datetime time=0;
   ArraySetAsSeries(Time,true);
   int copied=CopyTime(symbol,timeframe,index,1,Time);
   if(copied>0)
      time=Time[0];
   return(time);
  }
//+------------------------------------------------------------------+
//| Get value of buffers                                             |
//+------------------------------------------------------------------+
bool iGetArray(const int handle,const int buffer,const int start_pos,
               const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__);
      return(false);
     }
   ArrayFree(arr_buffer);
//--- reset error code
   ResetLastError();
//--- fill a part of the iBands array with values from the indicator buffer
   int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code
      PrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d",
                  __FILE__,__FUNCTION__,count,copied,GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated
      return(false);
     }
   return(result);
 
 
}
//+------------------------------------------------------------------+

 
Yuriy Vins:
Hallo zusammen, weiß jemand, wo das Fadenkreuz auf dem Chart im MT-5 Strategietester eingeschaltet ist, oder ob es überhaupt vorhanden ist?

Strg+F

Aber nur bei Tests mit Visualisierung.
Grund der Beschwerde: