EURUSD、EURGBP、GBPUSDの3つのペアの価格を取得しようとしています。ストラテジーテスターで"All ticks "または "Open prices only "を選択すると、すべてうまくいきます。しかし、"Every tick based on real ticks "を選択すると、なぜか1つの商品で1分間に複数の "New Bar "イベントが発生します。
EURUSD、EURGBP、GBPUSDの3つのペアの価格を取得しようとしています。ストラテジーテスターで"All ticks "または "Open prices only "を選択すると、すべてうまくいきます。しかし、"Every tick based on real ticks "を選択すると、なぜか1つの商品で1分間に複数の "New Bar "イベントが発生します。
教えてください、
1. 他通貨のBidとAskのみが必要な場合、「スパイ」を使用するのが妥当でしょうか?
2.単なるアイデアなのですが、onChartEvent関数で、現在の通貨だけでなく、他の通貨からのイベントをチェックする可能性はないのでしょうか?
3.onTimerイベントでタイマーの値を1より小さく設定することは可能でしょうか?そうすることで、相場の値をより頻繁にダウンロードし、それに応じて最小時間だけ最後のティックの時間に遅れます。
4. あるいは、私の場合、"CHARTEVENT_CUSTOM+n "を使用して、他のグラフ上のマッシュの交差をチェックすることは可能ですか?
1.使用する。
2.オプションがあります。他の通貨からのイベントは、OnChartEvent()を持つEAが設定されているチャートに送られるべきです。
3.いいえ。
4.できる。
単純な「スパイ・インジケータ」SendEvent.mq5 を作成しました:
このインジケーターからイベントを受信し、取引操作を試みる簡単なExpert Advisorを作成しました(以下はその一部で、全文は添付ファイルにあります):
Expert Advisorはインジケーターからイベントを受信しますが、テスター(ビジュアライゼーションの有無にかかわらず)では、取引操作を実行できません - エラー「Invalid Request」が返され、リターンコードは10013です。リアルタイムでは正常に動作します。Expert Advisorの取引操作をOnChartEvent()ではなくOnTick()から実行した場合も問題なく動作します。
CodeBaseの記事の著者が提供するExpert Advisorのテンプレートに トレード要求の送信を挿入してみましたが、トレード操作も機能しません(同じエラー)。
どなたか原因を教えてください。このスレッドで、 OnChartEvent() はテスターで処理されないと 読みましたが、この場合、インジケーターから送信されたイベントはテスターで処理されますが、OnChartEvent() からテスターでトレード操作を実行することはできません。
単純な "indicator-spy "SendEvent.mq5を作成した:
このインジケーターからのイベントを受信し、取引操作を試みる簡単なExpert Advisorを作成しました(その一部を紹介します。全文は添付ファイルにあります):
Expert Advisorはインジケーターからイベントを受信しますが、テスター(ビジュアライゼーションの有無にかかわらず)では取引操作を実行できません - エラー「Invalid Request」が返され、リターンコードは10013です。リアルタイムでは正常に動作します。Expert Advisorの取引操作がOnChartEvent()ではなくOnTick()から実行された場合も問題なく動作します。
CodeBaseの記事の著者が提供するExpert Advisorテンプレートに トレードリクエストの送信を挿入してみたが、トレード操作も機能しない(同じエラー)。
どなたか原因を教えてください。このスレッドで、 OnChartEvent() はテスターでは処理されないと 読みましたが、この場合、インジケーターから送信されたイベントはテスターで処理されますが、OnChartEvent() からテスターでトレード操作を実行することはできません。
私の頭の中に魚を持ってきてみてください。もちろん、ロジックは完全ではなく、非常に間抜けなものですが、あなたが必要としているものと非常に似ているようです。
テスターでもデモでも、少なくともマーケットからのポジションはオープンします。
なぜかわからないが(私はそれを理解するのがあまりに怠惰だ)、あなたの例はどんな状況でも私に10013を与えた。
追記
標準的なオブジェクト(CAccountInfoやCTradeなど)にバインドしたほうがよいでしょう。しかし、もしあなたがすべてを自分で書く忍耐力があるのなら、私はそれだけでうれしいです。
ところで、スパイの実装そのものは、この記事から引用するか、変更可能なコピーを作成するのがよいでしょう(たとえば、この年「(long)_Period」を、イベントを送信した日付やその他の有用な情報に置き換えることをお勧めします)。あなたの変形は、どういうわけかかなり「生」である。
私の魚が動くかどうか試してみてください。ロジックは不完全で非常に難解ですが、あなたが必要としているものと非常に似ているようです。
EURUSD、EURGBP、GBPUSDの3つのペアの価格を取得しようとしています。ストラテジーテスターで"All ticks "または "Open prices only "を選択すると、すべてうまくいきます。しかし、"Every tick based on real ticks "を選択すると、なぜか1つの商品で1分間に複数の "New Bar "イベントが発生します。
繰り返しになりますが、例えば2016.07.15から2016.07.19までの間隔を選択することができます。以下はログの例で、7分目、9分目を見てください:
2016.07.15 00:05:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333
2016.07.15 00:05:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.1119
2016.07.15 00:05:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33399
2016.07.15 00:06:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8334
2016.07.15 00:06:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.1119
2016.07.15 00:06:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33394
2016.07.15 00:07:19 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333700000000001
2016.07.15 00:07:19 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11174
2016.07.15 00:07:19 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33382
2016.07.15 00:07:19 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333700000000001
2016.07.15 00:07:19 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11174
2016.07.15 00:07:19 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33381
2016.07.15 00:07:19 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.8333700000000001
2016.07.15 00:07:19 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11174
2016.07.15 00:07:19 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33384
2016.07.15 00:08:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.83329
2016.07.15 00:08:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11167
2016.07.15 00:08:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33394
2016.07.15 00:09:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.83327
2016.07.15 00:09:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11166
2016.07.15 00:09:00 > -> id=1: GBPUSD CHARTEVENT_NEWBAR_M1 price=1.33396
2016.07.15 00:09:00 > -> id=2: EURGBP CHARTEVENT_NEWBAR_M1 price=0.83327
2016.07.15 00:09:00 > -> id=0: EURUSD CHARTEVENT_NEWBAR_M1 price=1.11166
EURUSD、EURGBP、GBPUSDの3つのペアの価格を取得しようとしています。ストラテジーテスターで"All ticks "または "Open prices only "を選択すると、すべてうまくいきます。しかし、"Every tick based on real ticks "を選択すると、なぜか1つの商品で1分間に複数の "New Bar "イベントが発生します。
繰り返しになりますが、例えば2016.07.15から2016.07.19までの間隔を選択することができます。以下はログの例で、7分目、9分目を見てください:
All ticks based on real ticks" モードを選択したときのこの動作の理由は何ですか?どのように "New bar "イベントをキャッチしますか?ビルド1375では、ティック到着の精度がミリ秒に改善されました:
テスター:ミリ秒精度の時間のサポートを追加しました。以前のストラテジー・テスターでは、時間精度は1秒でした。
実際のティックでテストする場合、ミリ秒は元のティックデータから取得されます。ティックを生成する際、ミリ秒はティック・ボリュームに従ってスペルアウトされます。例えば、1秒間に3回のティックがある場合、000、333、666ミリ秒が割り当てられます。
私は、記事に書かれている方法で新しいバーを キャッチします。つまり、インジケータはこのように「新しいバー」イベントを送信します(前の時間分、時間、日、月と比較して):
double price_current=price[rates_total-1];
TimeCurrent(time);
if(prev_calculated==0)
{
EventCustom(CHARTEVENT_INIT,price_current);
prev_time=time;
return(rates_total);
}
//--- new tick
if((flag_event & CHARTEVENT_TICK)!=0) EventCustom(CHARTEVENT_TICK,price_current);
//--- check change time
if(time.min==prev_time.min &&
time.hour==prev_time.hour &&
time.day==prev_time.day &&
time.mon==prev_time.mon) return(rates_total);
//--- new minute
if((flag_event & CHARTEVENT_NEWBAR_M1)!=0) EventCustom(CHARTEVENT_NEWBAR_M1,price_current);
更新:ビルド1375をインストールすると、この問題は解決しました。
この大きな記事をありがとう。EventChartCustomのことはこれまで知りませんでした。私は他のチャート・イベントを試していましたが、それらは人間の行動によるイベントしか考慮していませんでした。これは多くのことを解決してくれます。
ちなみに、私はMQL4で仕事をしていますが、98%同じでした。
乾杯
本当にありがとう。本当にありがとう!