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

 
Vasiliy Pushkaryov #:

显示 6201 条形信息

上面写了什么?

printf((string)TerminalInfoInteger(TERMINAL_MAXBARS));
这个故事很可能是为测试者准备的,以便在其中正确计算指标
 
MrBrooklin #:

考虑到论坛成员的提示,我们得到了这个版本的脚本:

敬上,弗拉基米尔

我完全忽略了脚本中非常重要的一点。有必要将批次标准化。这是更正后的版本:

//+------------------------------------------------------------------+
//|                            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=NormalizeDouble((AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/
                              (Stop_Loss*trading_account_currency),2);
//--- блок проверки размера лота на минимум и максимум от возможного
   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));
  }
//+------------------------------------------------------------------+

问候,弗拉基米尔。

 
下午好!
在完成机器人 的正向测试后,我遇到了一个老大难问题:当使用最佳参数集开始单个测试时,策略测试器开始执行,并且似乎执行到了最后(从进度指示器引擎来看),但随后就挂起了。Metatrader 必须重新启动,而单个测试(以及整个前向测试)的结果却丢失了。
测试仪为什么会挂起,如何解决?
亚历山大
 
现在的情况是:点击 "显示交易历史"复选框,周线图上的所有历史记录(向上和向下箭头)都已经变成了实心栅栏。我希望能像其他工具(趋势线、箭头等)一样,设置不在所有时间段显示。
 

下午好。您能告诉我在哪里可以看到基于两个 MAs 交集的智能 交易系统的最简单示例 吗(您可以提供一个课程)?
我知道如何添加一个。我不想进行简单的复制粘贴和加长代码,我知道还有其他方法。
如果在 MQL4 中我没有任何问题,那么在 MQL5 中我无法完全理解如何操作。

 
makssub 智能 交易系统的最简单示例 吗(您可以提供一个课程)?
我知道如何添加一个。我不想进行简单的复制粘贴和加长代码,我知道还有其他方法。
如果在 MQL4 中我没有任何问题,那么在 MQL5 中我无法完全理解如何操作。

你好,请打开 MetaEDitor 5。它有一个内置的(标准)Expert Advisor,基于两个 MA 的交叉点。打开代码并研究它。或者在 CodeBase 中查找。例如,这里有第一个基于两条 MAs 交集的EA

弗拉基米尔


 
MrBrooklin #:

你好,请打开 MetaEDitor 5。它有一个内置的(标准)智能交易系统,基于两个 MA 的交叉点。打开代码并研究一下。或者在 CodeBase 中搜索。例如,这是第一个基于两条 MAs 交集的EA

弗拉基米尔


谢谢,我看了一下。

我知道 OnInit 会发生什么。

如何将其正确地拧到 OnTick 中?

 
makssub #:

谢谢,我查了一下。

在 OnInit 中,我大致明白发生了什么。

怎样才能把它全部整合到 OnTick 中呢?

我展示的只是 编写智能交易系统的一种变体,但这种变体可以有很多。这完全取决于程序员的资质。智能交易系统的结构可以是这样的:

//+------------------------------------------------------------------+
//|                                                            1.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"
//+------------------------------------------------------------------+
//| Input variables                                                  |
//+------------------------------------------------------------------+

// здесь размещаем входные параметры советника

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // здесь деинициализируем то, что считаем нужным   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- абстрактный пример советника

   Check_Trading();           // проверим условия разрешающие торговлю
   Signal_Up();               // ищем сигнал для открытия длинной позиции
   Open_Buy_Position();       // открываем длинную позицию
   Close_Buy_Positions();     // закрываем длинную позицию
   
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Check_Trading()
  {

   // здесь вставляем условия разрешающие торговлю

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void  Signal_Up(); 
  {

   // здесь вставляем условия, при которых появляется сигнал на покупку

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Open_Buy_Position(); 
  {

   // здесь вставляем функцию открытия длинной позиции

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Close_Buy_Positions();
  {

   // здесь вставляем функцию закрытия длинной позиции

  }
//+------------------------------------------------------------------+

类似这样我再次强调--这不是编写智能交易系统的指南,而是我在编写智能交易系统时遵循的大致结构

再见,弗拉基米尔。

 
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // здесь инициализируем то, что считаем нужным
   return(INIT_SUCCEEDED);

我不知道怎么写

 
Лауреат #:

我不知道怎么写

你到底不清楚什么?如何创建 EA 初始化函数?那就试试学习这篇初学者文章 吧。

再见,弗拉基米尔。