Warum schießt der Strategietester an der Realität völlig vorbei?

 

Warum schießt der Strategietester an der Realität völlig vorbei?

Hallo liebe Gemeinde,

ich lasse meinen EA auf dem VPS mit Real-Konto laufen. Wenn ich dann den Strategietester drüber laufen lasse kommen völlig andere Trades zustande.

Weis jemand warum das so ist?

Real:

Zeit Position Symbol Typ Volumen Preis S / L T / P Zeit Preis Kommission Swap Gewinn
2025.09.19 06:23:47 182377632 USDJPY-Z sell 0.1 147.831 148.067
2025.09.19 06:47:36 147.672 -0.52 0.00 9.13
2025.09.19 06:47:41 182379963 USDJPY-Z sell 0.1 147.575 147.810
2025.09.19 06:48:13 147.423 -0.52 0.00 8.74
2025.09.19 06:48:36 182380051 USDJPY-Z buy 0.1 147.568 147.678
2025.09.19 06:51:06 147.726 -0.52 0.00 9.08
2025.09.19 06:51:16 182380154 USDJPY-Z sell 0.1 147.638 147.876
2025.09.19 07:01:26 147.477 -0.52 0.00 9.26
2025.09.19 07:03:58 182380338 USDJPY-Z sell 0.1 147.395 147.625
2025.09.19 07:11:00 147.237 -0.52 0.00 9.10
2025.09.19 07:27:53 182380537 USDJPY-Z buy 0.1 147.379 147.400
2025.09.19 07:42:00 147.398 -0.52 0.00 1.09
2025.09.19 07:49:07 182381019 USDJPY-Z buy 0.1 147.541 147.276
2025.09.19 09:10:45 147.561 -0.52 0.00 1.15
2025.09.19 09:21:33 182382741 USDJPY-Z buy 0.1 147.703 147.806
2025.09.19 09:33:12 147.856 -0.52 0.00 8.79
2025.09.19 09:36:47 182383819 USDJPY-Z sell 0.1 147.783 148.016
2025.09.19 09:39:42 147.630 -0.52 0.00 8.80
2025.09.19 09:48:22 182384212 USDJPY-Z buy 0.1 147.766 147.869
2025.09.19 09:50:13 147.919 -0.52 0.00 8.79
2025.09.19 09:52:26 182384493 USDJPY-Z sell 0.1 147.835 148.072
2025.09.19 10:37:20 147.680 -0.52 0.00 8.91
2025.09.19 10:41:47 182387275 USDJPY-Z buy 0.1 147.813 147.845
2025.09.19 10:50:32 147.844 -0.52 0.00 1.78
2025.09.19 11:18:02 182387857 USDJPY-Z buy 0.1 147.985 147.721
2025.09.19 11:26:41 148.021 -0.52 0.00 2.07
2025.09.19 11:30:09 182389743 USDJPY-Z sell 0.1 147.937 148.170
2025.09.19 12:17:03 147.778 -0.52 0.00 9.14
2025.09.19 12:52:52 182394056 USDJPY-Z buy 0.1 147.915 147.934
2025.09.19 13:00:30 147.934 -0.52 0.00 1.09
2025.09.19 14:45:45 182396056 USDJPY-Z buy 0.1 148.076 148.147
2025.09.19 15:00:22 148.145 -0.52 0.00 3.97
2025.09.19 15:02:33 182403259 USDJPY-Z sell 0.1 148.063 148.296
2025.09.19 16:17:18 147.925 -0.52 0.00 7.93

Vom Moderator bearbeitet, um Text und Anhänge aus dem entfernten doppelten Thema einzufügen.


Warum kann der MT5 Strategietester keine korrekten Ergebnisse reproduzieren?

Mein EA läuft 24/7 auf VPS mit Real-Konto. Seine Ergebnisse kann aber der Strategietester nicht ansatzweise reproduzieren. Erzeugt er nur Fantasiezahlen?

Beispiel 19.09.25 tatsächlich gelaufene Trades:

Zeit Position Symbol Typ Volumen Preis S / L T / P Zeit Preis Kommission Swap Gewinn
2025.09.19 06:23:47 182377632 USDJPY-Z sell 0.1 147.831 148.067 2025.09.19 06:47:36 147.672 -0.52 0.00 9.13
2025.09.19 06:47:41 182379963 USDJPY-Z sell 0.1 147.575 147.810 2025.09.19 06:48:13 147.423 -0.52 0.00 8.74
2025.09.19 06:48:36 182380051 USDJPY-Z buy 0.1 147.568 147.678 2025.09.19 06:51:06 147.726 -0.52 0.00 9.08
2025.09.19 06:51:16 182380154 USDJPY-Z sell 0.1 147.638 147.876 2025.09.19 07:01:26 147.477 -0.52 0.00 9.26
2025.09.19 07:03:58 182380338 USDJPY-Z sell 0.1 147.395 147.625 2025.09.19 07:11:00 147.237 -0.52 0.00 9.10
2025.09.19 07:27:53 182380537 USDJPY-Z buy 0.1 147.379 147.400 2025.09.19 07:42:00 147.398 -0.52 0.00 1.09
2025.09.19 07:49:07 182381019 USDJPY-Z buy 0.1 147.541 147.276 2025.09.19 09:10:45 147.561 -0.52 0.00 1.15
2025.09.19 09:21:33 182382741 USDJPY-Z buy 0.1 147.703 147.806 2025.09.19 09:33:12 147.856 -0.52 0.00 8.79
2025.09.19 09:36:47 182383819 USDJPY-Z sell 0.1 147.783 148.016 2025.09.19 09:39:42 147.630 -0.52 0.00 8.80
2025.09.19 09:48:22 182384212 USDJPY-Z buy 0.1 147.766 147.869 2025.09.19 09:50:13 147.919 -0.52 0.00 8.79
2025.09.19 09:52:26 182384493 USDJPY-Z sell 0.1 147.835 148.072 2025.09.19 10:37:20 147.680 -0.52 0.00 8.91
2025.09.19 10:41:47 182387275 USDJPY-Z buy 0.1 147.813 147.845 2025.09.19 10:50:32 147.844 -0.52 0.00 1.78
2025.09.19 11:18:02 182387857 USDJPY-Z buy 0.1 147.985 147.721 2025.09.19 11:26:41 148.021 -0.52 0.00 2.07
2025.09.19 11:30:09 182389743 USDJPY-Z sell 0.1 147.937 148.170 2025.09.19 12:17:03 147.778 -0.52 0.00 9.14
2025.09.19 12:52:52 182394056 USDJPY-Z buy 0.1 147.915 147.934 2025.09.19 13:00:30 147.934 -0.52 0.00 1.09
2025.09.19 14:45:45 182396056 USDJPY-Z buy 0.1 148.076 148.147 2025.09.19 15:00:22 148.145 -0.52 0.00 3.97
2025.09.19 15:02:33 182403259 USDJPY-Z sell 0.1 148.063 148.296 2025.09.19 16:17:18 147.925 -0.52 0.00 7.93


In der Anlage die Ergebnisse des Testers:

Zeit Handel Symbol Typ Richtung Volumen Preis Auftrag Kommission Tauschen Gewinn Kontostand Kommentar
19.09.2025 00:00:00 1 Gleichgewicht 0,00 0,00 10 000,00 10 000,00
19.09.2025 06:31:01 2 USDJPY-Z verkaufen In 0,1 147.775 3 0,00 0,00 0,00 10 000,00 SellStopEUR
19.09.2025 06:47:39 3 USDJPY-Z kaufen aus 0,1 147.622 4 0,00 0,00 8,79 10 008,79
19.09.2025 06:47:52 4 USDJPY-Z verkaufen In 0,1 147.519 6 0,00 0,00 0,00 10 008,79 SellStopEUR
19.09.2025 06:51:10 5 USDJPY-Z kaufen aus 0,1 147.755 7 0,00 0,00 -13,56 9 995,23 sl 147.752
19.09.2025 06:51:14 6 USDJPY-Z verkaufen In 0,1 147.659 9 0,00 0,00 0,00 9 995,23 SellStopEUR
19.09.2025 07:00:46 7 USDJPY-Z kaufen aus 0,1 147.500 10 0,00 0,00 9.15 10 004,38
19.09.2025 07:03:33 8 USDJPY-Z verkaufen In 0,1 147.408 12 0,00 0,00 0,00 10 004,38 SellStopEUR
19.09.2025 07:10:55 9 USDJPY-Z kaufen aus 0,1 147.251 13 0,00 0,00 9.04 10 013,42
2025.09.19 07:32:00 10 USDJPY-Z kaufen In 0,1 147.388 14 0,00 0,00 0,00 10 013,42 BuyStopEUR
2025.09.19 07:42:00 11 USDJPY-Z verkaufen aus 0,1 147.398 16 0,00 0,00 0,58 10 014,00 sl 147.400
19.09.2025 07:49:07 12 USDJPY-Z kaufen In 0,1 147.541 17 0,00 0,00 0,00 10 014,00 BuyStopEUR
19.09.2025 09:21:32 13 USDJPY-Z verkaufen aus 0,1 147.697 19 0,00 0,00 8,97 10 022,97
19.09.2025 09:33:11 14 USDJPY-Z kaufen In 0,1 147.846 20 0,00 0,00 0,00 10 022,97 BuyStopEUR
19.09.2025 09:33:24 15 USDJPY-Z verkaufen aus 0,1 147.877 22 0,00 0,00 1,78 10 024,75 sl 147.877
19.09.2025 09:36:40 16 USDJPY-Z verkaufen In 0,1 147.792 24 0,00 0,00 0,00 10 024,75 SellStopEUR
19.09.2025 09:39:42 17 USDJPY-Z kaufen aus 0,1 147.640 25 0,00 0,00 8,74 10 033,49
19.09.2025 09:40:49 18 USDJPY-Z verkaufen In 0,1 147.544 27 0,00 0,00 0,00 10 033,49 SellStopEUR
19.09.2025 09:48:25 19 USDJPY-Z kaufen aus 0,1 147.782 28 0,00 0,00 -13,68 10 019,81 sl 147.782
19.09.2025 09:50:13 20 USDJPY-Z kaufen In 0,1 147.921 29 0,00 0,00 0,00 10 019,81 BuyStopEUR
19.09.2025 09:50:51 21 USDJPY-Z verkaufen aus 0,1 147.933 31 0,00 0,00 0,69 10 020,50 sl 147.937
19.09.2025 09:52:21 22 USDJPY-Z verkaufen In 0,1 147.843 33 0,00 0,00 0,00 10 020,50 SellStopEUR
19.09.2025 10:37:15 23 USDJPY-Z kaufen aus 0,1 147.691 34 0,00 0,00 8,74 10 029,24
19.09.2025 10:43:07 24 USDJPY-Z kaufen In 0,1 147.835 35 0,00 0,00 0,00 10 029,24 BuyStopEUR
19.09.2025 10:50:32 25 USDJPY-Z verkaufen aus 0,1 147.844 37 0,00 0,00 0,52 10 029,76 sl 147.845
19.09.2025 11:18:01 26 USDJPY-Z kaufen In 0,1 147.985 38 0,00 0,00 0,00 10 029,76 BuyStopEUR
19.09.2025 14:55:59 27 USDJPY-Z verkaufen aus 0,1 148.145 40 0,00 0,00 9.20 10 038,96
19.09.2025 15:02:33 28 USDJPY-Z verkaufen In 0,1 148.063 42 0,00 0,00 0,00 10 038,96 SellStopEUR
19.09.2025 16:17:26 29 USDJPY-Z kaufen aus 0,1 147.911 43 0,00 0,00 8,74 10 047,70
19.09.2025 16:23:06 30 USDJPY-Z kaufen In 0,1 148.047 44 0,00 0,00 0,00 10 047,70 BuyStopEUR
2025.09.19 23:59:00 31 USDJPY-Z verkaufen aus 0,1 147.953 46 0,00 0,00 -5,41 10 042,29 Ende des Tests
0,00 0,00 42,29 10 042,29
Strategietester - Algorithmisches Trading, Handelsroboter - MetaTrader 5 Hilfe
Strategietester - Algorithmisches Trading, Handelsroboter - MetaTrader 5 Hilfe
  • www.metatrader5.com
Der Strategietester erlaubt das Testen von Strategien mit Handelsrobotern ( Expert Advisors ) vor der Nutzung im Live-Trading. Während des...
 

Wie soll jemand eine Antwort geben, wenn so wenig Informationen vorliegen und kein Quellcode zur Analyse verfügbar ist? Wir können nur spekulieren!

Wenn es sich um ein Marktprodukt oder ein Produkt eines Drittanbieters handelt, sollten Sie dies mit dem Autor besprechen und nicht im Forum.

How do you expect anyone to provide an answer with so little information and no source code to analyse? All we can do is speculate!

If this is about a Market product or by a 3rd party, then you should discuss it with the author, and not the forum.

 
Naja, da braucht es schon mehr Infos!! Druck aus: Warum (Zeilennr., Preise, Spread, Indikatorwerte, ..) und wann genau welcher Auftrag gesendet wurde. Dann kommst Du dem Problem schon näher.
 
Weil der schon immer sowas macht aber es niemanden der verantwortlich ist interessiert. Das beginnt schon damit das der strategietester den aktuellen spread verwendet und nicht den der zum Zeitpunkt des Grades da war obwohl der eigentlich vorhanden wäre
 
amando #Weil der schon immer sowas macht aber es niemanden der verantwortlich ist interessiert. Das beginnt schon damit das der strategietester den aktuellen spread verwendet und nicht den der zum Zeitpunkt des Grades da war obwohl der eigentlich vorhanden wäre

Das ist falsch. Wenn Sie auf MT5 den Strategietester mit der Modellierung „Jeder Tick basiert auf realen Ticks“ ausführen, werden die realen Geld- und Briefkurse und damit der reale Spread verwendet. Nur die anderen Modellierungsmethoden verwenden virtuelle oder synthetisierte Tick-Werte, die auf den M1-Balken basieren.

Außerdem hat der ursprüngliche Verfasser weder ausreichende Informationen noch Code zur Verfügung gestellt, damit wir eine angemessene Antwort analysieren und geben können.

That is incorrect. On MT5, if you run the Strategy Tester with the modelling "Every tick based on real ticks", it will use the real Bid and Ask prices, and therefore the real Spread. Only the other modelling methods uses virtual or synthesised tick values based on the M1 bars.

Also, the original poster, has not provided sufficient information nor even code for us to analyse and provided an adequate answer.

 
Fernando Carreiro #:

Das ist falsch. Wenn Sie auf MT5 den Strategietester mit der Modellierung „Jeder Tick basiert auf realen Ticks“ ausführen, werden die realen Geld- und Briefkurse und damit der reale Spread verwendet. Nur die anderen Modellierungsmethoden verwenden virtuelle oder synthetisierte Tick-Werte, die auf den M1-Balken basieren.

Außerdem hat der ursprüngliche Verfasser weder ausreichende Informationen noch Code zur Verfügung gestellt, damit wir eine angemessene Antwort analysieren und geben können.

That is incorrect. On MT5, if you run the Strategy Tester with the modelling "Every tick based on real ticks", it will use the real Bid and Ask prices, and therefore the real Spread. Only the other modelling methods uses virtual or synthesised tick values based on the M1 bars.

Also, the original poster, has not provided sufficient information nor even code for us to analyse and provided an adequate answer.

Das beginnt ja schon mit mit der Zeit der abgesetzten Order.

Falsch formatierter Beitrag vom Moderator bearbeitet. Fügen Sie entweder die Quelldatei bei oder verwenden Sie die Schaltfläche CODE (Alt-S), wenn Sie Code oder Protokollausgaben einfügen – https://www.mql5.com/de/articles/24#insert-code

//+------------------------------------------------------------------+
//|                                                 SpreadTrader.mq5 |
//|                                  Copyright 2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      " https://www.mql5.com "
#property version   "1.00"
#include      <Trade\Trade.mqh>
#include      <Trade\SYmbolInfo.mqh>
#include      <Trade\PositionInfo.mqh>
#include      <Trade\OrderInfo.mqh>
// Declaration variable for librari trade function.
CTrade                            trade;
CSymbolInfo                       m_symbol;
CPositionInfo                     m_position;
COrderInfo                        m_order;
input double lotSize,MyProfit,EURlotSize;
input int Slippage,X,Y;
bool NoTrade;
int MagNum=777777;
input int TrailStopBuy=50;
input int TrailStopSell=50;
input int StartHourAM = 2; // HandelsbeginnAM (z. B. 9 Uhr)
input int EndHourAM = 11; // HandelsendeAM (z. B. 12 Uhr)
input int StartHourPM = 14; // HandelsbeginnPM (z. B. 13 Uhr)
input int EndHourPM = 20; // HandelsendePM (z. B. 22 Uhr)
input bool TradeMonday = true;
input bool TradeTuesday= true;
input bool TradeWednesday = true;
input bool TradeThursday = true;
input bool TradeFriday = true;
input double StopLossSell;//SL SellStop
input double StopLossBuy;//SL BuyStop
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);
   if(!m_symbol.Name(_Symbol))
      return  INIT_FAILED;
// Set Trade parameter
   trade.SetTypeFillingBySymbol(m_symbol.Name());
  trade.SetExpertMagicNumber(MagNum);
StartingStep();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  StartingStep();
  Trail();
  EraseOnePending();
   CloseAllPositions();
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
//---
  }
//+------------------------------------------------------------------+
// Function to check if there are open orders
//bool CheckOpenOrders()
//  {
//   for(int i=0; i<OrdersTotal(); i++) // loop all Open Positions
//         if (OrderSelect(i)) {
//         
//           
//             if (Order(ORDER_MAGIC)==MagNum)
//             {
//             Print("Es ist eine P offen mit der MagNum:",MagNum);
//             return(true);
//             }
//             
//            
//             }
//   Print("Es gibt keine offene P mit der Magnum:",MagNum);
//   
//   return(false);
//  }
//  
  //+----------------------------------------------------------------+
  //|  Existiert eine Pending-Order
  //+----------------------------------------------------------------+
 bool IsDuplicateBuyStopOrder()
{
int Orders   =  OrdersTotal();
string order_type;
bool istda=false;
    for (int i = 0; i < Orders; i++)
    {
        order_type=EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
            if (order_type=="ORDER_TYPE_BUY_STOP")
            {
            Print("Es existiert schon eine BuyStop-Order",i);
                istda= true; // Duplikat gefunden
            }
    else
   {
   Print("Es existiert keine BuyStop-Order");
//    istda= false; // Keine Duplikate gefunden
    }
 }   
return istda;
}
//+------------------------------------------------------------------
//| Existiert eine Sell-Stop-Order
//+------------------------------------------------------------------+
 bool IsDuplicateSellStopOrder()
{
bool istda=false;
int Orders   =  OrdersTotal();
string order_type;
    for (int i = 0; i < Orders; i++)
    {
        order_type=EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
            if (order_type=="ORDER_TYPE_SELL_STOP")
            {
            Print("Es existiert schon eine SellStop-Order");
                istda= true; // Duplikat gefunden
                break;
            }
        else
        {  Print("Es existiert keine SellStop-Order");
        }
    }
 return istda; 
}
//+------------------------------------------------------------------+
//|  Starting the EA                                                 |
//+------------------------------------------------------------------+
void StartingStep()
  {
  double ask=SymbolInfoDouble("USDJPY-Z",SYMBOL_ASK);
   double bid=SymbolInfoDouble("USDJPY-Z",SYMBOL_BID);
   double spread=ask-bid;
   int spread_points=(int)MathRound(spread/SymbolInfoDouble("USDJPY-Z",SYMBOL_POINT));
   //double vbid    = MarketInfo("USDJPY-Z",MODE_BID);
   //double vask    = MarketInfo("USDJPY-Z",MODE_ASK);
   //double vpoint  = MarketInfo("USDJPY-Z",MODE_POINT);
   //int    vdigits = (int)MarketInfo("USDJPY-Z",MODE_DIGITS);
   //int    vspread = (int)MarketInfo("USDJPY-Z",MODE_SPREAD);
int Orders=OrdersTotal();
if((Orders==0)&&TradeAllow()&&PositionsTotal()==0)
     {
   MqlTick tick[1]={}; 
      trade.BuyStop(lotSize,(SymbolInfoDouble("USDJPY-Z", SYMBOL_ASK)+(Y*_Point)),"USDJPY-Z", NormalizeDouble(ask - StopLossBuy * _Point, _Digits), 0.0,0,0 ,"BuyStopEUR");
      Print("Info Bid:  ",bid,"  Info Ask:  ",ask);
       trade.SellStop(lotSize,(SymbolInfoDouble("USDJPY-Z", SYMBOL_BID)-(X*_Point)),"USDJPY-Z", NormalizeDouble(bid+ StopLossSell * _Point, _Digits), 0.0,0,0,"SellStopEUR");
      if(!SymbolInfoTick("USDJPY-Z", tick[0]))
     {
      Print("SymbolInfoTick() failed. Error ", GetLastError());
      return;
     }
      Print("Info Bid:  ",bid,"  Info Ask:  ",ask);
     }
//if (Orders==1) {CloseAllPositions();}
}
//+------------------------------------------------------------------+
// Alle Pos schließen
//+------------------------------------------------------------------+
void CloseAllPositions()
  {
   double totalProfit = 0.0;
  NoTrade=false;
   for(int i = 0; i < PositionsTotal(); i++)
     {
if(m_position.SelectByIndex(i))
        {
         if(PositionGetSymbol(i) == "USDJPY-Z")
           {
            totalProfit=totalProfit+PositionGetDouble(POSITION_PROFIT);
           }
        }
     }
   Print("GuV=",totalProfit);
    if((totalProfit >= MyProfit)||(PositionsTotal()>1))
     {
for(int i = PositionsTotal() - 1; i >= 0; i--) // loop all Open Positions
         if(m_position.SelectByIndex(i))  // select a position
           {
            trade.PositionClose(m_position.Ticket()); // then delete it --period
  DeleteAllPendingOrders();
            //Sleep(100); // Relax for 100 ms
            Print("Positions", "Positions " + (string)PositionsTotal(), 100, 80, 20, BLASRANGE_A); //Re write number of positions on the chart
           }
      }
 }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Delete all pending orders                                        |
//+------------------------------------------------------------------+
void DeleteAllPendingOrders()
  {
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Magic()==MagNum)
            trade.OrderDelete(m_order.Ticket());
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trail ()
{
   // Loop through all open positions
   for(int i = PositionsTotal() - 1; i >= 0; i--)
   {
      // Get position ticket
      ulong ticket = PositionGetTicket(i);
      if(ticket > 0)
      {
         // Retrieve position details
         if(PositionSelectByTicket(ticket))
         {
            double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
            double stopLoss = PositionGetDouble(POSITION_SL);
            double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID);
            double trailingStopBuy = TrailStopBuy * _Point; // Example: 50 points trailing stop
            double trailingStopSell = TrailStopSell * _Point; // Example: 50 points trailing stop
            // Check if it's a BUY position
            if((PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)&& (currentPrice>openPrice+trailingStopBuy))
            {
               double newStopLoss = currentPrice - trailingStopBuy;
               if(newStopLoss > stopLoss)
               {
                  // Modify the stop loss
                  trade.PositionModify(ticket, newStopLoss, PositionGetDouble(POSITION_TP));
               }
            }
            // Check if it's a SELL position
            else if((PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)&&(currentPrice<openPrice-trailingStopSell))
            {
               double newStopLoss = currentPrice + trailingStopSell;
               if(newStopLoss < stopLoss || stopLoss == 0)
               {
                  // Modify the stop loss
                  trade.PositionModify(ticket, newStopLoss, PositionGetDouble(POSITION_TP));
               }
            }
         }
      }
   }
}
void EraseOnePending()
{
int OneOrder;
OneOrder=OrdersTotal();
if (OneOrder==1)
{
DeleteAllPendingOrders();
   }
}
bool TradeAllow()
{
bool Allowed=false;
   datetime currentTime = TimeCurrent();
   MqlDateTime dt;
   TimeToStruct(currentTime, dt);
   // Wochentag prüfen (0 = Sonntag, 1 = Montag, ..., 6 = Samstag)
   bool isTradingDay = (dt.day_of_week == 1 && TradeMonday) ||
                       (dt.day_of_week == 2 && TradeTuesday) ||
                       (dt.day_of_week == 3 && TradeWednesday) ||
                       (dt.day_of_week == 4 && TradeThursday) ||
                       (dt.day_of_week == 5 && TradeFriday);
   // Uhrzeit prüfen
   bool isTradingTime = ((dt.hour >= StartHourAM && dt.hour < EndHourAM)||(dt.hour >= StartHourPM && dt.hour < EndHourPM));
   if(isTradingDay && isTradingTime)
   {
      // Hier kannst du deine Handelslogik einfügen
      Print("Trading erlaubt: ", dt.day_of_week, " um ", dt.hour, " Uhr");
      Allowed=true;
   }
 return Allowed;
}

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2025.09.21
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
  1. Ich würde niemals eine 'Handelsfunktion' wie StartingStep() in Deinem Fall in OnInit aufrufen!
  2. Der Code ist zwar nett, aber Du willst doch den Unterschied zwischen live und Tester ve4rstehen. Bessert wäre es daher wenn Du die wichtigen Informationen in StartingStep() ausdruckst zB. Volume, Spread, .. aber auch die Zeit (TimeCurrent()) nicht nur Bid und Ask. Dann lässt Du den EA heute live laufen und morgen im visuellen Modus im Tester mit gleicher Beginnzeit.
 
Carl Schreiber #:
  1. Ich würde niemals eine 'Handelsfunktion' wie StartingStep() in Deinem Fall in OnInit aufrufen!
  2. Der Code ist zwar nett, aber Du willst doch den Unterschied zwischen live und Tester ve4rstehen. Bessert wäre es daher wenn Du die wichtigen Informationen in StartingStep() ausdruckst zB. Volume, Spread, .. aber auch die Zeit (TimeCurrent()) nicht nur Bid und Ask. Dann lässt Du den EA heute live laufen und morgen im visuellen Modus im Tester mit gleicher Beginnzeit.
Kann es sein, dass der Tester nicht erkennen kann,dass ich ein NullSpread Konto habe? Wenn ja, wie treibe ich ihm das wieder aus?
 
Joerg Koburg #Kann es sein, dass der Tester nicht erkennen kann,dass ich ein NullSpread Konto habe? Wenn ja, wie treibe ich ihm das wieder aus?

Wenn Sie den Strategietester mit der Modellierungsmethode „Jeder Tick anhand realer Ticks“ ausführen, werden genau dieselben realen Bedingungen verwendet. Jede andere Modellierungsmethode führt zu anderen Ergebnissen.

(Der englische Originaltext wurde automatisch übersetzt.)

If you run the Strategy Tester using the modelling method "Every tick based on real ticks", then it will use the exact same real conditions. Any other modelling method will give different results.



 
Fernando Carreiro #:

n Strategietester mit der Modellierungsmethode „Jeder Tick anhand realer Ticks“ ausführen, werden genau dieselben realen Bedingungen verwendet. Jede andere Modellierungsmethode führt zu anderen Ergebnissen.

seit wann macht er das? ich habe immer anhand realer Ticks getestet und hab damit aufgehört weil er das nie so gemacht hat

fällt bei den meisten Brokern nicht auf, weil der spread gleichbleibend ist. aber wen man einen Broker hat, der am Wochenende die Spreads in die höhe gibt ist das immer lästig gewesen

 
Joerg Koburg #:
Kann es sein, dass der Tester nicht erkennen kann,dass ich ein NullSpread Konto habe? Wenn ja, wie treibe ich ihm das wieder aus?

0 Spread gibts nicht, ein kleiner spread bleibt immer übrig. manchmal oder oft ist er 0, aber nicht permanent