エラー、バグ、質問 - ページ 1804

 
このトピックに関係のないコメントは、「MQL4に関する初心者の質問、アルゴリズムやコードに関するヘルプや議論」に移動しました。
 
fxsaber:
スリープは、シンボルがマーケットウォッチにないときのみ必要です。指標前(および指標中)のMarket Watchにあるすべてのシンボルについては、スリップは必要ありません。
なるほど。
 

1531 - Metaquotes-Demoのブレーキは消えていない。

要求と応答

Request.action = TRADE_ACTION_DEAL (1)
Request.magic = 0
Request.order = 0
Request.symbol = #KO
Request.volume = 1.0
Request.price = 40.31
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 100
Request.type = ORDER_TYPE_BUY (0)
Request.type_filling = ORDER_FILLING_RETURN (2)
Request.type_time = ORDER_TIME_GTC (0)
Request.expiration = 1970.01.01 00:00:00
Request.comment = My Position
Request.position = 0
Request.position_by = 0
Result.retcode = 10009
Result.deal = 117613087
Result.order = 133997293
Result.volume = 1.0
Result.price = 40.31
Result.bid = 40.28
Result.ask = 40.31
Result.comment = Request executed 345.781 + 26.356 ms
Result.request_id = 5712
Result.retcode_external = 0

OrderSendに 345msかかり、対応する注文と取引が履歴に残るまで26msかかりました。つまり、今まで見たこともないような非常に遅い同期を実現しているのです。

標準ログ

2017.02.14 22:26:46.767 Trades  '5122740': prices for #KO 1.00
2017.02.14 22:26:46.852 Trades  '5122740': accepted prices for #KO 1.00
2017.02.14 22:26:46.852 Trades  '5122740': answer prices for #KO 1.00 40.28 / 40.31 in 86.046 ms (0.190 ms on server)
2017.02.14 22:26:46.852 Trades  '5122740': request buy 1.00 #KO at 40.31
2017.02.14 22:26:47.107 Trades  '5122740': accepted request buy 1.00 #KO at 40.31
2017.02.14 22:26:47.107 Trades  '5122740': deal #117613087 buy 1.00 #KO at 40.31 done (based on order #133997293)
2017.02.14 22:26:47.107 Trades  '5122740': order #133997293 buy 1.00 / 1.00 #KO at 40.31 done in 345.709 ms (3.022 ms on server)

新ログは1531になりました!この場合、何がどうなっているのか、説明してください。

ZZYのログは減速後ほぼ直後。

2017.02.14 22:26:47.433 Trades  '5122740': prices for #KFT 1.00
2017.02.14 22:26:47.503 Trades  '5122740': accepted prices for #KFT 1.00
2017.02.14 22:26:47.506 Trades  '5122740': answer prices for #KFT 1.00 49.17 / 49.20 in 70.980 ms (4.166 ms on server)
2017.02.14 22:26:47.506 Trades  '5122740': request buy 1.00 #KFT at 49.20
2017.02.14 22:26:47.583 Trades  '5122740': accepted request buy 1.00 #KFT at 49.20
2017.02.14 22:26:47.583 Trades  '5122740': deal #117613092 buy 1.00 #KFT at 49.20 done (based on order #133997299)
2017.02.14 22:26:47.583 Trades  '5122740': order #133997299 buy 1.00 / 1.00 #KFT at 49.20 done in 149.304 ms (3.015 ms on server)

これらはRequestedキャラクターなので、マーケットオーダーは他より遅くなります。

 

TRADE_ACTION_REMOVEの ブレーキ。

Request.action = TRADE_ACTION_REMOVE (8)
Request.magic = 0
Request.order = 134003202
Request.symbol =
Request.volume = 0.0
Request.price = 0.0
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 0
Request.type = ORDER_TYPE_BUY (0)
Request.type_filling = ORDER_FILLING_FOK (0)
Request.type_time = ORDER_TIME_GTC (0)
Request.expiration = 1970.01.01 00:00:00
Request.comment =
Request.position = 0
Request.position_by = 0
Result.retcode = 10009
Result.deal = 0
Result.order = 134003202
Result.volume = 0.0
Result.price = 0.0
Result.bid = 0.0
Result.ask = 0.0
Result.comment = Request executed 290.089 + 0.005 ms
Result.request_id = 10078
Result.retcode_external = 0
FL      0       23:02:46.797    Trades  '5122740': buy limit 1.00 Si-3.17 at 56288
GG      0       23:02:46.849    Trades  '5122740': accepted buy limit 1.00 Si-3.17 at 56288
PR      0       23:02:46.852    Trades  '5122740': order #134003202 buy limit 1.00 / 1.00 Si-3.17 at market done in 54.423 ms (0.342 ms on server)
PR      0       23:02:46.854    Trades  '5122740': cancel order #134003202 buy limit 1.00 Si-3.17 at 56288
LL      0       23:02:47.142    Trades  '5122740': accepted cancel order #134003202 buy limit 1.00 Si-3.17 at 56288
CE      0       23:02:47.144    Trades  '5122740': cancel #134003202 buy limit 1.00 Si-3.17 at market done in 290.050 ms (1.400 ms on server)
HH 端末からログブックを見ても、この線は一切出てきませんでした。ファイルから直接取り出す必要があった。
 
エラー [価格なし] オンザスポット
2017.02.14 23:18:41.442 '5122740': failed instant buy 1.00 EURPLN at 4.30632 (deviation: 100) [No prices]

値段がないとはどういうことだ!過去ログに値段まであるのか!?

クエリ

2017.02.14 23:18:41.442 Request.action = TRADE_ACTION_DEAL (1)
2017.02.14 23:18:41.442 Request.magic = 0
2017.02.14 23:18:41.442 Request.order = 0
2017.02.14 23:18:41.442 Request.symbol = EURPLN
2017.02.14 23:18:41.442 Request.volume = 1.0
2017.02.14 23:18:41.442 Request.price = 4.30632
2017.02.14 23:18:41.442 Request.stoplimit = 0.0
2017.02.14 23:18:41.442 Request.sl = 0.0
2017.02.14 23:18:41.442 Request.tp = 0.0
2017.02.14 23:18:41.442 Request.deviation = 100
2017.02.14 23:18:41.442 Request.type = ORDER_TYPE_BUY (0)
2017.02.14 23:18:41.442 Request.type_filling = ORDER_FILLING_RETURN (2)
2017.02.14 23:18:41.442 Request.type_time = ORDER_TIME_GTC (0)
2017.02.14 23:18:41.442 Request.expiration = 1970.01.01 00:00:00
2017.02.14 23:18:41.442 Request.comment = My Position
2017.02.14 23:18:41.442 Request.position = 0
2017.02.14 23:18:41.442 Request.position_by = 0
2017.02.14 23:18:41.442 Result.retcode = 10021
2017.02.14 23:18:41.442 Result.deal = 0
2017.02.14 23:18:41.442 Result.order = 0
2017.02.14 23:18:41.442 Result.volume = 0.0
2017.02.14 23:18:41.442 Result.price = 0.0
2017.02.14 23:18:41.442 Result.bid = 0.0
2017.02.14 23:18:41.442 Result.ask = 0.0
2017.02.14 23:18:41.442 Result.comment = No prices 0.028 + 0.000 ms
2017.02.14 23:18:41.442 Result.request_id = 0
2017.02.14 23:18:41.442 Result.retcode_external = 0
2017.02.14 23:18:41.442
2017.02.14 23:18:41.442 SymbolInfoDouble(Symb,::SYMBOL_BID) = 4.30151
2017.02.14 23:18:41.442 SymbolInfoDouble(Symb,::SYMBOL_ASK) = 4.30632
 
fxsaber:
エラー [価格なし] オンザスポット
2017.02.14 23:18:41.442 '5122740': failed instant buy 1.00 EURPLN at 4.30632 (deviation: 100) [No prices]

ログでも価格がないなんて!?

最近、リアルアカウントで同じエラーが出ました。注文を出そうとしたが、サーバーで実行されなかった。

現在、ある有名企業のテクニカルサポートとL.A.でやり取りしています。今、某有名企業L社のテクニカルサポートとチャットしているのですが(やりとりは秘密なので呼びません)、彼らの説明では、MT4(彼らはMT4を持っています)からFIXで送信された注文も、彼らのトレードサーバーでの執行時間は 同じで、1-6ms程度だそうです。そこで、MT4から取引する場合、注文を出してから返事が来るまで約40~60msかかるので、40~50msとはどの程度の時間なのかを聞いてみました。ネットワーク遅延を調べるように、彼らは寛容に肩をすくめ、私がPing1-2msと伝えると、また肩をすくめるのです。結論は、MT4/5のサーバー部分が遅いということです。今、新しいログがそれを示しています。時間がFIXのように「きれい」にならないのはわかるが、せめて同じ順番であるべきだ。
 
Andrey Dik:
SZY、今、L.A.で有名な会社の技術サポートと話をしているんだ。(なぜか電話で問い合わせると、トレードサーバーでの約定 時間は、FIXで送られてくるMT4(同社はMT4)から出る注文と同じで、1~6ms程度と説明される。そこで、MT4から取引する場合、注文を出してから返事が来るまで約40~60msかかるので、40~50msとはどの程度の時間なのかを聞いてみました。ネットワーク遅延を調べるように、彼らは寛容に肩をすくめ、私がPing1-2msと伝えると、また肩をすくめるのです。結論は、MT4/5のサーバー部分が遅いということです。今、新しいログがそれを示しています。時間がFIXのように「きれい」にならないのはわかるが、せめて同じ順番であるべきだ。

IN L...このとき、「注文をシステムに取り込んで、それを送り返すまでの実行時間は、ごくわずかだ」ということを念頭に置いていた。MT4サーバーから、またはFIXや他のAPIを通じて注文を取得することができます。MT4サーバー自体は、内部処理に数十msを費やしており、実行とは一切関係がありません。

昔々、MT4の最小時間は150msでした。40~60になったということで、何か本気で手を入れたようです。しかし、MT5の方が明らかに速い。これで、サーバーがどれくらいの時間稼動したのか、ログで確認できるようになりました。あとは、主な時間が何に費やされているかを把握することです。

 
このトピックに関係のないコメントは、「CopyClose なぜエラーが 発生するのか」に移動しました。".
 

コンパイルエラー: f()にアクセスできない //2

typedef void (*fn)();
#import "Test.ex5"
        void f(); //1
#import
void f() {} //2
void OnStart()
{
        fn g1 = Test::f; //нормально
        fn g2 =       f; //Error: 'f' - cannot resolve function address
}
 
@Slawa さん、はっきりさせてください、OnCalculate()関数の外でインジケータバッファを書き込むことに何か制約があるのでしょうか?OnTimer()、OnBookEvent()、OnChartEvent()関数でバッファを書き込む場合、すべて正しく書き込まれるのでしょうか。