初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1476

 
Artyom Trishkin #:

多次除法都不检查除数是否为零。爆炸

谢谢 Artyom 的提示!我一定会增加检查功能。

再见,弗拉基米尔

 
Artyom Trishkin #:

爆炸

很公平。

 
Aleksandr Slavskii #:

fxsaber 如果您正在阅读,请回复。

PositionID 保存在 tst 文件中。也许将 tst 转换为 Virtual 是有意义的,这样您就能以 MT4 风格使用 tst。下面是一个此类转换的示例

您还可以从对象中提取回溯测试历史。这里的 更容易理解。

ZЫ 我没有订阅这个主题,所以可能看不到。

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

请务必考虑每次勾选的成本。

大家早上好,心情不错!

我没时间写代码。考虑到论坛成员的提示(非常感谢他们的提示),我们得到了这一版本的脚本:

//+------------------------------------------------------------------+
//|                            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));
  }
//+------------------------------------------------------------------+

敬上,弗拉基米尔。

 

下午好!

您能建议如何改进我的机器人,使它只能在一台电脑上运行吗?

(以防止被复制)

亚历山大

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

下午好!

请问如何改进我的机器人,使其只能在一台电脑上运行?

(以防止被复制)

亚历山大

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

最简单的变体。

在 OnInit 函数中插入两行代码。

不使用账号,而是指定向其提供 Expert Advisor 的人的账号,编译并只提供 ex5 文件。

 
Aleksandr Slavskii #:

最简单的选择

在 OnInit 函数中插入两行代码。

不使用账号,而是指定要向其提供 Expert Advisor 的人的账号,编译并只提供 ex5 文件。

非常感谢!

 
Aleksandr Slavskii #:

最简单的选择

在 OnInit 函数中插入两行代码。

不使用账号,而是指定要向其提供 Expert Advisor 的人的账号,编译并只提供 ex5 文件。

客户打开终端后,EA 就会崩溃 :-))

因为存在 ACCOUNT_LOGIN=0 的情况

 
Maxim Kuznetsov #:

客户端打开终端后,"智能交易系统 "崩溃 :-)

因为当 ACCOUNT_LOGIN=0 时会出现以下情况

如果您需要可靠和高质量的服务,请选择自由职业者。

 

很奇怪。我在终端的 "设置 -> 图表 "中设置了 5000 条最大值。我重新加载了终端,将鼠标悬停在带有符号的选项卡上时,显示的是 5000 条。

但这段代码

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;
}


显示的信息是 6201 条。

这是否正确?我希望rates_total 也是 5000。