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

 
artmedia70:

現在のEAの計算がすべて終了する前に、新しいティックが到着する確率はどのくらいでしょうか?この場合のみ、データが古くなり、無関係になるような気がします。

私はあなたのコードがカウントする時間をチェックしました - 私も、ちょうど最近私の疑問を持っていた、MT4の計算速度は私のEAに十分ですか、それは今のところ十分であることが判明した、私のコードは約18ミリ秒かかります、すなわち、1秒間に55回チェックされて、ティックは毎分10〜70から来る、毎分50以上のティックの場合、それはキャンドルがあることを意味します。

のように、あなたのコードがどのように動作するか試してみてください。

int tik,barM1


int init(){
   barM1  = Bars;
   tik = 0;

return (0);
}


//_______________________________________________________
//  это добавить в start()
//_______________________________________________________
int start=GetTickCount();
 

 // некие серьёзные вычисления...


tik++;
Print("Время вычисления ", GetTickCount()-start, " миллисекунд.");

int counted  = Bars;
if (counted != barM1) {
print("за один бар было принято ",tik, "тиков" )
tik=0;
barM1=counted;
}

ティックをカウントするインジケータはこちら - リコンサイル用

まあ、初値が あれば、見逃してしまってすみません

OpnPrice =iOpen(NULL,PERIOD_M5,0); 閉じたバーでのみ変更可能 - 上記のコードで条件付きif(counted != barM1) {...

ファイル:
 

iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) の小数点以下の桁数をエキスパートボディで計算する際に変更する方法は?正確な解析のためには5(例:0.00012)で表示すべきところ、4(例:0.0001)で表示されています。そして、MT4端末では、チャート上のインジケーターウィンドウに5桁の数値を表示します。

 
NormalizeDouble() 演算子が問題を解決してくれます。
 
Roger:
NormalizeDouble()演算子が問題を解決してくれます。


例えば、NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5)は目的の 0.00012 になりますか?

追伸:追記・テストしましたが、何もありませんでした。出力はちょうど0.00010で、同じ4ビットなのですが...。

 

いや、ちょっと違うぞ、ロジャー

IndicatorDigits()はBorisを 参照。しかし、EAではなくインジケータを参照することになるので、インジケータ自体に挿入する必要があります。

追伸:もう一つ、この機能は、コードをお持ちのインジケーターにのみ適しています。そうすれば、iCustom()を使って呼び出すことが可能になります。

また、iMACD()のような「標準」と呼ばれるものについては、正しい解答がわかりません。

 
pathfinder1:

では、NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5の結果は、目的の 0.00000 になりますか。

はい、その通りです。キーワードは、EA本体の計算の中にあった? そして、どうやら標準のインジケーターでは、これは不可能なようです((
 
pathfinder1:

iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) の小数点以下の桁数をエキスパートボディで計算する際に変更する方法は?正確な解析のためには5(例:0.00012)で表示すべきところ、4(例:0.0001)で表示されています。そして、MT4端末では、チャート上のインジケーターウィンドウに5桁の数値を表示します。

何も変更する必要はありません。標準のインジケータの精度は最大(8桁まで)に設定されています。データの出力精度について間違った結論を出しています。Print() はデフォルトで4桁まで出力し、計算では(例えばExpert Advisorsのガットでは)最大精度が使用されます

Print("iMACD ", DoubleToStr(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0), 8));

と、このような出力が得られます。

 
ToLik_SRGV:

あなたは何も変更する必要はありません、標準の指標では、精度は最大(最大8桁)に設定されています、あなたはデータ出力精度について間違った結論を出しました、なぜならPrint() はデフォルトで最大4桁まで出力します、計算では(例えばエキスパートアドバイザーの腸で)最大精度が使用されます、これを確認するには、例として DoubleToStr()を介してダブルを 出力する必要があります。

と、このような出力が得られます。


そうだ、そうだ、そうだ!!! アナトリー - 素晴らしい称賛の言葉です!私はそれにこだわっていました。

人生の真理は「一頭もいいが、二頭もいい」(名言)

 
ToLik_SRGV:

何も変更する必要がなく、標準のインジケーターは最高精度(8桁まで)に設定されています


そうなんです、私も同じように疑っていたんです :)
 
今までよくあったように-真実は表面にある))自分の非を認めます。