文章 "更好的程序员(第 02 部分):停止做这 5 件事变为一名成功的 MQL5 程序员"

 

新文章 更好的程序员(第 02 部分):停止做这 5 件事变为一名成功的 MQL5 程序员已发布:

对于任何想要提高编程职业生涯的人来说,这是一篇必读文章。 本系列文章旨在尽最大可能令您成为最佳程序员,无论您有多少经验。 研讨的思路适用于 MQL5 编程萌新和专业人士。

我在本系列文章中经常使用 noob(菜鸟) 这个词来描述 MQL5 编程方面经验较少的人(请不要因此而感到冒犯)。 它令其很容易建立联系。 这并不意味着本文仅针对菜鸟。 绝对不是! 这适用于所有人,无论您有多少编程经验,因为您曾为菜鸟的原因是您的编码习惯和行为 ……,而不是有多少年的编码经验。

noobs_vs_professional 编程者 


对于那些尚未读过的人,第一篇文章在此,那么我来继续推进这个任务,将菜鸟培养为专业人士。

作者:Omega J Msigwa

 
感谢您的文章
 

你们好、

我是个新手。我有丰富的编程经验,但才开始用 MQL5 编程--这是我的第一门类似于 C++ 的语言。我一直在阅读参考文档,但没有发现我的错误--我期望从 expoMA 返回的值在图表上打印/注释 为 0.0--我是不是犯了某种语法错误?我在编译时没有遇到任何问题/错误。如果您能提供任何意见,我们将不胜感激。

void OnTick(
  {   
   int days = 3; 
   
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
  
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   double movingAverageValues[];
   
   double bidAskAverage = (Ask + Bid)/2;
   
   int exponentialMovingAverage = iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE);
      
   ArraySetAsSeries(movingAverageValues,true);
   
   CopyBuffer(exponentialMovingAverage,0,0,3,movingAverageValues);

   double alpha = expoMA(days);
   
   double dEMA = bidAskAverage - movingAverageValues[1]; // 这里的索引 1 代表 t - 1 值的 EMA
      
   Comment("The ask price is: " +     DoubleToString(Ask,5) + "\n"
           "The bid price is: " + DoubleToString(Bid,5) + "\n" 
           "The average price is: " + DoubleToString(bidAskAverage,5) + "\n"
           "The custom expoMA value is: " + DoubleToString(alpha,5) + "\n"
           "The dEMA value is: " + DoubleToString(dEMA,5)) ;   
   }

double expoMA(int days=2)
   {   
    double alpha = 2 / (days + 1);   
    NormalizeDouble(alpha,5);
    return(alpha);
   }
 
spinner461:

你们好

我是个新手。我有丰富的编程经验,但才开始用 MQL5 编程--这是我的第一门类似于 C++ 的语言。我一直在阅读参考文档,但没有发现我的错误--我期望从 expoMA 返回的值在图表上打印/注释 为 0.0--我是不是犯了某种语法错误?我在编译时没有遇到任何问题/错误。如果您能提供任何意见,我们将不胜感激。

double expoMA(int days=2)
   {   
    double alpha = 2.0 / (days + 1);

    //...
   }

您将 2/4 除以整数 (0),然后解析为 double。相反,你应该让除数或被除数中的一个是 double(这样除法就在 "最详细 "的数据类型中完成了)。

其他选项可以是(在除数为 int 的情况下):

double alpha = double(2) / (days + 1);
double alpha = 2 / (days + 1.0);
double alpha = 2 / double(days + 1);
这可能是 Python 的一个错误,嘿嘿
 

曼努埃尔-亚历杭德罗-塞科斯-佩雷斯

您正在将 2/4 除以整数 (0),然后将其解析为 double。相反,你应该让除数或被除数中的一个是 double(这样除法就在 "最详细 "的数据类型中进行了)。

其他选项可以是(被除数是一个 int):

这可能是 python 的一个错误。


嘿,曼纽尔、

非常感谢!上面的提示非常管用。你让我不用再花很多时间去寻找根本原因了。

 
哦,天哪,真的是这样!
 
我怎样才能创建一个函数,不仅在蜡烛图开始时,而且在新蜡烛图形成之前,每根蜡烛图只允许 1 笔交易或开仓。newbar 函数只允许在新蜡烛开始时进行交易
 
有很多骗人的袋子
 
如果是 MQL5,则应在 OnInit 中启动 iMA。

否则,您将在接收到的每个 tick 时执行该操作。

您的最后一个问题:将打开时间加上
Period seconds()/2,这样您就进入了周期的一半。





 
Dominik Egert:
如果是 MQL5,则应在 OnInit 中启动 iMA。

否则,您将在接收到的每个 tick 时执行该操作。

您的最后一个问题:将打开时间加上
Period seconds()/2,这样就进入了周期的一半。





每个有关编码帮助的问题都应作为独立主题发布在论坛上
 

为译者点赞。

读完第一篇文章后,我曾有过怀疑,但现在我确信,作者是想向白痴程序员解释他们是白痴。作者,别见怪,这篇文章是写给你看的。此外,你对读者的傲慢态度也让你的作品失去了意义。