EA/インジケーターからのティックのエミュレーション - ページ 2

 
Meat:

あなたのコードは、まず、単にtickをエミュレートしているのではなく、tickごとに対応する履歴でグラフを強制的に更新しています。 時々ログファイルを見ますか? 暇なときに見て、そこで何が起こっているか見てみてください。そして、1日後くらいに何があるか見積もってみてください。システムやインターネット回線への負荷は言うまでもありません。

もし、あなたのコードでチャートを更新する代わりにティックをエミュレートすると、ループになり(つまり、インジケータが停止せずに開始する)、それに応じて、端末がハングアップします。

なぜ履歴を読み込まずにアップデートする必要があるのですか?チャートの強制リフレッシュはティックエミュレーションです。

2500ティック後のログはこちらです。

00:51:32 Check_UpdateChart EURUSD,M1: 正常にロードされました。
00:52:48 Check_UpdateChart EURUSD,M1: uninit reason 1.
00:52:48 Check_UpdateChart EURUSD,M1: 削除されました。

何もぶら下がっていない。インジケータがループするようにエミュレートしています。つまり、自らトリガーするのです。
 
Zhunko:

なぜ履歴を読み込まずにアップデートする必要があるのですか?グラフを強制的に更新するのは、ティックエミュレーションです。

2500ティック後のログはこちらです。

00:51:32 Check_UpdateChart EURUSD,M1: 正常にロードされました。
00:52:48 Check_UpdateChart EURUSD,M1: uninit reason 1.
00:52:48 Check_UpdateChart EURUSD,M1: 削除されました。

何もぶら下がっていない。インジケータがループするようにエミュレートしています。つまり、自分自身で起動するのです。


ログ・ ログとはっきり書いたつもりなのですが。では、なぜ私にエキスパートのログを見せるのですか? どうやら私の言う通り、あなたはそこを見ないようですね。 あなたのハードディスクの半分がこのログで埋まっていても、私は驚きませんよ :)

履歴の更新とティックエミュレーションは別のものです。 サーバーからティックを受信しても、履歴(つまり以前のバー)は更新されません。 もしそれが起こっていれば、端末は多くのトラフィックとリソースを浪費しているはずです。

そのため、IndicatorCounted()をゼロにリセットしてしまうため、1ティック ごとに履歴全体をチェックする必要があり、更新する理由が不明である。それは、多くの資源を無駄にしていることになります。

 
Meat:

サーバーから受信したティックは、履歴(つまり、以前のバー)を更新しません。 もしそうなら、端末は多くのトラフィックとリソースを食ってしまうでしょう。

例えば1バー=2ティックの場合、どうすればいいのか ))))?私の場合、ティックの更新履歴は?
 
IgorM:

後釜

ログに残りました。

23:39:01 test EURUSD,H1: loaded successfully
23:39:01 test EURUSD,H1: PostMsgAddr =1977398342
23:39:01 test EURUSD,H1: initialized
23:39:01 test EURUSD,H1: cycle completed... ...サイクル完了。

ああ、何が起こっているのかはっきりしない...それならこれを試してみてください。インポートセクション #import"user32.dll" に関数を追加します。

CallWindowProcA(int lpPrevWndFunc[], int hWnd, int Msg, int wParam, int lParam);

そして、SetMyTimer関数の最後にCallWindowProcA(code,0,0,0)という行を追加してください。

そして、並行して動作するいくつかのインジケータで、この瞬間にティックが生成されているかどうかをチェックします。

 
solar:
例えば、1バー=2ティックの場合はどうなるのでしょうか ))))私の場合、ティックで履歴が更新されるのですが?
もちろん現在のバーは常に更新されていますが、一般的な歴史の話をしていたんです。
 
Meat:


はっきり「ログ」と書きました。では、なぜExpert Advisorのログを見せるのですか? どうやら私の言う通り、あなたはそこを見ないようですね。あなたのハードディスクの半分が、すでにこれらのログで埋まっていても不思議ではありません :)

また、ヒストリーアップデートとティックエミュレーションは別物 なので、概念を混同しないようにしましょう。サーバーから受信したティックは、履歴(つまり以前のバー)を更新しません。 もし更新した場合、端末は膨大な量のトラフィックとリソースを消費することになります。

そのため、IndicatorCounted()をゼロにリセットしてしまうため、1ティックごとに履歴全体をチェックする必要があり、更新する理由が不明である。それは、多くの資源を無駄にしていることになります。

ログも空ですが、他の理由です。履歴を入れ替えた後に、コンソールクリーナーを使っています。自分のログがある。

MT4のログは全く気にならない。メタクオーツは、ロギングが最後の手段であることを繰り返し述べています。優先順位が低いのです。リソースを消費しない。ただ、クリーニングが間に合えばいいだけです。

IndicatorCounted() に関しては...。使っていない私のインジケータはExpert Advisorから情報を引き出すための空箱です。MT4でインジケータを使うのは弊害があると思う。インターフェイスのスレッドが遅く、Expert Advisorの3倍の速度で動作する。

ハイライトはもちろん正しいのですが、わざわざ分離するほどの価値があるのでしょうか?

415のアップデートに関するログログはこちらです。

03:00:44カスタムインジケータ Check_UpdateChart EURUSD,M1: ロードに成功しました。
03:00:46 HistoryCenter: 'EURUSD1'を同期させる。
03:00:46 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:47 HistoryCenter: 'EURUSD1'を同期させる。
03:00:47 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:47 HistoryCenter: 'EURUSD1'を同期させる。
03:00:47 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:48 HistoryCenter: 'EURUSD1'を同期させる。
03:00:48 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:48 HistoryCenter: 'EURUSD1'を同期させる。
03:00:49 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:49 HistoryCenter: 'EURUSD1'を同期させる。
03:00:49 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:50 HistoryCenter: 'EURUSD1'を同期させる。
03:00:50 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:51 HistoryCenter: 'EURUSD1'を同期させる。
03:00:51 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:51 HistoryCenter: 'EURUSD1'を同期させる。
03:00:52 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:52 HistoryCenter: 'EURUSD1'を同期させる。
03:00:55 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:55 HistoryCenter: 'EURUSD1'を同期させる。
03:00:55 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:55 HistoryCenter: 'EURUSD1'を同期させる。
03:00:55 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:55 HistoryCenter: 'EURUSD1'を同期させる。
03:00:56 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:00:56 HistoryCenter: 'EURUSD1'を同期させる。
03:00:57 カスタムインジケータ Check_UpdateChart EURUSD,M1: 削除されました。
03:00:59 HistoryCenter: 'EURUSD1'に2本のバーがインポートされました。
03:01:01 MetaTraderのビルド438が停止しました。

週末にインジケーターの性能をテストするのは、私には関係なさそうです。作業後、手動でログを清掃することができます。

しかし、あなたのコードを挿入するよりも、start()の 末尾に1行挿入する方が簡単です。複雑にする意味はない。

 

私はXPを持っています - それは動作するように見える - その後、端末をクラッシュさせる....

同じ結果で、15秒から50秒くらいでターミナルがクラッシュしてしまいます.

だから、あなたは何か間違っている...

が、悪くはないだろう.

 

インジケーターでも同じようにする方法はありますか?

単に、インジケーターの読み取りを確認したい時点(その時点)にカーソルを合わせるだけでいいのですか?

 

Zhunko さん、まあ、すべてが非標準(独自のログ、インディケータの独自実装など)なら、なぜこんな話を始めるのでしょうか。 実は、MT4に特化した作業の議論であって、独自の開発とは関係ないのですが。

最初の投稿で、私のコードは外部リンクなしで 行うタスク、つまりシステムライブラリのみを使用する自給自足のExpert Advisor/Indicatorを実装する場合に役立つと明確に指摘しました。 そして、あなたが独自の開発を使用している場合、それはあなたに適用されるものではありません。

また、一般的に、ログを散らかさない方が楽なのに、なぜ「仕事帰りに手動で掃除」しなければならないのか、理解できない。結局、私が理解した限りでは、DLLで開発したものを実装しているのですね。それなら、私がここで提案したように、同じタイマーをそこに設置することを妨げるものは何でしょう。でも、なぜかあなたはタンバリンと踊ったり、ログを掃除したりすることを好む。 私のコードがあなたを悩ませているのに、あなたは毎日ログを掃除するのが面倒なんですね :)

 
elmucon:

私はXPを持っています - それは動作するように見える - その後、端末をクラッシュさせる....

インジケーターのコードでも、EAのコードでも、それ単体でも、結果は同じで、約15~50秒後にターミナルがクラッシュします ...

だから、あなたは何か間違っている...

が、悪くはないだろう.


そうですね、ちょっと無理があるかもしれませんね。 私はアセンブラの専門家ではないので、あまり厳しく判断しないでください :) 何が問題なのか、考えてみますね。
理由: