ライブラリ: Symbol - ページ 5

 
Viktar Dzemikhau:
なぜカスタムシンボルが必要なのでしょうか?

ティック履歴を 取ることができます。取引条件の観点から、ソースがTSにどの程度適合するかを即座に理解できます。

  • 異なるシンボルの価格履歴を同期させ、誤った裁定取引を回避することができます。
  • 異なる価格履歴でテスターの統計的Expert Advisorを実行し、取引条件を比較できます。
  • 異なるフィード間のラグを比較できます。
  • 価格履歴の明らかなエラーを削除し、穴を埋めることができます。
  • 必要な統計データ(モンテカルリTC)を使って独自の価格履歴を生成することができます。
  • 合成シンボルの価格履歴を作成し、TCを実行することができます。
  • ...
  • このブランチにはいくつかの機能が実装されています。

     
    fxsaber:

    MT5テスターでは、原則として(例えばFX)、指値注文は正のスリッページを持ち、これはExpertRemoveを呼び出す。これにより、Optimisationが大幅にスピードアップします。

    カスタム・シンボルでは残高がマイナスでも取引が行われるため、これは特に重要です。

    単純な ExpertRemove では、カスタム・シンボルにそのデータがない場合(ほとんどの場合)、現在のポジショ ンを最終価格ゼロで 強制決済してしまうからです。


    したがって、ポーカー なしでバックテストから抜けるには、ExpertRemoveの前に以下の操作を行う必要があります。

    // 指値注文によるポジションの決済
    bool CloseAll()
    {
      bool Res = true;
      
      for (int i = OrdersTotal() - 1; i >= 0; i--)
        if (OrderSelect(i, SELECT_BY_POS))
          Res &= (OrderType() > OP_SELL) ? OrderDelete(OrderTicket())
                                         : OrderSend(OrderSymbol(), OrderType() ? OP_BUYLIMIT : OP_SELLLIMIT , OrderLots(), OrderClosePrice(), 100, 0, 0) && false;
        
      return(Res);
    }
    
    void OnTick( void )
    {
      if (IsRemove() && CloseAll())
        ExpertRemove();
    }


    現在のティックでのクロージングは、ネッティング(指値注文のスリッページを除去する本来のタスクが実装されている場所)のみになるので、注意してください。

    取引、自動取引システム、取引戦略のテストに関するフォーラム。

    ライブラリ: シンボル

    fxsaber, 2018.04.06 16:43

    取引所シンボルのネッティング口座の 現在値での指値注文は、次のティックを待たずに即座に執行されます(テスターでも)。


    重要なのは株式シンボルだけでなく、ネッティング口座も重要であることに注意してください。例えば、Hedge-MQ-DemoでMOEXシンボルを取っても、同じNetting-MQ-Demoと同じように(そしてTesterで)実行されるわけではありません。

    これは、全く同じMOEXシンボルでのバックテストが、口座タイプによって異なることがある理由の一つです。

    そのため、次のティックを待たなければならないこともあります。


    それがダンスです。

     

    取引、自動取引システム、取引戦略のテストに関するフォーラム

    ライブラリ: シンボル

    fxsaber, 2018.04.07 22:37

    まとめ

    実際のティックでは、ティック数は16倍減少し(最も軽いフィルター)、最適化の速度は14倍増加し、品質は全く低下しませんでした(ここに入力しなかった分析)。もちろん、これはTSを特定の方法で記述した場合にのみ可能です。特に、バー分析がない場合だ。

    以前の無料のユニバーサル・アクセラレーションでは 2倍しか上がらなかった。現在のものも無料(品質は落ちない)だが、普遍性は低い。しかし、見返りは1桁以上ある。今はこの方法でしかTCを最適化していない。間違いはない。

    加速に関する話題なので、加速のためのもう一つのレシピを紹介しよう。

    取引、自動取引システム、取引戦略のテストに関するフォーラム。

    エラー、バグ、質問

    fxsaber, 2018.09.11 17:15

    Tester フォルダを 5GbRAMDisk に移動し、MT5 ディレクトリで実行しました。

    mklink /j Tester z:\Tester


    SSDは安らかに眠り、最適化は無料で~1.5倍(目測)速くなった!

    同時に SSD は死んで いません。

     
    fxsaber:

    単純なExpertRemoveは使えない。なぜなら、カスタム・シンボルでそのデータがない場合(ほとんどの場合)、現在のポジションは強制的に最終価格ゼロで クローズされるからだ。


    これらはそのようなダンスです。

    松葉杖はまた別の

    取引、自動取引システム、取引戦略のテストに関するフォーラム

    エラー、バグ、質問

    fxsaber, 2018.09.12 18:30

    ビデオの中で

    実際のティックで取引所インストルメント。バーはBidで構築され、フリッパーデータはなく、BUYポジションがオープンされています。ポジションの現在の終値がゼロであることがよくわかります。

    PositionGetDouble(POSITION_PRICE_CURRENT)

    が常にゼロであることがよくわかります。テスターに、ある銘柄シンボルがBidでBUYポジションをクローズすべきであると説明するにはどうすればよいでしょうか?現在、エクイティさえも計算されていません。


    ですから、今のところ唯一の解決策は、(Bid+Ask)/2を フリッパーすることです。

     
    fxsaber:

    加速に関する話題なので

    テスターが3ヶ月間(800万ティック)の "real ticks "ウォークスルーに100ミリ秒かかる(4000 OrderSend、800トレード+EAロジック)。レシピはカスタムシンボル です。

     

    コードをありがとう。これを元に自分でも作ってみたんだ。ただ、クローン方法を少し変更して、履歴のある部分だけロードできるようにした。そうしないと、刻みが多いとRAMを大量に消費してしまう。

    bool CiCustomSymbol::Clone(const string _src_symbol,const ulong _from_msc=0,const ulong _to_msc=LONG_MAX)
    
     
    Denis Kirichenko:

    履歴のある部分だけロードできるように、クローン作成方法を少し調整した。そうしないと、ティックがたくさんある場合、RAMを大量に消費してしまう。

    ありがとうございます。

     

    また、ファイルからカスタム履歴をロードする2つのメソッドを作成しました。例えば、ティックと分を含む2つのファイルがあるとします。タスクは、それらを選択したシンボルのティックとクォートのデータベースにロードすることです。

    bool              LoadTicks(const string _src_file_name);
    bool              LoadRates(const string _src_file_name);
     
    Denis Kirichenko:

    また、ファイルからカスタム履歴をロードする2つのメソッドを作成しました。例えば、ティックと分を含む2つのファイルがあるとします。タスクは、それらを選択したシンボルのティックとクォートのデータベースにロードすることです。

    そのため、一般的なケースではフォーマットは定義されていません。

     
    fxsaber:

    だから、フォーマットは一般的に定義されていない

    そうですね、でも考えないと。しかし、私は書式を指定したティックのアーカイブを持っているので、とりあえずそれを作ってみた。<DATE>,<TIME>,<BID>,<ASK>というシンプルなものだ。