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

 
Artyom Trishkin #:

Viele Teilungen ohne Überprüfung des Teilers auf Null. Explosiv.

Danke, Artyom, für den Tipp! Ich werde die Prüfung definitiv hinzufügen.

Mit freundlichen Grüßen, Vladimir.

 
Artyom Trishkin #:

Explosiv.

Na gut.

 
Aleksandr Slavskii #:

fxsaber, wenn Sie lesen, antworten Sie bitte.

Die PositionID ist in der tst-Datei gespeichert. Vielleicht ist es sinnvoll, tst->Virtual zu konvertieren, dann können Sie mit tst im MT4-Stil arbeiten. Hier ist ein Beispiel für eine solche Konvertierung.

Sie können auch die Backtest-Historie aus Objekten extrahieren. Die Bibliothek ist da einfacher zu verstehen.

ZЫ Ich habe diesen Thread nicht abonniert, also sehe ich ihn vielleicht nicht.

TesterReport - альтернативный отчет тестера стратегий Metatrader 5
TesterReport - альтернативный отчет тестера стратегий Metatrader 5
  • 2021.10.06
  • www.mql5.com
Торговые отчеты MetaTrader 5 довольно тяжелы для восприятия. По этой причине с определенного момента разработчики добавили в Терминал более понятный режим просмотра закрытых позиций. Однако, это не
 
Alexey Viktorov #:

Achten Sie auf die Kosten pro Tick.

Guten Morgen und gute Laune, liebe Leute!

Ich habe keine Zeit, um Code zu schreiben. Unter Berücksichtigung der Hinweise von Forumsmitgliedern, für die sie ein großes DANKESCHÖN sind, haben wir diese Version des Skripts bekommen:

//+------------------------------------------------------------------+
//|                            Lot_Size_Depending_On_Risk_And_SL.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
input uint Risk=6;         // Размер риска (> 0, но не более 100 %)
input uint Stop_Loss=1000; // Размер стоп-лосса (> 0, но не более 4294967295)
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot_Size_Depending_On_Risk_And_SL()
  {
//--- блок проверки входных параметров на корректность
   if(Risk==0 || Risk>100 || Stop_Loss==0)
     {
      Print("<===== Введены не корректные размеры риска и/или стоп-лосса! =====>");
      return(0.0);
     }
//--- блок определения размера лота
   double trading_account_currency=SymbolInfoDouble(_Symbol,SYMBOL_POINT)*
                                   SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/
                                   SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
   double lot=(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/(Stop_Loss*trading_account_currency);
//--- блок проверки размера лота на минимум и максимум от возможного
   double min_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   double max_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   if(lot<min_volume)
      lot=min_volume;
   if(lot>max_volume)
      lot=max_volume;
//--- блок расчёта минимального шага изменения объёма необходимого для заключения сделки
   double step_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   int ratio=(int)MathRound(lot/step_volume);
   if(MathAbs(ratio*step_volume-lot)>0.0000001)
      lot=ratio*step_volume;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print(DoubleToString(Lot_Size_Depending_On_Risk_And_SL(),2));
  }
//+------------------------------------------------------------------+

Mit freundlichen Grüßen, Vladimir.

 

Guten Tag!

Könnten Sie mir bitte vorschlagen, wie ich meinen Roboter so verfeinern kann, dass er nur auf einem Computer funktionieren kann?

(um ihn vor Kopieren zu schützen)

Mit freundlichen Grüßen, Alexander

Документация по MQL5: Операции с массивами / ArraySetAsSeries
Документация по MQL5: Операции с массивами / ArraySetAsSeries
  • www.mql5.com
ArraySetAsSeries - Операции с массивами - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
klycko #:

Guten Tag!

Könnten Sie mir bitte sagen, wie ich meinen Roboter so verfeinern kann, dass er nur auf einem Computer funktioniert?

(um ihn vor Kopien zu schützen)

Mit freundlichen Grüßen, Alexander

void OnInit()
  {
   if(AccountInfoInteger(ACCOUNT_LOGIN) != Номер счёта)
      return INIT_FAILED;
   return INIT_SUCCEEDED;
  }

Die einfachste Variante.

Fügen Sie zwei Codezeilen in die OnInit-Funktion ein.

Geben Sie anstelle der Kontonummer das Konto der Person an, der Sie den Expert Advisor übergeben, kompilieren Sie und übergeben Sie nur die ex5-Datei.

 
Aleksandr Slavskii #:

Die einfachste Möglichkeit.

Fügen Sie zwei Codezeilen in die OnInit-Funktion ein.

Geben Sie anstelle der Kontonummer das Konto der Person an, der Sie den Expert Advisor übergeben, kompilieren Sie und übergeben Sie nur die ex5-Datei.

Herzlichen Dank!

 
Aleksandr Slavskii #:

Die einfachste Möglichkeit.

Fügen Sie zwei Codezeilen in die OnInit-Funktion ein.

Geben Sie anstelle der Kontonummer das Konto der Person an, der Sie den Expert Advisor übergeben, kompilieren Sie und übergeben Sie nur die ex5-Datei.

der Kunde schaltet das Terminal ein und der Expert Advisor stürzt ab :-))

denn es gibt Situationen, in denen ACCOUNT_LOGIN=0

 
Maxim Kuznetsov #:

schaltet der Client das Terminal ein und der Expert Advisor stürzt ab :-)

weil es Situationen gibt, in denen ACCOUNT_LOGIN=0 ist

Wenn Sie zuverlässige und hohe Qualität benötigen, ist es für Freiberufler.

 

Seltsam. Ich habe im Terminal unter "Einstellungen -> Charts" 5000 Balken als Maximum eingestellt. Ich habe das Terminal neu geladen, wenn ich mit dem Mauszeiger über die Registerkarte mit dem Symbol fahre, zeigt es 5000 Balken an.

Aber dieser Code:

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

  Print("rates_total=", rates_total);
  return rates_total;
}


zeigt Informationen über 6201 Balken an.

Ist das richtig? Ich hatte erwartet, dass auch in rates_total 5000 angezeigt werden.