新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1025

 

你能建议一个适当的 "之 "字形,请...因为我一直在使用其中的一个,它有时会变得非常摇摆不定...


 

请告诉我,我不太明白--在测试者的图表中是这样的,所有的点都是M1,开始的存款是5000,但缩减显示为62%(3325),这显然不在图表上。差异?

是建模的质量吗?测试人员如何计算这个缩水?如果它计算出来,为什么不能在股权曲线上看到?



 
Aleksey Mavrin:

如果它计算出来了,为什么不显示在权益曲线上?

在一个订单关闭之前,MT4不会显示绿色的公平线。

阿列克谢-马夫林

缩减率显示为62%(3325),而图表上显然没有显示。差异性?

测试器根据权益计算缩水,但相对于有最大缩水的订单,也就是说,也许你在测试器里有一个未平仓的订单,你把它平均化,你的总权益可能在加,但最亏损的订单在测试的某一时刻出现了大缩水。


HH:建模的质量非常低,你在所有的ticks上测试TS,但选择了一个非常大的TF来测试https://www.mql5.com/ru/articles/1486

 
Igor Makanu:

在一个订单关闭之前,MT4不会显示绿色的股票线,一旦关闭,绿色的线就会出现(MT5没有这个缺点)。

测试器考虑的是权益的缩水,但相对于有最大缩水的订单,也就是说,你在测试器中可能有一个未平仓的订单,你平均下来,你的总权益可能在+,但最亏损的订单在测试的某一时刻出现了大亏损


ZS:模拟的质量很低,你在所有的ticks上测试TS,但选择了一个非常大的TF作为测试https://www.mql5.com/ru/articles/1486

这是正确的,平均数。现在更清楚了,非常感谢!关于股权行的唯一事情是。

我分析了他的交易图表(我指的是visualizer)的网格平均值,也就是说,他的缩水非常频繁,而图表上的权益线并没有反映出这一点,比如说这里

交易2018年12月04日。交易1238,在图表上这是在从头到尾的第二条垂直虚线附近,其下的交易号码是1251。那里的绿色权益线没有任何缩减的暗示。

也就是说,现在还不清楚它是怎么画出来的,但我的结论是,它不可能被信任,我们应该停止使用MT5)

R.S. 我不知道为什么模拟质量这么差,TF是M1,所有的TICK。


 
Aleksey Mavrin:

这是正确的,平均数。这就更有意义了,非常感谢你!"。关于股权行的唯一事情是。

我分析了他的交易图表(我指的是visualizer)的网格平均值,也就是说,他的平仓非常频繁,而图表上的权益线并没有反映出这一点,比如说这里

交易2018年12月04日。交易1238,在图表上这是在从头到尾的第二条垂直虚线附近,其下的交易号码是1251。那里的绿色权益线没有任何缩减的暗示。

也就是说,现在还不清楚它是如何画出来的,但我的结论是不可能被信任,应该在MT5上进行)

R.S. 我不知道为什么模拟质量这么差,TF是M1,所有的TICK。


MetaTrader 4的测试器比MetaTrader 5的测试器非常逊色。它不能显示资金,直到东西被关闭 - 它只在获利/亏损的时刻显示。在你的图片中,所有的空头头寸都是一次性平仓的,这就是为什么报告中开仓和平仓之间没有公平线的原因。如果你在开仓和平仓 之间至少关闭了一个仓位,那么你在平仓时的股票缩水将反映在你的报告中。也就是说,报告会显示两个缩减--在资产负债表上是由于关闭一个亏损的头寸,在资金上是由于当前所有未结头寸的资金浮动损失而导致的当前资金缩减。

 
Aleksey Mavrin:

也就是说,现在还不清楚它是如何画出来的,但我的结论是,没有办法相信它,我们应该把它归咎于MT5)

你可以信任,但你需要阅读整个测试者报告

在代码中加入你对缩减的估计,并在OnDeinit()的日志中显示,如果你想检查测试者是如何计算最大缩减的,那么可以这样做

double minOrderProfit = 0.0;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Print("minOrderProfit = ",minOrderProfit);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int i=0;i<OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) minOrderProfit = fmin(minOrderProfit,OrderProfit());
   }

// основной код

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


ZS:没有检查过,但应该可以。

 
Igor Makanu:

你可以信任,但你需要阅读整个测试者报告

在代码中加入你的缩水估计值,并在OnDeinit()中输出到日志中,如果我们谈论的是如何在计算最大缩水时检查测试者,那么像这样的东西


ZS:没有检查过,但应该可以。

我知道了,谢谢。我正在收集我的EA中的所有统计数据,以及一般的测试仪-优化器的统计数据,我正在计算利差系数和其他,波动率和DD,等等,每天,每月,总数,当然,一切我可以。

这是用市场上的一个机器人做的实验,我把它用来检查,因为我知道这样的曲线图不可能存在如此巨大的利润。我确信我是对的,也就是说,因为MT4中股权曲线的显示方式

我确定我是对的,因为MT4中股权曲线的绘制方式,对产品能力做出了错误的评估(如果你看交易图),而图表都在市场上,你明白吗? :) S.S. 他们向人们出售狗屎

 

下午好。

已经写了一个指标,但意识到有一个错误!!。向红色水平线提问(从当天会议开始)。

由于某些原因,我试图使用它,但它在专家顾问中没有正常 工作, 想我没有得到正确的答案。而且它发誓在EA中的条目。

(2019.12.19 11:25:31.532 Session Day (EURUSDrfd,H1) array out of range in 'Session Day.mq5' (144,41)

来自大厅的帮助...

提前感谢您的提示!


PS

红线方向(会议开幕)是右边,从今天到昨天!!!!!!!。

//+------------------------------------------------------------------+
//|                                                  Session Day.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   2
//---- plot ColorCandles
#property indicator_type1   DRAW_CANDLES
#property indicator_color1  White,Blue,Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_label1  "Open;High;Low;Close"
//----
#property indicator_type2   DRAW_LINE
#property indicator_color2  Red
#property indicator_style2  STYLE_SOLID
#property indicator_width2  3
#property indicator_label2  "Line open session"
//-----
input int     StartCandle = 100;         //Кол-во свечек для расчета средней
input int     StartBarDay = 0;           //Час начала торгового дня
input int     BarSession1 = 10;          //Чвс Открытия дневной сессии
input int     BarSession2 = 19;          //Чвс Закрытия дневной сессии
input bool    LevelOpenSession = true;   //Уровень открытия сессии дня
//---
double ExtOpenBuffer[];
double ExtHighBuffer[];
double ExtLowBuffer[];
double ExtCloseBuffer[];
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtOpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtHighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ExtLowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,ExtCloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,ExtBuffer,INDICATOR_DATA);
//--- установим цвет контура и теней
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrWhite);
//--- установим цвет тела для бычьей свечи
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrBlue);
//--- установим цвет тела для медвежьей свечи
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
   if(Period()<PERIOD_H4)
      IndicatorSetString(INDICATOR_SHORTNAME,"Session Day \nOpen session: "+string(BarSession1)+" hour \nClose session: "+string(BarSession2)+" hour");
   else
      IndicatorSetString(INDICATOR_SHORTNAME,"Session Day");
   int bars=iBars(NULL,_Period);
   for(int b=0; b<5; b++)
      PlotIndexSetInteger(b,PLOT_DRAW_BEGIN,bars-StartCandle);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   int i;
   if(rates_total<24)
      return(0);
   MqlDateTime tm;
//----
   if(prev_calculated==0)
     {
      ArrayInitialize(ExtOpenBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtHighBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtCloseBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtBuffer,EMPTY_VALUE);
      i=0;
     }
   else
      i=prev_calculated-1;
//----
   while(i<rates_total && !IsStopped())
     {
      TimeToStruct(time[i],tm);
      if(Period()==PERIOD_MN1 && (tm.mon==4 || tm.mon==8 || tm.mon==12))
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_W1 && tm.mon>=1 && tm.mon<=12 && tm.day>=1 && tm.day<8)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_D1 && tm.day_of_week==1)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()==PERIOD_H4 && tm.hour==StartBarDay && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()<=PERIOD_H1 && tm.hour==BarSession1 && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
      if(Period()<=PERIOD_H1 && tm.hour==BarSession2 && tm.min==0)
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }


                     ПРОБЛЕМА !!!!!
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      if(LevelOpenSession==true && Period()==PERIOD_H1 && tm.hour==BarSession1 && tm.min==0)
         for(int j=0; j<24; j++)
           {
            ExtBuffer[i-j]=open[i];
            if(ExtBuffer[i-j]!=ExtBuffer[i-j-1])
               ExtBuffer[i-j-1]=EMPTY_VALUE;
           }
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      //---
      i++;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+




 
kopeyka2:

下午好。

已经写了一个指标,但意识到有一个错误!!。向红色水平线提问(从当天会议开始)。

由于某些原因,我试图使用它,但它在专家顾问中没有正常 工作, 想我没有得到正确的答案。而且它发誓在EA中的条目。

(2019.12.19 11:25:31.532 Session Day (EURUSDrfd,H1) array out of range in 'Session Day.mq5' (144,41)


 ExtBuffer[i-j]=open[i];
            if(ExtBuffer[i-j]!=ExtBuffer[i-j-1])
               ExtBuffer[i-j-1]=EMPTY_VALUE;

在这一点上,在某些时候,你访问了一个负数组索引。 检查设置和检查i, j的所有边界条件

 
Artyom Trishkin:

MetaTrader 4测试器比MetaTrader 5要差很多。它不能显示资金,直到东西被关闭 - 它只在获利/亏损的时刻显示。在你的图片中,所有的空头头寸都是一次性平仓的,这就是为什么报告中开仓和平仓之间没有公平线的原因。如果你在开仓和平仓 之间至少关闭了一个仓位,那么你在平仓时的股票缩水将反映在你的报告中。也就是说,报告会显示两个缩减--在资产负债表上是由于关闭一个亏损的头寸,在资金上是由于当前所有未结头寸的资金浮动损失而导致的当前资金缩减。

这是很清楚的描述,谢谢你。由于某些原因,一开始没有注意到这个帖子(

还有一个问题)--在测试人员内部要求提供有关账户状态的信息,如AccountEquity,等等。- 无论某些位置是否关闭,它都能提供正确的图片?

例如,如果长期交易被打开,并且每天都记录股权缩水,测试者不会作弊?

原因: