記事についてのディスカッション

 

新しい記事「より優れたプログラマー(第02部): MQL5プログラマーとして成功するためにやめなければいけない5つのこと」はパブリッシュされました:

この記事は、プログラミングのキャリアを向上させたい人にとって必読です。本連載は、どんなに経験が豊富な読者でも最高のプログラマーになれることを目的としています。議論されたアイデアは、MQL5プログラミングの初心者だけでなくプロにも役立ちます。

この連載では、MQL5プログラミングの経験が少ない人を表すのに初心者という言葉をよく使用します(気を悪くしないでください)。説明しやすくなるのです。これは、この記事が初心者のみを対象としているという意味ではありません。まったく違います。この記事は、プログラミング経験に関係なく、すべての人を対象としています。なぜなら、初心者かどうかを決めるのは、コーディングの習慣と振る舞いで、コーディングの年数ではないからです。

初心者_vs_プロのコーダー 


最初の記事はこちらですので、まだ読んでいない方はご覧ください。それでは、初心者をプロに変える使命を続けることにします。

作者: 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);
それはおそらくパイソン的なミスです。
 

マヌエル・アレハンドロ・セルコス・ペレス

あなたは2/4を整数(0)で割っていて、それがdoubleに解析されています。その代わりに、配当か除数のどちらかをdoubleにする必要があります(そうすれば、除算は「最も詳細な」データ型で行われます)。

他のオプションは(intの日である)可能性があります:

それは多分パイソン的なミスだね。


マニュエル、

本当にありがとう!上記のヒントは魅力的に機能しました。あなたのおかげで、根本的な原因を見つけるために何時間も費やす必要がなくなりました。

 
やれやれ、本当に今になって!
 
ローソク足の始まりだけでなく、新しいローソク足が形成されるまで、1本のローソク足につき1つの取引またはオープンポジションのみを許可する関数を作成するにはどうすればよいでしょうか。newbar関数は、新しいローソク足の開始時のみ許可します。
 
多くの詐欺バッグがある
 
MQL5であれば、OnInitでiMAを初期化する必要があります。

そうでなければ、ティックを 受信するたびに実行することになります。

最後の質問:オープン時間を取り、それに
期間seconds()/2を追加すると、期間の半分になります。





 
Dominik Egert:
MQL5であれば、OnInitでiMAを初期化する必要があります。

そうでなければ、ティックを 受信するたびに実行することになります。

最後の質問:オープン時間を取り、それに
ピリオドseconds()/2を追加すると、ピリオドの半分になります。





コーディング・ヘルプに関する質問はすべて、独立したトピックとしてフォーラムに投稿してください。
 

翻訳者に敬意を表したい。

最初の記事の後、私は疑問を持っていたが、今は著者が白痴プログラマーに彼らが白痴であることを説明したいのだと確信している。著者の皆さん、気を悪くしないでください。それに、あなたが読者に向かって言う傲慢さは、あなたの仕事を無効にしている。