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

 

下午好!

请提供帮助:我们的目标是在价格穿越 MA 时实现平仓

在这部分代码中

if(Bid<iMA(Symbol(),0,Fast_Ma_Period,Fast_Ma_Shift,Fast_Ma_Method,Fast_Ma_Price,0) && CountBuy()>0)
          
           
     {
     for(int i=OrdersTotal ()-1; i>=0; i--)
     {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderMagicNumber ()== MagicNumber && OrderType() == OP_BUY)
       if(!OrderClose(OrderTicket(), OrderLots(),Bid, Slippage, Black))
       Print("Ошибка");

在测试仪上 看到了以下图片:价格穿越 MA,并在蜡烛收盘/下一根蜡烛开盘时平仓,此时离预期的平仓水平(MA 边界)已经很远 ....。

附加的文件:
 
rex1818 平仓。

在这部分代码中

在测试仪上 看到以下情况:价格穿越 MA,并在蜡烛收盘/下一根蜡烛开盘时平仓,此时离预期的平仓水平(MA 边界)已经很远 ....。

刻度线的波动性比刻度线上的平均 MA 要大得多,因此 MA 值出现的刻度线之间的价差是很常见的。价格是离散的,我希望您不要混淆买入价和卖出价(即按买入价计算的 MA 值和收盘开盘价也是买入价,按卖出价计算的 MA 值和价格也是卖出价)。

Zy,你可以不按买入价或卖出价重新计算 ma,而是加上价差再减去,这样误差会很小。
 
Valeriy Yastremskiy #:

刻度线的波动幅度远大于刻度线的平均 MA 值,因此 MA 值出现的刻度线之间的价差是很常见的。价格是离散的,我希望您不要混淆买入价和卖出价(即按买入价计算的 MA 值和收盘开盘价也是买入价,按卖出价计算的 MA 值和价格也是卖出价)。

Zy,顺便说一下,你不能按买入价或卖出价重新计算 ma,而是将价差加到减去,这样误差会很小。

感谢您的回答!

今天我将考虑您的建议,试着解决这个问题。

 
rex1818 平仓。

在这部分代码中

在测试仪上 看到如下图所示:价格穿越 MA,并在蜡烛收盘/下一根蜡烛开盘时平仓,此时离预期的平仓水平(MA 边界)已经很远 ....。

不是选择了以收盘价测试吗?

 
Alexey Viktorov #:

不是选择关闭酒吧进行测试吗?

下午好!

测试模型:所有 ticks (.....)。我知道最准确的...

 
rex1818 #:

下午好!

测试模型: 所有刻度线 (.....)。我知道最准确的...

Expert Advisor(智能交易系统)不是根据新条形图的打开而编写的吗?

您所显示的那部分代码不足以更准确地推测这种行为的原因。

 

感谢大家的回复!

找到错误了。

现在一切正常。

 

如果图表有 3000 个条形图的限制,而我们需要获取 2000000 个条形图的历史数据,是否有可能在不更改参数--窗口中的最大条形图 ???? 的情况下提取历史数据?


当数组变成 200 万个索引时,我的系统就会超载。我必须寻找一种绕过图表卸载历史数据的解决方案。

   void SMA(const int aRatesTotal,const int aPrevCalc,const double  &aData[], double  &aMA[])
     {
      int Start=0;
      if(aPrevCalc==0)
        {
         for(int i=0;i<aRatesTotal;i++)
           {
            if(aData[i]!=0 && aData[i]!=EMPTY_VALUE)
              {
               Start=i+m_MAPeriod-1;
               break;
              }
           }
         aMA[Start]=0;
         for(int i=Start;i>Start-m_MAPeriod;i--)
           {
            aMA[Start]+=aData[i];
           }


但在此之前,我需要向这个数组提供数据。


   rt=aRatesTotal;
   prv=aPrevCalc;
   for(int i=0; i<m_max_period; i++)
     {
      ArrayResize(d[i].m,rt);
      ArrayResize(d[i].f,rt);
     }

   chsma.Solve(rt,prv,aData,d[m_max_period-1].m);
看来系统崩溃不是因为一个数组,而是因为它开始创建如此大的数组。
 

大家下午好!

我想从 Mql4 转到 Mql5。我开始阅读Mql5 参考手册。不幸的是,我看懂了,但不是全部。我在哪里可以找到像 Kovalev 的 Mql4 教科书那样 的信息,可以 从基础开始 详细描述 Mql5 的功能 最重要的是,它可以给出编码最简单和最常见操作的具体示例。也就是说,我们需要的不是针对高级用户的培训信息,而是针对需要学习基础知识并从基础知识开始的初学者的培训信息。

感谢您的帮助

 
ANDREY #:

大家下午好

我想从 Mql4 转到 Mql5。我开始阅读Mql5 参考手册。不幸的是,我看懂了,但不是全部。我在哪里可以找到像 Kovalev 的 Mql4 教科书那样 的信息,可以 从基础开始 详细描述 Mql5 的功能 最重要的是,它可以给出编码最简单和最常见操作的具体示例。也就是说,我们需要的不是针对高级用户的培训信息,而是针对需要学习基础知识并从基础知识开始的初学者的培训信息。

感谢您的帮助

代码库中有最初在 MT4 上编写的智能交易系统和指标,然后在 MT5 上重新编写 - 您可以使用它们进行培训。

在许多方面,语言是相似的,给自己设定一个任务,在 MT5 上重写您能理解的代码--并积极使用说明和门户网站上的搜索功能--您总能找到答案,包括在文章中。