初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 456

 
E_Ghazaryan:
うん、そうだね =D )))すでに添付しています)))

これらのパラメータはすべて、iCustom()内のインジケータ名の後にカンマで区切って記載し、その後にさらに2つのパラメータ、バッファ番号とデータを取得するためのバー番号を記載します。すなわち

iCustom(Symbol(),Period(), "_MTF_ADX3", 0, 500, 6, 6, 8, 14, 6, 6, 2, true, false, buffer_number, bar_number) を参照。

リストアップされた値はすべてEAの外部変数で設定でき、これらの変数の名前はハードコードされた値の代わりにiCustom()に書き込むことができます。

 

その理由を教えてください。

double d = 0.07とした。

d =NormalizeDouble(d,2);

いずれの場合も d== 0.070000000000001

小数点以下2桁を残すにはどうしたらよいですか?

 
pusheax:

その理由を教えてください。

double d = 0.07とした。

d = NormalizeDouble(d,2);

いずれの場合も d== 0.070000000000001

小数点以下2桁を残すには?


Print()でJournalに出力する場合、正規化された数値は思ったより小数点 以下の桁数が多くなる場合があることに注意してください。例えば、こんな感じです。

   double a=76.671;             // нормализованное число с 3 знаками после запятой
   Print("Print(76.671)=",a);   // выведем его как есть
   Print("DoubleToString(a,8)=",DoubleToString(a,8)); // выведем с заданной точностью

がターミナルに出力されます。

  DoubleToString(a,8)=76.67100000

  Print(76.671)=76.67100000000001


つまり、印刷の場合、余分な値を出力しても問題ないのです。

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Karputov Vladimir:


Print()で正規化した数値をJournalに出力する場合、小数点 以下の桁数が予想以上に多くなる可能性があることに注意してください。例えば、こんな感じです。

がターミナルに出力されます。


そのため、印刷の場合、余分な値を出力することは問題ない。

ありがとうございます。ただ、0.07ロットでポジションを持とうとするとエラーが出るので(問題かと)、何か別の原因がありそうなので、もう少し調べてみます。
 
pusheax:
ありがとうございます、ただ、0.07ロットでポジションを持とうとするとエラーになります(それが問題かと)、何か別の原因があるのでしょう、もっと調べてみます。
まず、エラー番号の説明を見ることです。これにより、検索経路を短縮することができます。
 

こんばんは

動的配列を 宣言しました

double all_order[][10]。

OnInitで再定義しました。

ArrayResize(all_order, 20)を使用します。

関数にデータを入力する

void OR_spisok(double a0, double a1, double a2, double a3, double a4, double a5)

{

int a10=int(a0);

all_order[a10][0]=a0;

all_order[a10][1]=a1;

all_order[a10][2]=a2;

all_order[a10][3]=a3;

all_order[a10][4]=a4;

all_order[a10][5]=a5;

}

3行で問題なく動作、4行で固まる

2015.10.09 20:13:47.908 3102 EURUSD,H1: '3102.mq4' の配列が範囲外 (393,10)になっています。

393,10である。

all_order[a10][0]=a0;

どうしたものか

行削除#property strict

スクリプトは動作していますが、この行がなくても続行できますか?

 
pr0gre5:

こんばんは

動的な配列を 宣言した


プロパティの厳密な 行を削除

スクリプトは動作していますが、この行がなくても続行できますか?

はい
 
Artyom Trishkin:

これらのパラメータはすべて、iCustom()内のインジケータ名の後にカンマで区切って記載し、その後にさらに2つのパラメータ、バッファ番号とデータを取得するためのバー番号を記載します。すなわち

iCustom(Symbol(), Period(), "_MTF_ADX3", 0, 500, 6, 6, 8, 14, 6, 6, 2, true, false, buffer_number, bar_number) を参照。

リストアップした値はすべてEAの外部変数で設定でき、ハードコードされた値ではなく、その変数名をiCustom()に書き込むことができます。

ご返信ありがとうございました。しかし、実は最初はそうしていたのですが、間違った値が返ってきたため、Expert Advisorがインジケータの標準パラメータを使用するように、iCustomからパラメータを削除することにしました。しかし、いずれの場合もEAは誤った値を取得します。例えば、AlertではBlueラインに30.32362が表示されますが、指標チャートを見ると同じ場所に22.3320が表示されています。また、他のラインも同様です。
 
E_Ghazaryan:
返信ありがとうございました。ただ、最初はそうしていたのですが、間違った値が出たときに、iCustomからパラメータを削除して、EAが標準のインジケータのパラメータを使うようにしたことです。しかし、どちらの場合もExpert Advisorは間違った値を受け取ります。例えば、AlertではBlueラインに30.32362が表示されますが、指標チャートを見ると同じ場所に22.3320が表示されています。そして、他のラインも同様です。
インジケータからデータを取得するコードを示してください。
 
Artyom Trishkin:
インジケータからデータを取得するコードを示してください。

コードが大きかったんです。しかし、Expert Advisorがルール通りに動かないという問題の原因を探るため、この部分を切り離してテストを開始しました。

double Ind_Blue=iCustom(NULL, 0, "_MTF_ADX3",1,0);

double Ind_Red=iCustom(NULL, 0, "_MTF_ADX3",2,0);

Alert(" Ind_Blue= " , Ind_Blue , " Ind_Red= " , Ind_Red);

Expert Advisorのファイルも添付しておきます。あなたの時間を無駄にしたくないのですが、問題が見つかりません。

また、同じような問題を持つインジケータ(Adx mtf)があります。そのためのmq4ファイルを持っています。しかし、コードに問題はなさそうです。

ファイル:
_MTF_ADX3.ex4  5 kb
Adx_mtf.ex4  21 kb
Adx_mtf.mq4  6 kb
理由: