2. a) フィードについて...Quicksilverのように取引のテーブルとして持っていても問題ないでしょう(もちろんプラグイン可能で切断可能なツールとして)、またQuicksilverのようにテーブルにフィルターを設定する機能(例えば私は100ロットから大きな取引だけを見たい、それらが入札または質問によって、どのように通過したか)...私は繰り返します - それは問題ないだろうがそれほど必要ではない。
b) しかし、得られたMqlTick構造体(SymbolInfoTick(_Symbol,latest_price))に、ビッドまたはアスクで取引がどのように始まったかという別のパラメータを加えることは、必要だと思いますし、市場情報のための別の要求として、この情報は取引所で渡され、私を含む多くのロボットに必要です。ある取引が買いか売りかを計算するのは、現実的ではありません...なぜなら、市場を直接動かさない、量の多い店頭取引もありますし、その他いろいろなニュアンスもありますから...」。このパラメータを構造に追加することは、開発者にとって難しいことではなく、多くの利益をもたらすと思います。
3.保留注文を 出そうとすると、EAで「Invalid order expiry date in request」というエラーが表示される。例えば、保留注文だけを出すEAを作ったのですが、FXのMT5では普通に保留注文を出すのですが、FORTSではエラーが出てしまいます。 注文の有効期限は十分で、画面に表示して確認しました。そんな悩みを抱えているのは私だけでしょうか?その理由は何でしょうか。Expert Advisorのコード
Print(" время экспирации ",mrequest.expiration," тип экспирации ",mrequest.type_time," цена ",mrequest.price);
if(type==1)
{
mrequest.type = ORDER_TYPE_BUY_STOP;
OrderSend(mrequest,mresult);
// анализируем код возврата торгового сервера
if(mresult.retcode==10009 || mresult.retcode==10008) Print("Ордер Buy по символу ",_Symbol, " с маджиком ",magic," успешно помещен, тикет ордера #:",mresult.order," !!");
else Print("Запрос на установку ордера Buy по символу ",_Symbol, " с маджиком ",magic," не выполнен - ответ сервера:" , mresult.retcode," код ошибки " ,GetLastError());
}
if(type==2)
{
mrequest.type = ORDER_TYPE_SELL_LIMIT;
OrderSend(mrequest,mresult);
// анализируем код возврата торгового сервера
if(mresult.retcode==10009 || mresult.retcode==10008) Print("Ордер Sell по символу ",_Symbol, " с маджиком ",magic," успешно помещен, тикет ордера #:",mresult.order,"!!");
else Print("Запрос на установку ордера Sell по символу ",_Symbol, " с маджиком ",magic," не выполнен - код ошибки:" , mresult.retcode," " ,GetLastError());
803を構築する。アカウントはリアル10267です。
質問が多いので、私だけが'mnj?
3~4週間前の時点では、テスターはスプレッドに関してはもう少し正しかった。 しかし、挙動に関しては......。
問題は次の点にあった。実質的にどのローソク足も、例えば20ティック以内に形成されていた。 そして50~100ティック、あるいは極値や終値付近で10ポイント上下していたのである。そして、このビートは、スキャルパーを最適化したテスターで簡単に見つけることができました。
一般的に、テスターはスキャルパー/ピプスウィング戦略には適していません。
ティックテスターの遅さは理解できる。しかし、交換のためには、これがないと困るというのが私の考えです。
どうすればいいのですか?
グラフを開くデータ」ウィンドウを開きます。チャートを必要な時点までスクロールします。チャート上でマウスを動かすと、データウィンドウにスプレッド値が表示されます。
すでに見ています。多数のバーの 場合 - スプレッドはゼロ。つまり、データが不完全なのです。スプレッド値が 0 の場合は、最後に 0 でなかった値を使用する。
テスターの中で何が起こっているのか、写真で説明しましょう。
テスターはテスト開始前に少なくとも過去1年分の履歴データをダウンロードし、スプレッドを分析する。テストが2013.01.01から始まる場合、2012年の最後の非ゼロスプレッドは2012.12.10 10:09に記録され、2990ポイントでした。
次のゼロでないスプレッドは、2013.03.15 18:49に1190で記録されています。
この間のスプレッドは0.つまり、2013年1月1日から3月15日の夕方まで、最後に判明したスプレッドは2990(私が「最後にゼロでない値」と呼んだもの)だったのです。その最後の0でない値が1190になるまで。
その後、再びスプレッド値がゼロになったので、1190を使用しているわけです。2013.03.18 18:46まで収録しています。
さらに3分後
すると、年初に比べてゼロが圧倒的に少なくなった。それでも、ゼロの羅列は残った。
これは、一連の同一スプレッドを説明するものである
不愉快な状況は、私たちが解決します。テスターのスプレッドは十分でしょう。
スプレッドは整理されます。ブローカーが詳細なスプレッドを履歴にインポートして いない場合でも、正しく設定します。
これにより、通常のテストが可能になります。
テスターの中で何が起こっているのか、写真で説明しましょう。
テスターはテスト開始前に少なくとも前年度のヒストリカルデータをロードし、スプレッドを分析する。2013.01.01からテストを開始する場合、2012年の最後の非ゼロスプレッドは2012.12.10 10:09に記録され、2990ポイントでした。
次のゼロでないスプレッドは、2013.03.15 18:49に1190で記録されています。
この間のスプレッドは0.つまり、2013年1月1日から3月15日の夕方まで、最後に判明したスプレッドは2990(私が「最後にゼロでない値」と呼んだもの)だったのです。その最後の0でない値が1190になるまで。
その後、再びスプレッドがゼロになったので、1190を使っているわけです。2013.03.18 18:46まで収録しています。
さらに3分後
すると、年初に比べてゼロが圧倒的に少なくなった。それでも、ゼロの羅列は残った。
これが、一連の同一スプレッドの説明になる。
不愉快な状況は、私たちが解決します。テスターのスプレッドは十分でしょう。
年明けから先物をテストしても、みんな3月のを取引してしまっているので意味がないのです。
四捨五入を適切に行い、平均的なスプレッドを算出する方が合理的であろう。
また、テスター用のボリュームを小さくしてください。ティックのほとんどは、現実には価格がまったく動かないときにやってくる。テスターでは、価格が何度も極限に達し、それが不十分なテストに反映されます。そして、最適化の時間が短縮されます。
1. a) 先物の糊付けについて...よくわからないが、私見ではテスターは糊付けでは動作しない(一度もトレードしていない、ターミナルにある標準EAをテストしてみた)。
b) bxからのmt5では、主要なブルーチップの先物がすでに接着されています。
c) テスターでスプレッドを手動で設定できるようになれば、戦略を最適化するのがより簡単になります。
2. a) フィードについて...Quicksilverのように取引のテーブルとして持っていても問題ないでしょう(もちろんプラグイン可能で切断可能なツールとして)、またQuicksilverのようにテーブルにフィルターを設定する機能(例えば私は100ロットから大きな取引だけを見たい、それらが入札または質問によって、どのように通過したか)...私は繰り返します - それは問題ないだろうがそれほど必要ではない。
b) しかし、得られたMqlTick構造体(SymbolInfoTick(_Symbol,latest_price))に、ビッドまたはアスクで取引がどのように始まったかという別のパラメータを加えることは、必要だと思いますし、市場情報のための別の要求として、この情報は取引所で渡され、私を含む多くのロボットに必要です。ある取引が買いか売りかを計算するのは、現実的ではありません...なぜなら、市場を直接動かさない、量の多い店頭取引もありますし、その他いろいろなニュアンスもありますから...」。このパラメータを構造に追加することは、開発者にとって難しいことではなく、多くの利益をもたらすと思います。
3.保留注文を 出そうとすると、EAで「Invalid order expiry date in request」というエラーが表示される。例えば、保留注文だけを出すEAを作ったのですが、FXのMT5では普通に保留注文を出すのですが、FORTSではエラーが出てしまいます。 注文の有効期限は十分で、画面に表示して確認しました。そんな悩みを抱えているのは私だけでしょうか?その理由は何でしょうか。Expert Advisorのコード
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
input int tp=150;
input int Deviation=5;
MqlTradeRequest mrequest;
MqlTradeResult mresult;
int OnInit()
{
return(0);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
Open_Pending_Order(1,SymbolInfoDouble(_Symbol,SYMBOL_BID)+NormalizeDouble(tp*_Point,_Digits), 1, 111);
Sleep(500);
return;
}
//+------------------------------------------------------------------+
void Open_Pending_Order(int type, double prise, double lot, long magic)
{
ZeroMemory(mrequest);
mrequest.action = TRADE_ACTION_PENDING;
mrequest.magic = magic;
mrequest.symbol = _Symbol;
mrequest.type_filling = ORDER_FILLING_RETURN;
mrequest.deviation=NormalizeDouble(Deviation*_Point,_Digits);
mrequest.type_time=ORDER_TIME_SPECIFIED;
mrequest.expiration=TimeCurrent()+6000;
mrequest.volume = lot;
mrequest.sl = 0;
mrequest.tp = 0;
mrequest.price = prise;
Print(" время экспирации ",mrequest.expiration," тип экспирации ",mrequest.type_time," цена ",mrequest.price);
if(type==1)
{
mrequest.type = ORDER_TYPE_BUY_STOP;
OrderSend(mrequest,mresult);
// анализируем код возврата торгового сервера
if(mresult.retcode==10009 || mresult.retcode==10008) Print("Ордер Buy по символу ",_Symbol, " с маджиком ",magic," успешно помещен, тикет ордера #:",mresult.order," !!");
else Print("Запрос на установку ордера Buy по символу ",_Symbol, " с маджиком ",magic," не выполнен - ответ сервера:" , mresult.retcode," код ошибки " ,GetLastError());
}
if(type==2)
{
mrequest.type = ORDER_TYPE_SELL_LIMIT;
OrderSend(mrequest,mresult);
// анализируем код возврата торгового сервера
if(mresult.retcode==10009 || mresult.retcode==10008) Print("Ордер Sell по символу ",_Symbol, " с маджиком ",magic," успешно помещен, тикет ордера #:",mresult.order,"!!");
else Print("Запрос на установку ордера Sell по символу ",_Symbol, " с маджиком ",magic," не выполнен - код ошибки:" , mresult.retcode," " ,GetLastError());
}
return;
}
と表示される(有効期限を変更しようとした)。
2013.04.24 17:40:05udalit (SBRF-6.13,M1) SBRF-6.13 によるマジックナンバー 111 の買い注文のリクエストに失敗 - サーバ応答: 10022 エラーコード 4756
2013.04.24 17:40:05 udalit (SBRF-6.13,M1) 有効期限 2013.04.25 17:00:00 有効期限タイプ2 価格 10016.0