スクリプト: ThirdPartyTicks - ページ 2

 
Maxim Dmitrievsky:

すみません、過去の投稿は削除できるのですが、そうすべきでしょうか?)

私はランクの純度のために戦わない。ツールキットに何か書いてあるように、書くんだ。

MOのストレンジャーに対しては、まず他のソースとの比較パフォーマンスを行うだろう。

そして、より地に足の着いた人たちにはテスターを。


ZЫ "店の同志 "に提案する。

Машинное обучение в трейдинге: теория и практика (торговля и не только)
Машинное обучение в трейдинге: теория и практика (торговля и не только)
  • 2016.05.26
  • www.mql5.com
Добрый день всем, Знаю, что есть на форуме энтузиасты machine learning и статистики...
 
fxsaber:

私はランクの純粋さのために戦うのではなく、それを生かす。ツールキットについて何かあれば、私に書いてください。

MO-ストレンジャーについては、まず他の情報源との比較特性だ。

そして、より地に足の着いた人のために-テスター。


ZYは "戦友 "に提案する。

私の指に表示されるまで、私以外の誰にも知覚される可能性は低いが、私は書いた:)

 

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

ライブラリ: シンボル

fxsaber, 2018.04.07 22:37

同時に、この実装の短いテストも行います(バーのスプレッドのカウントが異なるだけです)。

すべてのティック」と「OHLC M1」の2つのモードを比較します。


すべてのティック

final balance 10006150.00 EUR
TESTER4_Censored,M1: 6576734 ticks, 60353 bars generated. Test passed in 0:00:04.587 (including ticks preprocessing 0:00:00.343).
394 Mb memory used including 27 Mb of history data, 128 Mb of tick data


OHLC M1

final balance 10006119.00 EUR
TESTER_Censored,M1: 240366 ticks, 60353 bars generated. Test passed in 0:00:00.359 (including ticks preprocessing 0:00:00.031).
306 Mb memory used including 27 Mb of history data, 64 Mb of tick data


バックテストの質は同じで、一回の実行で2番目のバリエーションのパフォーマンスは12倍高い。

 
Исторически сложилось, что для MetaTrader 4 пользуются популярностью сторонние приложения, позволяющие получать тиковую историю из различных источников. Как правило, ее используют в Тестере Стратегий как полигон для проверки советников, а также для исследований (машинное обучение и т.д.). Некоторые источники котировок в обсуждениях стали почти стандартом при поиске "грааля".
働くTCを探すとき、多くの人がナンセンスに苦しむことを示す単純な例。特に、機械学習のファン。

マーケット・ウォッチ・ウィンドウで選択されたすべてのシンボル」モードで、4月の第1週にEAの最適化(実際のティックによる)を実行してみましょう。

#include <fxsaber\ThirdPartyTicks\Data.mqh>

input double inCommissionProcent = 0.002;
sinput bool inLog = true;
sinput int inOnTester = 0;

#define  RESERVE 100000

// 相対値と絶対値(pips)での潜在利益
class MAXPROFIT : public DATA<double>
{
private:    
  bool FlagUP;
  double MinMax;

  const double MarkupAsk;  
  const double MarkupBid;

  void SetMarkup( MqlTick &Tick ) const
  {
    Tick.bid *= this.MarkupBid;
    Tick.ask *= this.MarkupAsk;
    
    return;
  }
  
  static void MathLog( MqlTick &Tick )
  {
    Tick.bid = ::MathLog(Tick.bid);
    Tick.ask = ::MathLog(Tick.ask);
    
    return;
  }
  
  double MathRelative( const double Value ) const
  {
    return(this.Relative ? ::MathExp(Value) : Value);
  }
  
public:  
  const bool Relative;
  
  MAXPROFIT( const double Commission = 0, const bool inRelative = false ) : FlagUP(true), MinMax(-DBL_MAX), Relative(inRelative),
                                                                            MarkupBid(1 - Commission), MarkupAsk(1 + Commission)
  {
  }
  
  void AddTick( MqlTick &Tick )
  {
    this.SetMarkup(Tick);
    
    if (this.Relative)
      MAXPROFIT::MathLog(Tick);
    
    if (this.FlagUP)
    {
      if (Tick.bid > this.MinMax)
        this.MinMax = Tick.bid;
      else if (Tick.ask < this.MinMax)
      {
        this.Add(this.MinMax, RESERVE);
        
        this.MinMax = Tick.ask;
        this.FlagUP = false;
      }
    }
    else
    {
      if (Tick.ask < this.MinMax)
        this.MinMax = Tick.ask;
      else if (Tick.bid > this.MinMax)
      {
        this.Add(this.MinMax, RESERVE);
        
        this.MinMax = Tick.bid;
        this.FlagUP = true;
      }
    }
    
    return;
  }
  
  double GetProfit() const
  {
    double Res = 0;
    
    const uint Size = this.GetAmount();
    
    for (uint i = 1; i < Size; i++)
      Res += this.MathRelative(::MathAbs(this.Data[i] - this.Data[i - 1]));
      
    if (Size)
      Res += this.MathRelative(::MathAbs(this.MinMax - this.Data[Size - 1]));
      
    return(Res);
  }
};

MAXPROFIT MaxProfit(inCommissionProcent / 100, inLog);

void OnTick()
{  
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    MaxProfit.AddTick(Tick);
}

double OnTester()
{  
  switch (inOnTester)
  {
  case 0:
    return(MaxProfit.Relative ? MaxProfit.GetProfit() : (int)(MaxProfit.GetProfit() / _Point + 0.1));
  case 1:
    return(MaxProfit.GetAmount());
  case 2:
    return((MaxProfit.Relative ? MaxProfit.GetProfit() : (int)(MaxProfit.GetProfit() / _Point + 0.1)) / MaxProfit.GetAmount());
  }
  
  return(0);
}


結果

この数値は、履歴(手数料を含む)で可能な最大利益です。

スクリーンショットでは、MQ-Demoから取得したEURUSDが強調表示されており、他のシンボルはThirdPartyTicksです。EURUSDが8878.74であるのに対し、そのサードパーティ名が15134.94であることがわかります。これは、EURUSD上のどのTSも、その名前のシンボルよりも少ない利益を示すことを意味します。

MQ-DemoのEURUSDで同じMOを行う人は、利益を上げる可能性のあるTSの全層を見逃すことになる。そしてFOREXシンボルを非常に過小評価することになる。


一番上はGBPAUDだ。そのレベルは、完璧な実行でテスターのOOSにスペースを表示するピプサリストを書くのが非常に簡単であることを示している。

デモも完璧な結果を示すので、聖杯の幻想を壊すのはデモではない。なぜなら、デモも完璧な結果を示すからである。


まず第一に、パイパーの期待値が低いため、手数料が邪魔になります~8ピップス(*週に数千の取引)。しかし、さらに悪いことは、約定結果が歪められることです。

市場を通じて実現する場合、多くのマイナス・スリッページが発生し、それが手数料と一緒になってマットの期待値をカバーすることになります。そして、資金が流出する。

指値注文で実現する場合、マイナスのスリッページは発生しないが(プラスのスリッページが発生することもある)、約定しない注文が非常に頻繁に再取引されることになる。そのため、同じデモにあったはずの膨大な数の有益な取引が無視されることになります。そうなると、また資金が流出してしまう。もしこれがFXではなく証券取引所であれば、約定によって状況はずっと良くなるだろう。


この単純な例から得られる結論は、おそらくまだある。TSを書く前に、クォートのソース(ブローカー)だけでなく、シンボルによっても最適な取引条件(クォート)を選択します。このEAは、非常に明確にこれを助けることができます。この方法を使用すると、MT5であるブローカーをチェックし、次に別のブローカーをチェックすることができます。そして、どのTSがどこで、どのシンボルによって働くのがより有益であるかを即座に理解することができます。

 

このようなティック戦略はブローカーに簡単に殺されるため、誰もこのようなことはしません。

デモ・メタクォートのクォートでテストする人はおらず、取引するブローカーのクォートでテストすることは明らかです。

そして、MOがそれとどのような関係があるのかは、まだ明らかではない。)

 
Maxim Dmitrievsky:

そのようなティック戦略はブローカーに簡単にやられてしまうので、誰もやらない

ここではティックベースのTSについて話していないと思います。低い期待値はピプシングではありません。

誰もデモのメタクォートのクォートでテストしないのは明らかですが、取引しようとしているブローカーのクォートでテストします。

MQ-Demoはその一例です。TSの検索がそれに行くことをdtsを選択するときの議論は何ですか?

そして、MOはそれと何をしなければならないことはまだ明らかではありません:)

合理的で研究対象が最初に取られ、ランダムな証券会社の いくつかのAUDCAD ではないことに留意すべきである。

 
fxsaber:

ここではティックTSの話はなかったと思う。低マットの期待値はピプシングではない。

例えばMQ-Demoはそうだった。証券会社を選ぶときに、TSの検索が行われるというのはどういう論拠なのでしょうか?

適当な証券会社のAUDCADではなく、合理的な研究対象が最初に取られることに注意すべきです。

通常、ストラテジーは始値で 行われ、ティックはまったく影響しません。それなら、どのブローカーであろうと

 
Maxim Dmitrievsky:

通常、戦略は始値で 取られるだけで、ティックはまったく影響しません。それなら、どのブローカーでも同じです。

また、完全に独立するために、H1またはより良いD1を取ることができます。総じて、奇妙な連中だ。

 
fxsaber:

そして、完全に独立するためにH1やもっといいD1を取ることもできる。一般的に、奇妙な人たちだ。

まあ、1-5分足なら大丈夫だよ :) 自分でTFを作ることができる。

ところで、あなたのアーカイブによると - 彼らはLP Admiral Marketsを持っている、多分それはそれから直接引用符を取ることは理にかなっている、それは同じでなければなりません。

 
Maxim Dmitrievsky:

まあ、1~5分なら普通だよ(笑)。

そして、その前が "普通 "で、後が "普通でない "という境界線はどこにあるのでしょうか?