MQL4 リアルタイムクロック(秒単位) - ページ 3 123456 新しいコメント 削除済み 2011.03.09 12:05 #21 brewmanz:A) MT4をリアルタイムクロックとしてわざわざ使う必要はありません。犬に後ろ足で歩かせるようなもので、やっているのを見るのは面白いが、実際には大したことはできない。B) なぜ、1秒1秒を処理することがそんなに重要なのですか?もし、刻みに何も起こっていないのなら、価格にも何も起こっていない。 (各コメントは1セントの価値あり) A) なぜ、そうしてはいけないのでしょうか?PCの時間かサーバーの 時間か、どちらかだけで、正確な情報が得られると思うのですが。 B) なぜそれが重要な のか......えーと 高頻度取引 - ティックバイティックの非同期情報に基づいていない! それが正当な理由であるべきだと私は思います。 私はまだ私の2セントを待っています。 削除済み 2011.03.09 12:06 #22 Ais: MQL4 Reference :https://docs.mql4.com/runtime/start: "Scripts and experts work in their own thread.カスタム・インジケータはメイン・インターフェイス・スレッドで動作します。" つまり、あなたのインジケータは、GUIでユーザーのInterfaceに時間を表示する? リアルタイム/秒単位で。 AIRAT SAFIN 2011.03.09 12:37 #23 秒単位で動作させるために、「Sleep()」関数を使用します。 そのために、メインルーチンの実行時間を計測する。 たとえば、実行時間を変数「int Runtime;」に格納し、「RunTime < 1000」とする。 そして、"Sleep (1000 - RunTime) ;" を実行し、次の実行が1000ミリ秒後に行われることを確認します。もちろん、所定の精度で。 しかし MQL4 Reference :https://docs.mql4.com/common/Sleep: "Sleep()関数は、インターフェイススレッドで計算し、それを減速させない可能性があるため、カスタムインジケータから呼び出すことはできません。" zzuegg 2011.03.09 12:46 #24 簡単な解決方法です。 EAに計算を含めれば問題ありません。 長所 icustomを呼び出す 必要がない インジケータがない 短所 インジケータがない。しかし、高フレックの取引では、人間は遅いので、EAを使用する必要があります*。 AIRAT SAFIN 2011.03.09 13:39 #25 「高頻度」と「低遅延」は少し違います。 また、ビジュアライゼーションは、取引だけでなく、分析やモニタリングにもよく使われます。 zzuegg 2011.03.09 13:47 #26 Ais: 「高頻度」と「低遅延」は少し違います。 また、ビジュアライゼーションは、取引だけでなく、分析や監視にもよく使われます。 本当にモニタリングが必要な場合は、インジケータの動作をラインで再構築することができます。確かにハイパフォーマンスとは違うものです。 AIRAT SAFIN 2011.03.09 13:54 #27 時間間隔でイベントを分析・監視したい場合はどうすればよいのでしょうか。 例えば、1秒ごとなど。 削除済み 2011.03.09 14:22 #28 Ais: 時間間隔でイベントを分析、監視したい場合はどうすればよいでしょうか。 例えば、1秒ごとなど。 ティックバイティックの話をするとすぐに 超高周波を意味 します. このような場合、「超高頻度の金融データの分析には、高度なフーリエ変換が必要」 (2009) Finance Research Letters Vol 6, pp 47-53 (I.Giampaoli and W.L.Ng と共同) となる。 あらかじめ定義された間隔でサンプリングすることは、T<tの場合、高周波数サンプリングと定義できる zzuegg 2011.03.09 14:29 #29 #property indicator_chart_window #property indicator_buffers 8 #property indicator_color1 Black #property indicator_color2 Black #property indicator_color3 Red #property indicator_color4 Blue #property indicator_color5 Red #property indicator_color6 Red #property indicator_color7 Red #property indicator_color8 Red //---- buffers double open[]; double close[]; double high[]; double low[]; double ExtMapBuffer5[]; double ExtMapBuffer6[]; double ExtMapBuffer7[]; double ExtMapBuffer8[]; extern int MaxHistory=200; extern int TimeInSeconds=5; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ double a.open[]; double a.close[]; double a.high[]; double a.low[]; int init() { //---- indicators SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,high); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,low); SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,5); SetIndexBuffer(2,open); SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,5); SetIndexBuffer(3,close); SetIndexStyle(4,DRAW_LINE); SetIndexBuffer(4,ExtMapBuffer5); SetIndexStyle(5,DRAW_LINE); SetIndexBuffer(5,ExtMapBuffer6); SetIndexStyle(6,DRAW_LINE); SetIndexBuffer(6,ExtMapBuffer7); SetIndexStyle(7,DRAW_LINE); SetIndexBuffer(7,ExtMapBuffer8); ArrayResize(a.high,MaxHistory); ArrayResize(a.low,MaxHistory); ArrayResize(a.open,MaxHistory); ArrayResize(a.close,MaxHistory); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void redraw(){ for(int i=200;i>=0;i--){ if(i==200){ open[i]=0; close[i]=0; high[i]=0; low[i]=0; }else{ open[i]=a.open[i]; close[i]=a.close[i]; high[i]=a.high[i]; low[i]=a.low[i]; } } } void shift(){ for(int i=200;i>0;i--){ a.open[i]=a.open[i-1]; a.close[i]=a.close[i-1]; a.high[i]=a.high[i-1]; a.low[i]=a.low[i-1]; } } extern int sleep=100; int start() { int counted_bars=IndicatorCounted(); //---- bool running=true; static double price=0; static int t=0; static datetime t.r=0; static bool updates=false; //t=TimeCurrent(); //while(running){ updates=false; if(TimeCurrent()>(t+TimeInSeconds)){ shift(); if(a.open[1]==EMPTY || a.open[1]==EMPTY_VALUE || a.open[1]==0){ a.open[0]=Bid; a.close[0]=Bid; a.high[0]=Bid; a.low[0]=Bid; }else{ a.open[0]=a.close[1]; a.high[0]=a.close[1]; a.low[0]=a.close[1]; a.close[0]=a.close[1]; } Print("shift "+a.open[0]+" - "+a.open[1]); updates=true; t=TimeCurrent(); } if(price!=Bid){ price=Bid; a.close[0]=price; a.high[0]=MathMax(price,a.high[0]); a.low[0]=MathMin(price,a.low[0]); updates=true; } if(Time[0]!=t.r){ t.r=Time[0]; redraw(); }else{ if(updates){ redraw(); } } if(IsStopped()) running=false; // Sleep(sleep); //} //---- return(0); } 適切なスリープ 機能を使用するようにEAに簡単に再コード化することができます。すでに実施済み。 削除済み 2011.03.09 15:23 #30 zzuegg: 適切なスリープ機能を使うようにEAに簡単に再コード化できる。すでにやってます。 いいプログラムだ。TimeCurrent()はコンピュータの価格を得るために必要なティックバイティックの価格です! でも、この例から合成時計を作ることができるかもしれませんね。 if(Time[0]!=t.r){。 t.r=Time[0]; redraw(); ヒントをください! zzuegg :) 123456 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
A) MT4をリアルタイムクロックとしてわざわざ使う必要はありません。犬に後ろ足で歩かせるようなもので、やっているのを見るのは面白いが、実際には大したことはできない。
B) なぜ、1秒1秒を処理することがそんなに重要なのですか?もし、刻みに何も起こっていないのなら、価格にも何も起こっていない。
(各コメントは1セントの価値あり)
A) なぜ、そうしてはいけないのでしょうか?PCの時間かサーバーの 時間か、どちらかだけで、正確な情報が得られると思うのですが。
B) なぜそれが重要な のか......えーと 高頻度取引 - ティックバイティックの非同期情報に基づいていない! それが正当な理由であるべきだと私は思います。
私はまだ私の2セントを待っています。
MQL4 Reference :https://docs.mql4.com/runtime/start: "Scripts and experts work in their own thread.カスタム・インジケータはメイン・インターフェイス・スレッドで動作します。"
つまり、あなたのインジケータは、GUIでユーザーのInterfaceに時間を表示する? リアルタイム/秒単位で。
秒単位で動作させるために、「Sleep()」関数を使用します。
そのために、メインルーチンの実行時間を計測する。
たとえば、実行時間を変数「int Runtime;」に格納し、「RunTime < 1000」とする。
そして、"Sleep (1000 - RunTime) ;" を実行し、次の実行が1000ミリ秒後に行われることを確認します。もちろん、所定の精度で。
しかし
MQL4 Reference :https://docs.mql4.com/common/Sleep: "Sleep()関数は、インターフェイススレッドで計算し、それを減速させない可能性があるため、カスタムインジケータから呼び出すことはできません。"
簡単な解決方法です。
EAに計算を含めれば問題ありません。
長所
icustomを呼び出す 必要がない
インジケータがない
短所
インジケータがない。しかし、高フレックの取引では、人間は遅いので、EAを使用する必要があります*。
「高頻度」と「低遅延」は少し違います。
また、ビジュアライゼーションは、取引だけでなく、分析やモニタリングにもよく使われます。
「高頻度」と「低遅延」は少し違います。
また、ビジュアライゼーションは、取引だけでなく、分析や監視にもよく使われます。
本当にモニタリングが必要な場合は、インジケータの動作をラインで再構築することができます。確かにハイパフォーマンスとは違うものです。
時間間隔でイベントを分析・監視したい場合はどうすればよいのでしょうか。
例えば、1秒ごとなど。
時間間隔でイベントを分析、監視したい場合はどうすればよいでしょうか。
例えば、1秒ごとなど。
ティックバイティックの話をするとすぐに 超高周波を意味 します.
このような場合、「超高頻度の金融データの分析には、高度なフーリエ変換が必要」 (2009) Finance Research Letters Vol 6, pp 47-53 (I.Giampaoli and W.L.Ng と共同) となる。
あらかじめ定義された間隔でサンプリングすることは、T<tの場合、高周波数サンプリングと定義できる
適切なスリープ機能を使うようにEAに簡単に再コード化できる。すでにやってます。
いいプログラムだ。TimeCurrent()はコンピュータの価格を得るために必要なティックバイティックの価格です!
でも、この例から合成時計を作ることができるかもしれませんね。
if(Time[0]!=t.r){。
t.r=Time[0];
redraw();
ヒントをください! zzuegg :)