mql5言語の特徴、微妙なニュアンスとテクニック - ページ 94 1...87888990919293949596979899100101...247 新しいコメント Nikolai Semko 2018.07.31 16:04 #931 コンスタンチンまた、GetMicrosecondCountの実用化によって、現バージョンのプログラム全体の動作が損なわれることをどのように考えていますか? 実用化について説明してください。 例えば、Renatが説明した、コードの実行時間を mcsで正確に測定するという方法以外では、c++でもここでもバリエーションは見当たりません。 正直言って、あなたのこだわりは理解できません。この機能の範囲は、便宜上、かなり広範囲に渡っています。 期間の異なる複数のタイマーを同時に動作させることができるマルチタイマーについては、すでに前述 したとおりです。 これもfxsaberさんがすでに書かれて いることです。 ミリ秒関数と比較したマイクロ秒関数は、スピードテストだけでなく、Expert Advisorの実行中に様々なテレメトリ情報を取得するのに有効です。 このような遠隔測定の精度が16ミリ秒(正確には1/64秒=15625マイクロ秒)だとしたら、これは非常に大きな誤差である。 Nikolai Semko 2018.07.31 16:18 #932 アレクセイ・ヴャジミキン設定したが、役に立たなかった-理由がわからない。True, 私のサーバーは ntp2.stratum2.ru です。このように長い間隔でGetTickCountを使用すれば、特に問題はないはずです。 GetMicrosecondCountを使用した場合、問題が発生します。 もし、マイクロ秒関数を使うことが原則であれば、この変種を 使った方がよいでしょう。注意すべき情報 機能の実行時間の目安。 - GetTickCount - ~ 2 ns - GetMicrosecondCount - ~ 30 ns -RealMicrosecondCount - ~ 40 ns Aleksey Vyazmikin 2018.07.31 19:12 #933 ニコライ・セムコこのような長い間隔でGetTickCountを使用するのであれば、特に問題はないはずです。 GetMicrosecondCountを使用した場合、問題が発生します。 もし、マイクロ秒関数を使うことが原則であれば、この変種を 使った方がよいでしょう。注意すべき情報 関数のおおよその実行時間。 - GetTickCount - ~ 2 ns - GetMicrosecondCount - ~ 30 ns -RealMicrosecondCount - ~ 40 ns他の人のコードを使っていて、そこにはそのような機能は全くないのに、この非同期効果が発生するのです。 #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 input color ValuesPositiveColor = MediumSeaGreen; // Color for positive timer values input color ValuesNegativeColor = PaleVioletRed; // Color for negative timer values input int TimeFontSize = 10; // Font size for timer input int TimerShift = 7; // Timer shift #define clockName "CandleTimer" int atrHandle; int ObjComplite=0; int OnInit() { atrHandle = iATR(NULL,0,30); EventSetTimer(1); return(0); } void OnDeinit(const int reason) { EventKillTimer(); } void OnTimer( ) { refreshClock(); } int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //refreshClock(); return(rates_total); } void refreshClock() { static bool inRefresh = false; if (inRefresh) return; inRefresh = true; ShowClock(); ChartRedraw(); inRefresh=false; } //------------------------------------------------------------------ // //------------------------------------------------------------------ void ShowClock() { int periodMinutes = periodToMinutes(Period()); int shift = periodMinutes*TimerShift*60; int currentTime = (int)TimeCurrent(); int localTime = (int)TimeLocal(); int barTime = (int)iTime(Symbol(),PERIOD_CURRENT,0);//iTime(); int diff = (int)MathMax(round((currentTime-localTime)/3600.0)*3600,-24*3600); color theColor; string time = getTime(barTime+periodMinutes*60-localTime-diff,theColor); time = (TerminalInfoInteger(TERMINAL_CONNECTED)) ? time : time+" x"; if(ObjComplite==0)if(ObjectFind(0,clockName) < 0) { ObjectCreate(0,clockName,OBJ_TEXT,0,barTime+shift,0); ObjComplite=1; } ObjectSetString(0,clockName,OBJPROP_TEXT,time); ObjectSetString(0,clockName,OBJPROP_FONT,"Arial"); ObjectSetInteger(0,clockName,OBJPROP_FONTSIZE,TimeFontSize); ObjectSetInteger(0,clockName,OBJPROP_COLOR,theColor); if (ChartGetInteger(0,CHART_SHIFT,0)==0 && (shift >=0)) ObjectSetInteger(0,clockName,OBJPROP_TIME,barTime-shift*3); else ObjectSetInteger(0,clockName,OBJPROP_TIME,barTime+shift); double price[]; if (CopyClose(Symbol(),0,0,1,price)<=0) return; double atr[]; if (CopyBuffer(atrHandle,0,0,1,atr)<=0) return; price[0] += 3.0*atr[0]/4.0; bool visible = ((ChartGetInteger(0,CHART_VISIBLE_BARS,0)-ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0)) > 0); if ( visible && price[0]>=ChartGetDouble(0,CHART_PRICE_MAX,0)) ObjectSetDouble(0,clockName,OBJPROP_PRICE,price[0]-1.5*atr[0]); else ObjectSetDouble(0,clockName,OBJPROP_PRICE,price[0]); } //------------------------------------------------------------------ // //------------------------------------------------------------------ string getTime(int times, color& theColor) { string stime = ""; int seconds; int minutes; int hours; if (times < 0) { theColor = ValuesNegativeColor; times = (int)fabs(times); } else theColor = ValuesPositiveColor; seconds = (times%60); hours = (times-times%3600)/3600; minutes = (times-seconds)/60-hours*60; if (hours>0) if (minutes < 10) stime = stime+(string)hours+":0"; else stime = stime+(string)hours+":"; stime = stime+(string)minutes; if (seconds < 10) stime = stime+":0"+(string)seconds; else stime = stime+":" +(string)seconds; return(stime); } int periodToMinutes(int period) { int i; static int _per[]={1,2,3,4,5,6,10,12,15,20,30,0x4001,0x4002,0x4003,0x4004,0x4006,0x4008,0x400c,0x4018,0x8001,0xc001}; static int _min[]={1,2,3,4,5,6,10,12,15,20,30,60,120,180,240,360,480,720,1440,10080,43200}; if (period==PERIOD_CURRENT) period = Period(); for(i=0;i<20;i++) if(period==_per[i]) break; return(_min[i]); } Alexey Navoykov 2018.07.31 23:14 #934 スラバ マイクロ秒単位で時間を測定するために使用されるGetMicrosecondsCountの2回の呼び出しの間に、ローカルコンピュータの時間が変化する確率はどのくらいか?これは、まず、システム時刻とインターネット時刻の同期期間の設定に依存する。例えば、私は1日に1回同期を設定し、この間1秒以上の差がある。 1時間に1回、あるいはもっと頻繁に同期する人がいる。 そこで、確率を計算する。 Alexey Navoykov 2018.07.31 23:49 #935 ニコライ・セムコ: ...というのは、GetMicrosecondCount()のそのような機能についてはすでに知っており、この関数がGetTickCountよりも遅いことも知っているからです。この遅さは、ネイティブのPerfomanceCountを取得するのに加えて、さらにローカルタイムを 狂わせているため、この弱気なサービスにお金を払っているためだと思います。 PerfomanceCountとGetTickCountの速度を直接比較すれば、その差はもっと小さくなるはずです。 とはいえ、2~20ナノ秒の実行速度というのは、正直言ってよくわかりません。 この違いは、ほぼ空のループを(この関数で)1億回繰り返したときに初めて実感できます。 このソリューション自体、設計が間違っているのです。 Alexey Navoykov 2018.08.01 00:08 #936 レナト・ファットフーリンそうそう、純粋なWinAPI関数(GetTickCountかQueryPerformanceCounter)で、秒単位でも日付を変えてチェーンソーにスクラップを滑り込ませると、同じようにぶっ飛んでしまうでしょう。あなたが言っているような保護機能は全くありません。問題と疑惑の解決策として指から吸い出す。 つまり、すべてが真実であり、これがWinAPIのあり方であり、現実なのです。WinApiを使ったコードをここに 具体的に引用しました。 実行して、途中で時計を変えて、その結果をご覧ください。 あなたの主張が推測に基づいたものであるなら、あなたとどのように対話すればよいのか、よくわかりません。 しかも、あなたはこの問題の議論に親しむ必要さえないと考えているのです。 Konstantin 2018.08.01 01:37 #937 ニコライ・セムコこの機能の応用範囲は、思いつきで言えば、かなり広い。 期間の異なる複数のタイマーを同時に動作させることができるマルチタイマーについては、すでに前述 したとおりです。 これは、すでにfxsaberさんが書かれて いることでもあります。 ミリ秒関数と比較したマイクロ秒関数は、スピードテストだけでなく、Expert Advisorの実行中に様々なテレメトリ情報を取得するのに有効です。 このテレメトリーが16ミリ秒(正確には1/64秒=15625マイクロ秒)の精度だとすると、かなり大きな誤差になります。私は常に実行速度を測定しています、Renatが書いたように、私は問題を見たことがありません、あなたは無から巻き上げるように見える、または前に書かれたものを変更したくない、それはあなたがそれをすべて無駄に得るときに起こる、悪気はない、しかしあなたが言った同じマルチタイマーは、エラーなしで簡単に実装できますが、あなたはそれを支払う必要があります、Renatも上記の私の質問に対して説明を与えました。 Nikolai Semko 2018.08.01 01:45 #938 コンスタンチン 真理の口は、不慣れな者には無言である。 Konstantin 2018.08.01 03:19 #939 ニコライ・セムコ 真理の口は、不慣れな者には無言である。まあそうですね )) Slava 2018.08.01 04:57 #940 アレクセイ・ナヴォイコフこれは、まず、システム時刻とインターネット時刻の同期期間を設定することによります。例えば、私は1日に1回同期を設定し、その間に1秒以上の乖離がある。 ある人は1時間に1回、あるいはもっと頻繁にある。 ここで、その確率を推定することができる。本当に質問全体を読んだのでしょうか? ...GetMicrosecondsCountの2回の呼び出しの 間に... 1...87888990919293949596979899100101...247 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
また、GetMicrosecondCountの実用化によって、現バージョンのプログラム全体の動作が損なわれることをどのように考えていますか? 実用化について説明してください。
例えば、Renatが説明した、コードの実行時間を mcsで正確に測定するという方法以外では、c++でもここでもバリエーションは見当たりません。
正直言って、あなたのこだわりは理解できません。
この機能の範囲は、便宜上、かなり広範囲に渡っています。
期間の異なる複数のタイマーを同時に動作させることができるマルチタイマーについては、すでに前述 したとおりです。
これもfxsaberさんがすでに書かれて いることです。
ミリ秒関数と比較したマイクロ秒関数は、スピードテストだけでなく、Expert Advisorの実行中に様々なテレメトリ情報を取得するのに有効です。
このような遠隔測定の精度が16ミリ秒(正確には1/64秒=15625マイクロ秒)だとしたら、これは非常に大きな誤差である。
設定したが、役に立たなかった-理由がわからない。True, 私のサーバーは ntp2.stratum2.ru です。
このように長い間隔でGetTickCountを使用すれば、特に問題はないはずです。
GetMicrosecondCountを使用した場合、問題が発生します。
もし、マイクロ秒関数を使うことが原則であれば、この変種を 使った方がよいでしょう。
注意すべき情報
機能の実行時間の目安。
- GetTickCount - ~ 2 ns
- GetMicrosecondCount - ~ 30 ns
-RealMicrosecondCount - ~ 40 ns
このような長い間隔でGetTickCountを使用するのであれば、特に問題はないはずです。
GetMicrosecondCountを使用した場合、問題が発生します。
もし、マイクロ秒関数を使うことが原則であれば、この変種を 使った方がよいでしょう。
注意すべき情報
関数のおおよその実行時間。
- GetTickCount - ~ 2 ns
- GetMicrosecondCount - ~ 30 ns
-RealMicrosecondCount - ~ 40 ns
他の人のコードを使っていて、そこにはそのような機能は全くないのに、この非同期効果が発生するのです。
マイクロ秒単位で時間を測定するために使用されるGetMicrosecondsCountの2回の呼び出しの間に、ローカルコンピュータの時間が変化する確率はどのくらいか?
これは、まず、システム時刻とインターネット時刻の同期期間の設定に依存する。例えば、私は1日に1回同期を設定し、この間1秒以上の差がある。 1時間に1回、あるいはもっと頻繁に同期する人がいる。 そこで、確率を計算する。
...というのは、GetMicrosecondCount()のそのような機能についてはすでに知っており、この関数がGetTickCountよりも遅いことも知っているからです。
この遅さは、ネイティブのPerfomanceCountを取得するのに加えて、さらにローカルタイムを 狂わせているため、この弱気なサービスにお金を払っているためだと思います。 PerfomanceCountとGetTickCountの速度を直接比較すれば、その差はもっと小さくなるはずです。
とはいえ、2~20ナノ秒の実行速度というのは、正直言ってよくわかりません。 この違いは、ほぼ空のループを(この関数で)1億回繰り返したときに初めて実感できます。 このソリューション自体、設計が間違っているのです。
そうそう、純粋なWinAPI関数(GetTickCountかQueryPerformanceCounter)で、秒単位でも日付を変えてチェーンソーにスクラップを滑り込ませると、同じようにぶっ飛んでしまうでしょう。あなたが言っているような保護機能は全くありません。問題と疑惑の解決策として指から吸い出す。
つまり、すべてが真実であり、これがWinAPIのあり方であり、現実なのです。
WinApiを使ったコードをここに 具体的に引用しました。 実行して、途中で時計を変えて、その結果をご覧ください。
あなたの主張が推測に基づいたものであるなら、あなたとどのように対話すればよいのか、よくわかりません。 しかも、あなたはこの問題の議論に親しむ必要さえないと考えているのです。
この機能の応用範囲は、思いつきで言えば、かなり広い。
期間の異なる複数のタイマーを同時に動作させることができるマルチタイマーについては、すでに前述 したとおりです。
これは、すでにfxsaberさんが書かれて いることでもあります。
ミリ秒関数と比較したマイクロ秒関数は、スピードテストだけでなく、Expert Advisorの実行中に様々なテレメトリ情報を取得するのに有効です。
このテレメトリーが16ミリ秒(正確には1/64秒=15625マイクロ秒)の精度だとすると、かなり大きな誤差になります。
私は常に実行速度を測定しています、Renatが書いたように、私は問題を見たことがありません、あなたは無から巻き上げるように見える、または前に書かれたものを変更したくない、それはあなたがそれをすべて無駄に得るときに起こる、悪気はない、しかしあなたが言った同じマルチタイマーは、エラーなしで簡単に実装できますが、あなたはそれを支払う必要があります、Renatも上記の私の質問に対して説明を与えました。
真理の口は、不慣れな者には無言である。
まあそうですね ))
これは、まず、システム時刻とインターネット時刻の同期期間を設定することによります。例えば、私は1日に1回同期を設定し、その間に1秒以上の乖離がある。 ある人は1時間に1回、あるいはもっと頻繁にある。 ここで、その確率を推定することができる。
本当に質問全体を読んだのでしょうか?
...GetMicrosecondsCountの2回の呼び出しの 間に...