[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 587

 
OK、もしダメだったら、今夜、解決するのを手伝ってくれ。
 
計算結果であるdoubleの 値をintの 代用値としてさらに計算することは可能かどうか教えてください。

   ATR_Din=iATR(NULL,PERIOD_M5,14,1);
   Din_Per210= MathRound(6000*ATR_Din+210);
   Din_Per5  = MathRound(6000*ATR_Din+5);
   
   MA210_DIN  =iMA(NULL,PERIOD_M5,Din_Per210,0,MODE_SMA,PRICE_CLOSE,1);
   MA5_DIN    =iMA(NULL,PERIOD_H1,Din_Per5,0,MODE_SMA,PRICE_CLOSE,1);
   
ここでは、私の選択した変数はdouble 型ですが、iMAでは int 値が必要なところ(MAの周期として)でその値が使用されます。
問題は、この使い方が正しいのか、それとも値をint 型に変換する必要があるのか、ということです。
 
皆さん、こんにちは。最適化の結果 に対してエキスパートテストを実行し、各テスト結果を個別のファイル(htmレポート)に保存するスクリプトがあるかどうか、ご存知の方は教えてください。
 
Craft:
構わないのですが、動作例やリンクはありますか?
コードを渡すか、タスクを渡せば修正します。
 
artmedia70:
計算結果であるdoubleの 値をintの 代用値としてさらに計算することは可能かどうか教えてください。例ここでは、私の選択した変数は

double 型ですが、iMAでは int 値が必要なところ(MAの周期として)でその値が使用されます。このような使い方は正しいのでしょうか?それとも
int 型への変換が必要なのでしょうか?
変換は端数部分を切り落とすだけで自動的に行われます。私が遭遇した唯一の制限は、配列のインデックスに doubleを入れることができないことです。
 
alsu:
変換は端数部分を切り落とすだけで自動的に行われます。私が見たこの使用法の唯一の制限は、配列のインデックスにdoubleを入れることができないことです。
ありがとうございます、心強いです...。:)
もう1つ質問です。
   MA200_DIN =iMA(NULL,PERIOD_M5,Din_Per200,0,MODE_SMA,PRICE_CLOSE,1);
   MA200_UP  =MA200_DIN+20*pt;
   MA200_DN  =MA200_DIN-20*pt;
   
   MA5_DIN  =iMA(NULL,PERIOD_H1,Din_Per5,0,MODE_SMA,PRICE_CLOSE,1);
   MA5_UP   =MA5_DIN+20*pt;
   MA5_DN   =MA5_DIN-20*pt;
コンストラクション
MA200_UP=MA200_DIN+20*pt; 
MA200_DN=MA200_DIN-20*pt; и 
MA5_UP=MA5_DIN+20*pt; 
MA5_DN=MA5_DIN-20*pt;
は動作しません。その値をチャートに表示する場合、それらはすべて同じ値を持つ。
MA200_DIN、MA200_UP、MA200_DNは1.4118、MA200_UP、MA200_DNは1.4118
MA5_DIN, MA5_UP, MA5_DNは1.4106です。
レベル+20点、-20点の計算式がうまくいかないことが判明。
私は何を間違えているのだろう?
 
ptは何に相当するのでしょうか?NormalizeDouble()で出力してみてください。
 
OK、ありがとう、わかったよ...。pt=Pointとし、値を計算したところ ...。
マトロスキンが言ったように、あなたは愚か者です...。:)
 
alsu:
コードを教えていただくか、タスクを設定していただければ、修正します

WelsLabでは、問題のアナログは次のようになります。

MyATR = SMA.Series(((High-Low)/Low), PerB)[i-1] ;

if (BuyAtStop(i,(Open[i] + Open[i]*MyATR), ""))。;

すなわち、バーの開始時にストップポジションが設定され、指定されたレベルに達すると、現在のバーのOpen[i]価格+トリガー(同じオープン価格に、閉じたバーの期間[i-1]で計算したMyATRをかけたもの)で売買ポジションが一度オープンされます。

こちらは、WellLabを例にmql4で得たいものを示しています。

現場の資料を調べ、アナログを作ろうとした。

        MyATR = ((High[0] - Low[0])/Low[0]);
	 BT = Open[0] + Open[0]*iMAOnArray(MyATR ,0,PerB,0,MODE_SMA,1);
        ST = Open[0] - Open[0]*iMAOnArray((MyATR ,0,PerS,0,MODE_SMA,1);

   if (Ask >=  BT)                       // Если разница между
     {                                          // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (Bid <= ST)                       // Если разница между
     {                                          // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

結果:注文が山積みになっているのですが、どのような条件を追加(または変更)すれば、指定したレベルで一度だけ注文が執行されるようになるのか、ご教示ください。

 

注:iMAOnArray関数の最初のパラメータは配列でなければならず、MyATRはスカラーである。正しく理解するためには

1. double MyATR[]を宣言する。

2. 配列のサイズをArrayResize(MyATR,PerB)に設定します。

3. 配列を埋める for(i=1;i<=PerB;i++) MyATR[i-1]=(High[i]-Low[i])/Low[i]; インデックス i は閉じたバーだけが 必要なので 1 から開始する。

4. この後、iMAOnArray(MyATR,0,PerB,0,MODE_SMA,0) を読みます。ここでは、ステップ3でシフトha1をすでに考慮したので、最後のパラメータは0です。


動作確認をしてみてください、もしかしたらこの部分にエラーがあるかもしれません。