これはどうして可能でしょうか。

私はそれがEUR / USDでそれをテストするときそれが123 <123のように動作し、私がUSD / JPYでそれをテストするときは通常の動作であるinit()関数にいくつかの問題があり

これがコードです:

#property copyright ""
#property link ""
extern double levelcount = 30。
外部整数p = 3。
ダブルレベル[20];
double init_level = 1.4000。
int n;
int init()
{
Alert( "init()のスター");

double vect_init_level;
ダブルCCCC。
double final_level;
ダブルbbb。
int j = 0。

if(数字> 3)bbb = 10000;そうでなければbbb = 100。
vect_init_level = init_level;
final_level = init_level (levelcount / bbb );

while(vect_init_level <final_level)
{
level [j] = vect_init_level;

j ;
ccc = 5。
vect_init_level = vect_init_level (ccc / bbb);
}

n = j。
Alert( "final_level ="、DoubleToStr(final_level、5));
アラート( "配列サイズ"、n);
(j = 0; j <n; j )Alert( "level [j] ="、DoubleToStr(level [j]、5));

アラート( "end of init()");
(0)を返します。
}

そしてEURUSDの結果はこれです:

2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:警告:init()の終わり
2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:アラート:レベル[j] = 1.40300
2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:アラート:レベル[j] = 1.40250
2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:アラート:レベル[j] = 1.40200
2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:アラート:レベル[j] = 1.40150
2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:アラート:レベル[j] = 1.40100
2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:アラート:レベル[j] = 1.40050
2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:アラート:レベル[j] = 1.40000
2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:アラート:配列サイズ7
2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:アラート:final_level = 1.40300
2009.09.22 13:50:17 2009.09.01 00:00テストEURUSD、M5:アラート:init()のスター
200 9.09.22 13:50:17テスト入力:レベルカウント= 30。 p = 3。

上記のコードのwhile構造体には条件(vect_init_level <final_level)があり、<=のように振る舞うため、なぜレベル配列の最後の値がfinal_levelの値をとるのか

なんでこんなことが起こっているの?

反対側に私がUDS / JPYでそれをテストするとき、結果はOKです:

2009.09.22 13:53:41 2009.09.01 00:00テストUSDJPY、M5:警告:init()の終わり
2009.09.22 13:53:41 2009.09.01 00:00テストUSDJPY、M5:アラート:レベル[j] = 1.65000
2009.09.22 13:53:41 2009.09.01 00:00テストUSDJPY、M5:アラート:レベル[j] = 1.60000
2009.09.22 13:53:41 2009.09.01 00:00テストUSDJPY、M5:アラート:レベル[j] = 1.55000
2009.09.22 13:53:41 2009.09.01 00:00テストUSDJPY、M5:アラート:レベル 胎袤 窺軌旭 錫 屋姐姐臆 嘘叉該官 屋姐姐葦 旭紺テストUSDJPY、M5:アラート:レベル[j] = 1.45000
2009.09.22 13:53:41 2009.09.01 00:00テストUSDJPY、M5:アラート:レベル[j] = 1.40000
2009.09.22 13:53:41 2009.09.01 00:00テストUSDJPY、M5:アラート:配列サイズ6
2009.09.22 13:53:41 2009.09.01 00:00テストUSDJPY、M5:アラート:final_level = 1.70000
2009.09.22 13:53:41 2009.09.01 00:00テストUSDJPY、M5:アラート:init()のスター
2009.09.22 13:53:40テスト入力:levelcount = 30; p = 3。

final_levelの前に停止し、すべて問題ありません

誰もが私にこれを説明してもらえますか?私の論理の間違いはどこにありますか?


これを変更して、doubleを正規化したようにします。

while(NormalizeDouble(vect_ini t_level、Digits)<NormalizeDouble(final_level、Digits)){

比較のようなことをするときあなたのdoubleを正規化することは良い習慣です。




3884: https://www.mql5.com/en/forum/120529


Originally posted 2019-08-03 23:58:34.

Translate »