MQL4 リアルタイムクロック(秒単位)

 

Start()関数が tick by tickで動作するのは私の理解です。

コンピュータの時計からリアルタイムのデータを使用し、1秒ごとに更新する方法はありますか?tick by tickではなく、毎秒の更新ですか?

もしそうなら、私にいくつかの助けを与えてください。

感謝

 

説き明かす

 

MQL4はTimeLocal(); TimeCurrent()を使っていますが、これはiTimeでもtick per tickに基づいています......。

私が本当に欲しいのは、私のコンピュータの時計やリモートサーバーを使用して、1秒ごとに更新されるリアルタイムクロックをグラフ上に表示することです。

 

TimeCurrent()はtick basedではありません。

しかし、start関数はtickベースです。sleepとの組み合わせで無限ループを使うことができます。この利点と解決策を説明した記事がmql4.comにあります。

mt4はティック駆動なので、時間の影響を受けるロジックを実装するのは好きではありません。過去に私はカスタムタイムフレームインジケータでこの2つを組み合わせました。簡単な作業ですが、イメージが湧くかもしれません。もし、毎秒更新される時計が欲しいのであれば、私の作品は役に立たないでしょう。https://www.mql5.com/en/code/10080。

//z

 

アイデアは、毎秒更新する時計を取得することであり、単にプログラムのStart()で関数を 呼び出すことではありません。

if(TimeCurrent()>(t+TimeInSeconds)) とします。

init()関数でwhileループを使い、start()関数でそれを呼び出すと、やはりtick by tickになるのでしょうか!

 

このようなスタート関数が 必要です。このループは最初のtickで実行され、それ以降はtick independとなります。

while(true){
 updateWatch();
 Sleep(1000);
} 
 

zzuegg; これは無限ループになり、メタトレーダーのインジケータは1つのこと...カウントを行うことに制限されます。

ですから、もしあなたがsleep関数と TimeCurrenetを組み合わせて使い、Sleep(1000)ごとに1秒を追加する関数から呼び出した場合、このプログラムは他のことは何もできなくなります。

このプログラムは他のことは何もできず、ただ数を数えるだけです...つまり、あなたは自分自身を1つの関数に制限することになります。

 

メタトレーダーは無限ループを好まないので、私が経験したようにクラッシュします(笑) どこかにブレークがあるはずです :)

 

一つの関数に 限定されることはない。1秒の実行時間を保証するために、いくつかの再計算が必要かもしれませんが、一般的にはうまくいきます。

インディカトスではやったことがありませんが、EAではうまくいきます。

もう一つの方法は、外部プログラムを使って、1秒間隔で偽のティックをターミナルに送ることです。カスタムタイムフレームキャンドルから私のコードと組み合わせると、あなたの結果が得られるはずです。

 
while( !(IsTesting() || IsStopped()) ){
    updateWatch();
    RefreshRates();
    if (...)  doTrading();
    Sleep(1000);
} 


メタトレーダーは無限ループを好まないので、私が経験したようにクラッシュしてしまいます(笑
) インジケータに無限ループはありません。スクリプトやEAでは、まず内部を更新すればOKです(上記のような。)
 

MQL5を使用

理由: