初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 850

 
Artyom Trishkin:
カーブインジケーターを修正する。コンテキストメニューコマンドで行う完全な再計算の時のみ、線を引くことができます。
アレクセイ・ヴィクトロフ

mql4にもあります。

ありがとうございます。

 
松葉杖で取り出した)。縦線を 手動でドラッグした後にインジケータを更新するようにしたかったのですが、そこから時間がかかってしまいます。オブジェクトをドラッグするイベント機能を利用し、TFを変化させ、初期状態に戻す機能を入れました。しかし、なぜか数秒程度、更新が遅れてしまう。TF切り替えの機能が遅すぎてよくわからない。
 
khorosh:
松葉杖で解決)。 線を手動でドラッグした後にインジケータを更新する必要があり、そこから時間がかかる。オブジェクトをドラッグする機能を利用し、初期に戻ることでTFを変化させる機能を入れました。しかし、なぜか数秒程度、更新が遅れてしまう。TF切り替えの機能が遅すぎて、よくわからない。

本機能は非同期式である。イベントキューにあるコマンドの結果のみを返します。

すぐに更新するには、チャートスイッチコマンドの後に ChartRedraw()コマンドを実行する必要があります。

もちろん、これは間違ったアプローチです。線の移動が完了してからチャートを更新したい場合は、OnCalculate()からではなく、ChartEvent()から指標再計算のループを呼び出す必要があります - 線の移動をキャッチ -指標再計算の関数を呼び出し、新しいデータで線再計算の全サイクルを実行します(線はあるデータに対して必要ですよね)。

それとも単にインジケーターの作りが甘く、現在のデータでゼロバーを更新せず、蹴ったのでしょうか?

 
ilyav:

MT5でEAコードを修正するのを手伝ってくれる人はいますか?

マニュアルを読んだけど、コンパイル時に2ヴァージョンには勝てない。

xxxx ' の宣言はグローバル宣言を隠します。

и

型変換によるデータ消失の可能

添付のチップをご覧ください。

グローバル変数名をバカ正直に直して、型を一致させただけです。

それは、あなたの怠惰を克服するために、あなたが請求できる1,000,000円です。

ファイル:
 
Artyom Trishkin:

ただ、露骨にグローバル変数名を修正し、型を揃えただけです。

あなたの怠け心を克服した私に1万円の借りができました。

ありがとうございました。

どうやって直したのか、恥ずかしくて見せられない)

int CountTrades(long PositionID1)

 
Artyom Trishkin:

本機能は非同期式である。イベントキューにあるコマンドの結果のみを返します。

すぐに更新するには、チャートスイッチコマンドの後に ChartRedraw()コマンドを実行する必要があります。

もちろん、これは間違ったアプローチです。線の移動が完了してからチャートを更新する必要がある場合は、OnCalculate()からではなく、ChartEvent()から指標再計算のループを呼び出す必要があります - 線の移動をキャッチ -指標再計算の関数を呼び出し、新しいデータで線の再計算の全サイクルを実行します(線はいくつかのデータに対して必要ですよね)。

それとも、単にインジケーターの作りが間違っていて、現在のデータでゼロバーを更新しないので、それをヤラレたのでしょうか?

このインジケータは、最後に計算されなかったバーを数えます。また、垂直方向にドラッグした後、新しい垂直方向の時間を読み込んでから完全に再計算する必要があります。ここに そのことを書き、どのように機能するかのスクリーンショットを追加しました。

ありがとうございます、あなたのアイデアを実装してみます。私は一般的にインジケータが苦手で、Expert Advisorを主に扱ってきました。

 
Artyom Trishkin:

本機能は非同期式である。イベントキューにあるコマンドの結果のみを返します。

すぐに更新するには、チャート切り替えコマンドの後に ChartRedraw()コマンドを実行する必要があります

もちろん、これは間違ったアプローチです。ラインシフトの完了後にのみチャートを更新したい場合は、インジケータ再計算のループをOnCalculate()からではなく、ChartEvent()-ラインのシフト-インジケータ再計算関数を呼び出し、新しいデータでライン再計算の全サイクルを実行します(ラインは何らかのデータに対して必要ですよね)。

それとも、インジケータが正しく作られていなくて、現在のデータでゼロバーを更新しないだけで、それを蹴ったのでしょうか?

アドバイス通りにしました。すべてが完璧に機能した。ドラッグすると瞬時にインジケータが完全に再描画されるようになりました。いつもありがとうございます。

 
khorosh:

アドバイス通りやってみました。すべてが完璧に機能した。ドラッグした後、瞬時にインジケータが完全に再描画されるようになりました。いつもありがとうございます。

どういたしまして。しかし、OnCalculate() で描画されるべきなのか、そうでないのか?

チャート上でドラッグされた場合、インジケータはラインの変化を意識せず、ラインを描画する必要があります。

 
Artyom Trishkin:

どういたしまして。しかし、OnCalculate()で描画すべきなのか、そうでないのか?

チャートに適用すると、ラインの動きは一切意識されませんが、ラインは描画されるはずです。

インジケータをチャートに貼り付けると、init()で縦線が作成され、Time[10]などの時刻が初期設定されます。OnChartEvent() とOnCalculate()でコードを重複しています。OnChartEventの時だけ、全てのバーで再計算しています。

 
khorosh:

init()でチャートにインジケータをインストールすると、垂直線が作成され、最初はある時間、例えばTime[10]に設定されています。OnChartEvent()とOnCalculate()のコードを複製してみました。OnChartEventの時だけ、全てのバーで再計算しています。

例えば、Refresh()関数を必要な形式パラメータを付けて作成し、必要な時に呼び出す方が良いのではないでしょうか?

ちなみにOnCalculate()の先のインジケータでrates_totalを取得する際に、日付範囲を指定してBars()を使うと、インジケータのハングアップを捕まえることができる。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

iBarShiftのアナログ

ニコライ・セムコ さん 2018.04.05 23:47

これまでのところ、このバリアント ですが、私は今、私はすでにservicedeskに書いていることについてのBars 関数ハングアップのこのバグを 回避するためにそれを追加したい。

このバグの本質は、Bars関数においてstart_timeとstop_timeの 両方が1つのバーの中にあるか、未来(ゼロバーの右側)にある場合、この関数が10秒以上ハングアップすることです。

後でちゃんと高速化するけど面倒なバージョンも作るかも。


理由: