MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案 - ページ 48 1...414243444546474849505152535455...84 新しいコメント fxsaber 2020.01.11 20:41 #471 pipsモードでは、負けポジションは全ポジション量 に対して1つのマーカーで決済し、利益が出ているポジションは0.01ロットで決済することで、ギルを手に入れることができます。 例 #include <MT4Orders.mqh> #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) const bool Init = EventSetTimer(100); void OnTimer() { while (OrdersTotal()) if (OrderSelect(0, SELECT_BY_POS)) OrderClose(OrderTicket(), (OrderProfit() > 0) ? 0.01 : OrderLots(), OrderClosePrice(), 0); OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0); } 結果 fxsaber 2020.01.12 22:28 #472 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム ライブラリ: SingleTesterCache fxsaber, 2020.01.12 23:20 現在のバージョンのtst-formatには、以下のデータは含まれていません。 時間(ミリ秒)。 PositionIDです。 MagicNumberです。 そのため、利用シーンに制約がある。 fxsaber 2020.01.12 23:02 #473 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム ライブラリ: SingleTesterCache fxsaber, 2020.01.13 00:01 複数のバグを再現する。ヘッジ口座のStrategy TesterでExpert Advisorを起動します。 #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) #define PAUSE 100000 void OnTick() { static bool FirstRun = true; if (FirstRun) { OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0); Sleep(PAUSE); OrderSend(_Symbol, OP_BUY, 2, Ask, 0, 0, 0); Sleep(PAUSE); if (OrderSelect(0, SELECT_BY_POS)) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); Sleep(PAUSE * 2); if (OrderSelect(0, SELECT_BY_POS)) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); Sleep(PAUSE * 2); TesterWithdrawal(100); FirstRun = false; } } void OnDeinit( const int ) { const int Total = OrdersHistoryTotal(); for (int i = 0; i < Total; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { OrderPrint(); Print(OrderTicketID()); // MT5-PositionID } } 以下のようになります。 2020.01.08 23:59:58 #1 2020.01.01 00:00:00 balance 0.00 0.00000 0.00000 0.00000 2020.01.01 00:00:00 0.00000 0.00 0.00 100000.00 0 2020.01.08 23:59:58 0 2020.01.08 23:59:58 #4 2020.01.02 06:00:00 buy 1.00 EURUSD 1.12137 0.00000 0.00000 2020.01.02 06:03:20 1.12132 -3.56 0.00 -4.46 0 2020.01.08 23:59:58 2 2020.01.08 23:59:58 #5 2020.01.02 06:01:40 buy 2.00 EURUSD 1.12137 0.00000 0.00000 2020.01.02 06:06:40 1.12129 -7.14 0.00 -14.27 0 2020.01.08 23:59:58 3 2020.01.08 23:59:58 #6 2020.01.02 06:10:00 balance 0.00 0.00000 0.00000 0.00000 2020.01.02 06:10:00 0.00000 0.00 0.00 -100.00 withdrawal 0 2020.01.08 23:59:58 0 そして、対応するtstファイルをスクリプトで読み込む。 #include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // https://www.mql5.com/ru/code/27611 #include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132 void OnStart() { uchar Bytes2[]; if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Если получилось прочитать последнюю кеш-запись одиночного прогона { const SINGLETESTERCACHE SingleTesterCache(Bytes2); // Загоняем ее в соответствующий объект. for (int i = 0; i < ArraySize(SingleTesterCache.Positions); i++) Print(SingleTesterCache.Positions[i].ToString()); } } 位置のデータを印刷します id = 0 mfe = 0.0 mae = -8.029999999999999 profit = -4.46 lifetime = 00:03:20 id = 0 mfe = 0.0 mae = -21.4 profit = -14.27 lifetime = 00:05:00 id = 0 mfe = 0.0 mae = 0.0 profit = 0.0 lifetime = 00:00:00 この記事にあるものをすべて比較すると、以下のようなバグがあることがわかります。 正しいIDではなく、ゼロのID。 手数料およびスワップ料は、利益計算の際に考慮されません。 撤退トレードが誤ってクローズドトレードのポジション数に含まれています。 traveller00 2020.01.13 14:59 #474 デバッガは完全に機能するわけではありません。標準的なデバッガと比べて何が足りないのか、欠点が多い順に並べてみました。 1.メモリの修正。変数の閲覧は可能ですが、編集はできないようです。 2.条件付きブレークポイント変数test=10でストップとか。 3.移動実行の可能性。つまり、ある行をクリックして、そこから実行するように指示すればいいのです。つまり、ある線をクリックして、「さあ、ここから走ってください」と言うのです。 4. 既に実行中のスクリプト/アドバイザ/インジケータへの添付。せめてクラッシュ時にアタッチできるようにすれば、解析しやすくなるのに。 Andrey Pogoreltsev 2020.01.13 16:26 #475 traveller00: デバッガは完全に機能するわけではありません。標準的なデバッガと比べて何が足りないのか、欠点が多い順に並べてみました。 2.条件付きブレークポイント変数test=10でストップとか。 if (smth) { int a; } traveller00 2020.01.13 17:00 #476 そうですね、組み替えればほとんど何でも実現できますね。ただし、4は除く。4.でも、やはりデバッガーには標準的な機能として搭載してほしいですね。 fxsaber 2020.01.14 09:52 #477 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム ライブラリ: SingleTesterCache fxsaber, 2020.01.14 10:49 今はset-filesの代わりにtst-filesを使っています。入力パラメータだけでなく、フルバックテストも用意されており、非常に迅速に切り替えが可能です。 tstのミリ秒データがないため、現在は異なるTSを完全に組み合わせてポートフォリオにすることができないのが残念です。 開発者には、既存のフィールドをフルに活用するようになってほしいですね INT64 TradeDeal::time_create; // время создания записи INT64 TradeOrder::time_setup; // время приёма ордера от клиента в систему INT64 TradeOrder::time_done; // время снятия завки のように、秒単位ではなくミリ秒単位で時間値を記述します。 一般に、実際にはtstのちょっとした欠点があるため、tstを使うことの格好良さをすべて発揮することはできない。これは修正される可能性が あります。 fxsaber 2020.01.15 10:15 #478 TesterWithdrawalはレポートにあるが、TesterDepositがない。 Grozir 2020.01.15 12:53 #479 この絵をどう理解するか。最適化グラフでは、5000付近でピーク値を示しています。しかし、最適化テーブルでは、最大値が4670となっている。最高のパスのためのパラメータはどこにあるのか? ファイル: 8c97so2_7-1.jpg 184 kb fxsaber 2020.01.15 13:30 #480 Grozir: この絵をどう理解するか。最適化グラフでは、5000付近でピーク値を示しています。そして、最適化テーブルでは、最大値が4670となっています。最高のパスのためのパラメータはどこにあるのか? Result」列をソートします。 1...414243444546474849505152535455...84 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
pipsモードでは、負けポジションは全ポジション量 に対して1つのマーカーで決済し、利益が出ているポジションは0.01ロットで決済することで、ギルを手に入れることができます。
例
結果
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
ライブラリ: SingleTesterCache
fxsaber, 2020.01.12 23:20
現在のバージョンのtst-formatには、以下のデータは含まれていません。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
ライブラリ: SingleTesterCache
fxsaber, 2020.01.13 00:01
複数のバグを再現する。ヘッジ口座のStrategy TesterでExpert Advisorを起動します。
以下のようになります。
そして、対応するtstファイルをスクリプトで読み込む。
位置のデータを印刷します
この記事にあるものをすべて比較すると、以下のようなバグがあることがわかります。
デバッガは完全に機能するわけではありません。標準的なデバッガと比べて何が足りないのか、欠点が多い順に並べてみました。
1.メモリの修正。変数の閲覧は可能ですが、編集はできないようです。
2.条件付きブレークポイント変数test=10でストップとか。
3.移動実行の可能性。つまり、ある行をクリックして、そこから実行するように指示すればいいのです。つまり、ある線をクリックして、「さあ、ここから走ってください」と言うのです。
4. 既に実行中のスクリプト/アドバイザ/インジケータへの添付。せめてクラッシュ時にアタッチできるようにすれば、解析しやすくなるのに。
デバッガは完全に機能するわけではありません。標準的なデバッガと比べて何が足りないのか、欠点が多い順に並べてみました。
2.条件付きブレークポイント変数test=10でストップとか。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
ライブラリ: SingleTesterCache
fxsaber, 2020.01.14 10:49
今はset-filesの代わりにtst-filesを使っています。入力パラメータだけでなく、フルバックテストも用意されており、非常に迅速に切り替えが可能です。
tstのミリ秒データがないため、現在は異なるTSを完全に組み合わせてポートフォリオにすることができないのが残念です。
開発者には、既存のフィールドをフルに活用するようになってほしいですね
のように、秒単位ではなくミリ秒単位で時間値を記述します。
一般に、実際にはtstのちょっとした欠点があるため、tstを使うことの格好良さをすべて発揮することはできない。これは修正される可能性が あります。
TesterWithdrawalはレポートにあるが、TesterDepositがない。
この絵をどう理解するか。最適化グラフでは、5000付近でピーク値を示しています。そして、最適化テーブルでは、最大値が4670となっています。最高のパスのためのパラメータはどこにあるのか?
Result」列をソートします。