MetaTrader 5 Strategy Tester: バグ、不具合、改善のための提案 - ページ 27

 
fxsaber:
おそらく見逃したのでしょう。

彼らはそれを見逃さなかった。

現在のoptファイルのフォーマットでは、それができません。考えないといけない。

 
Slava:

彼らはそれを見逃さなかった。

現在のopt-fileのフォーマットでは、できません。考えないといけない。

何も変える必要はないようです。

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

バグ、バグ、質問

スラバ さん 2019.04.19 15:11

//+------------------------------------------------------------------+
//| входные параметры тестирования                                   |
//+------------------------------------------------------------------+
struct TestCacheInput
  {
   wchar_t           name[64];
   int               flag;                    // оптимизируемый параметр
   int               type;                    // тип TYPE_XXX
   int               digits;                  // количество знаков после запятой
   int               offset;                  // смещение в буфере параметров
   int               size;                    // размер значения параметра в буфере
   //--- 0-start,1-step,2-stop
   union { INT64 integers[3]; double numbers[3]; };
  };
   m_header.header_size=sizeof(TestCacheHeader)+m_inputs.Total()*sizeof(TestCacheInput)+m_header.parameters_size;
//--- кешируемая запись содержит номер прохода (при генетике - номер по порядку), структуру результатов тестирования (если математика, то 1 double), буфер оптимизируемых параметров и генетический проход

各入力は、必須フィールドを持つ構造体によって定義される。

 

とても簡単に調べることができるようになりました。

  • テスターの全設定とEAの入力パラメータ。
  • 最適化の各パスのすべての統計データ。


しかし、例えば1回のパスの統計データを調べることはできません。明らかです、tst-formatがあります。しかし、Strategy TesterでCTRL+Cを使い、Backtestタブで統計データとのセットファイルを形成することができれば便利である。

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

ライブラリ: TesterCache

fxsaber, 2019.11.11 04:45

; saved on 2019.11.13 19:40:01
; Experts\Examples\MACD\MACD Sample LImitTP.ex5
; EURUSD
; 2019.09.01 - 2019.11.13
;
InpLots=0.1
InpTakeProfit=200||10||5||500||Y
InpTrailingStop=290||30||10||300||Y
InpMACDOpenLevel=5||5||5||200||Y
InpMACDCloseLevel=180||5||5||200||Y
InpMATrendPeriod=8||1||1||200||Y
;
; initial_deposit = 10000.0
; withdrawal = 0.0
; profit = 479.15
; grossprofit = 479.15
; grossloss = 0.0
; maxprofit = 99.8
; minprofit = 0.0
; conprofitmax = 479.15
; maxconprofit = 479.15
; conlossmax = 0.0
; maxconloss = 0.0
; balance_min = 10000.0
; maxdrawdown = 0.0
; drawdownpercent = 0.0
; reldrawdown = 0.0
; reldrawdownpercent = 0.0
; equity_min = 9997.700000000001
; maxdrawdown_e = 253.6000000000004
; drawdownpercent_e = 2.457388152985982
; reldrawdown_e = 253.6000000000004
; reldrawdownpercnt_e = 2.457388152985982
; expected_payoff = 47.91500000000001
; profit_factor = 1.797693134862316 e+308
; recovery_factor = 1.889392744479493
; sharpe_ratio = 1.069726339729858
; margin_level = 1.797693134862316 e+308
; custom_fitness = 0.0
; deals = 15
; trades = 10
; profittrades = 10
; losstrades = 0
; shorttrades = 6
; longtrades = 4
; winshorttrades = 6
; winlongtrades = 4
; conprofitmax_trades = 10
; maxconprofit_trades = 10
; conlossmax_trades = 0
; maxconloss_trades = 0
; avgconwinners = 10
; avgconloosers = 0

他の人はどうか知りませんが、セットファイルにすべての情報が含まれていると便利ですね。それが何なのか、どこから来て、いくらなのかを把握するのはとても早いです。


ExpTradeSummary構造体フィールドの出力です。

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

バグ、バグ、質問

スラバ さん 2019.04.19 15:11

//+------------------------------------------------------------------+
//| Структура для статистики торговли                                |
//+------------------------------------------------------------------+
struct ExpTradeSummary;

#define  TOSTRING(A) #A + " = " + (string)(A) + "\n"

  string ToString( void ) const
  {
    return(
      TOSTRING(initial_deposit) +      // начальный депозит
      TOSTRING(withdrawal) +           // снято средств
      TOSTRING(profit) +               // общая прибыль (+)
      TOSTRING(grossprofit) +          // общий плюс
      TOSTRING(grossloss) +            // общий минус
      TOSTRING(maxprofit) +            // максимально прибыльная сделка
      TOSTRING(minprofit) +            // максимально убыточная сделка
      TOSTRING(conprofitmax) +         // прибыль максимальной последовательности прибыльных сделок
      TOSTRING(maxconprofit) +         // максимальная прибыль среди последовательностей
      TOSTRING(conlossmax) +           // убыток максимальной последовательности убыточных сделок
      TOSTRING(maxconloss) +           // максимальный убыток среди последовательностей
      TOSTRING(balance_min) +          // минимальное значение баланса (для расчёта абсолютной просадки)
      TOSTRING(maxdrawdown) +          // максимальная просадка по балансу
      TOSTRING(drawdownpercent) +      // отношение максимальной просадки по балансу к её пику
      TOSTRING(reldrawdown) +          // максимальная относительная просадка по балансу в деньгах
      TOSTRING(reldrawdownpercent) +   // максимальная относительная просадка по балансу в процентах
      TOSTRING(equity_min) +           // минимальное значение equity (для расчёта абсолютной просадки по equity)
      TOSTRING(maxdrawdown_e) +        // максимальная просадка по equity
      TOSTRING(drawdownpercent_e) +    // отношение максимальной просадки по equity к её пику (+)
      TOSTRING(reldrawdown_e) +        // максимальная относительная просадка по equity в деньгах
      TOSTRING(reldrawdownpercnt_e) +  // максимальная относительная просадка по equity в процентах
      TOSTRING(expected_payoff) +      // матожидание выигрыша (+)
      TOSTRING(profit_factor) +        // показатель прибыльности (+)
      TOSTRING(recovery_factor) +      // фактор восстановления (+)
      TOSTRING(sharpe_ratio) +         // коэффициент Шарпа (+)
      TOSTRING(margin_level) +         // минимальный уровень маржи
      TOSTRING(custom_fitness) +       // пользовательский фитнесс - результат OnTester (+)
      TOSTRING(deals) +                // общее количество сделок
      TOSTRING(trades) +               // количество сделок out/inout
      TOSTRING(profittrades) +         // количество прибыльных
      TOSTRING(losstrades) +           // количество убыточных
      TOSTRING(shorttrades) +          // количество шортов
      TOSTRING(longtrades) +           // количество лонгов
      TOSTRING(winshorttrades) +       // количество прибыльных шортов
      TOSTRING(winlongtrades) +        // количество прибыльных лонгов
      TOSTRING(conprofitmax_trades) +  // максимальная последовательность прибыльных сделок
      TOSTRING(maxconprofit_trades) +  // последовательность максимальной прибыли
      TOSTRING(conlossmax_trades) +    // максимальная последовательность убыточных сделок
      TOSTRING(maxconloss_trades) +    // последовательность максимального убытка
      TOSTRING(avgconwinners) +        // среднее количество последовательных прибыльных сделок
      TOSTRING(avgconloosers)          // среднее количество последовательных убыточных сделок
    );
 

せっかく強力なキャッシュが登場したのだから、多少は改善した方がいい。

これで、OnTesterという1つのユーザーパラメーターだけがキャッシュに入るようになりました。


ExpTradeSummaryが3倍、5倍と大きくなればとても便利だと思います。で埋めることができる。

double OnTester( double &CustomDoubles[] );


今、キャッシュを解析してみると、明らかに一人のユーザーの値ではなく、複数のユーザーの値を見る可能性に欠けています。

 

これはMetaquotesへのリクエストですが、少なくともチームの開発者の誰かが答えてくれることを願っています(すでに質問されていたら申し訳ありませんが、言語の問題でロシア語のフォーラムで答えを見つけることができません)。

ストラテジーテスターの改良点として、デモ口座では決して起こらない取引状況を、リアル口座でのみテストできる機能を追加してほしいという要望は妥当でしょうか?十分にテストできないまま、堅牢なコードを作るのは本当に大変なことだからです。

これは主に、(Forex / CFDとは対照的に)市場が中央集権的であることが理由です。例えば、部分的なオーダーフィリングは、デモ口座では(私の知る限り)起こりませんが、先物や株式の実際の口座ではよくある状況です。そのような状況をシミュレーションできるツールがあれば、非常に便利だと思います。

パーシャルフィルはあくまで一例で、もしMetaquotesがそのような機能に取り組むのが良いと考えるなら、私はアイデアを一元化し、そのような機能の詳細な説明を提供したいと思っています。(自分のニーズは特になし)。

お忙しい中、ご回答ありがとうございました。

 
Alain Verleyen:

信頼性の高いコードを作るには、十分なテストができないことには難しい。

そのために、すべてのEA開発者は何年もかけて実際の口座で 取引ライブラリのデバッグを行っています。

これなくして、信頼性の高いコードを作ることはできない。

 
fxsaber:

そのために、すべてのEA開発者は何年もかけて実際の口座で 取引ライブラリのデバッグを行っています。

これなくして、信頼性の高いコードを作ることはできない。

確かにそうですが、実際のアカウントで時間をかけてテストする手間が省けるのは助かりますね。

 
Artyom Trishkin:

確かにそうなのですが、この機能があれば、実際のアカウントで何度も時間をかけてテストする必要がなくなります。

目的は2つあります。

  1. 現在の取引状況、取引履歴を表示し、注文を送信する方法を知っているだけの十分なトレーディングバイオテークです。ここで、テスターはほとんど役に立ちません。デモは、ストレステストを実施すれば、かなり効果があります。実際のアカウントではできません。高価なものです。そのため、膨大な数のシンボル/サーバーでのデモしかありません。そんな図書館は、片手の指に余るほどある。
  2. 部分約定、リダイレクトなどの売買ロジックを実践。この点は、最初の点よりずっと簡単です。そして、テスターを使わずに同じMT4で繰り返し解決しています。本当に単純なことなんです。

テスターがお手伝いできるのは、2つ目のポイント、シンプルなものだけです。TSの「流動性上限」と言われる部分を測定することで、部分執行を実施することができます。しかし、それは極めて粗い見積もりでしょう。


テスターの機能拡張は、その機能拡張が使用されない場合でも、追加的なブレーキとなることを理解すべきである。

 
fxsaber :

そのために、すべてのEA開発者は何年もかけて実際の口座で 取引ライブラリのデバッグを行っています。

これなくして、信頼性の高いコードを作ることはできない。

無駄で傲慢な書き込みで私をきっぱり忘れることをお勧めします。

残念ながら、私にはそれらをフィルタリングする方法がないのです。

私の投稿には絶対に返信しないでください、通知のせいで私の時間を無駄にしています。

 
Alain Verleyen:

無駄で傲慢な書き込みで私をきっぱり忘れることをお勧めします。

一度、ロシア語の自動翻訳機の妥当性を疑ってみることをお勧めします。


残念ながら、私はそれらをフィルタリングする方法がありません。

私の投稿には絶対に返信しないでください、通知のせいで私の時間が無駄になります。

OKです。