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;
}
現在のEAの計算がすべて終了する前に、新しいティックが到着する確率はどのくらいでしょうか?この場合のみ、データが古くなり、無関係になるような気がします。
私はあなたのコードがカウントする時間をチェックしました - 私も、ちょうど最近私の疑問を持っていた、MT4の計算速度は私のEAに十分ですか、それは今のところ十分であることが判明した、私のコードは約18ミリ秒かかります、すなわち、1秒間に55回チェックされて、ティックは毎分10〜70から来る、毎分50以上のティックの場合、それはキャンドルがあることを意味します。
のように、あなたのコードがどのように動作するか試してみてください。
ティックをカウントするインジケータはこちら - リコンサイル用
まあ、初値が あれば、見逃してしまってすみません
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()演算子が問題を解決してくれます。
例えば、NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5)は目的の 0.00012 になりますか?
追伸:追記・テストしましたが、何もありませんでした。出力はちょうど0.00010で、同じ4ビットなのですが...。
いや、ちょっと違うぞ、ロジャー。
IndicatorDigits()はBorisを 参照。しかし、EAではなくインジケータを参照することになるので、インジケータ自体に挿入する必要があります。
追伸:もう一つ、この機能は、コードをお持ちのインジケーターにのみ適しています。そうすれば、iCustom()を使って呼び出すことが可能になります。
また、iMACD()のような「標準」と呼ばれるものについては、正しい解答がわかりません。
では、NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5の結果は、目的の 0.00000 になりますか。
はい、その通りです。キーワードは、EA本体の計算の中にあった? そして、どうやら標準のインジケーターでは、これは不可能なようです((
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) の小数点以下の桁数をエキスパートボディで計算する際に変更する方法は?正確な解析のためには5(例:0.00012)で表示すべきところ、4(例:0.0001)で表示されています。そして、MT4端末では、チャート上のインジケーターウィンドウに5桁の数値を表示します。
何も変更する必要はありません。標準のインジケータの精度は最大(8桁まで)に設定されています。データの出力精度について間違った結論を出しています。Print() はデフォルトで4桁まで出力し、計算では(例えばExpert Advisorsのガットでは)最大精度が使用されます。
と、このような出力が得られます。
あなたは何も変更する必要はありません、標準の指標では、精度は最大(最大8桁)に設定されています、あなたはデータ出力精度について間違った結論を出しました、なぜならPrint() はデフォルトで最大4桁まで出力します、計算では(例えばエキスパートアドバイザーの腸で)最大精度が使用されます、これを確認するには、例として、 DoubleToStr()を介してダブルを 出力する必要があります。
と、このような出力が得られます。
そうだ、そうだ、そうだ!!! アナトリー - 素晴らしい称賛の言葉です!私はそれにこだわっていました。
人生の真理は「一頭もいいが、二頭もいい」(名言)
何も変更する必要がなく、標準のインジケーターは最高精度(8桁まで)に設定されています
そうなんです、私も同じように疑っていたんです :)