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

 

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

トレーディングにおける機械学習:理論と実践(トレーディングのみならず)

fxsaber, 2018.04.15 16:31

適切なティック分布でカスタムシンボルを作成し、グレイルTCを書いてみよう。バックテストをして結果を投稿しよう。

// 生成された目盛りからカスタム・キャラクターを作成する例

#property script_show_inputs

input string SymbName = "TESTER";

#include <fxsaber\ThirdPartyTicks\CustomSymbol.mqh> //https://www.mql5.com/ja/code/20225

// 必要なプロパティを持つ目盛り履歴の生成 - 技術的な例
int GetTicks( MqlTick &Ticks[], const int Amount = 1 e5 )
{
  static const MqlTick NullTick = {0};
  
  const int Size = ArrayResize(Ticks, Amount);
  
  long time = (TimeCurrent() - 7 * 24 * 3600) * 1000;
  
  for (int i = 0; i < Size; i++)
  {
    Ticks[i] = NullTick;
    
    const double Price1 = NormalizeDouble(MathRand() / 1000.0, 3);
    const double Price2 = NormalizeDouble(MathRand() / 1000.0, 3);
    
    Ticks[i].bid = MathMin(Price1, Price2);
    Ticks[i].ask = MathMax(Price1, Price2);
    
    time += MathRand();
    
    Ticks[i].time_msc = time;
    Ticks[i].time = (datetime)(time / 1000);
  }
  
  return(Size);
}

void OnStart()
{  
  CUSTOMSYMBOL Symb(SymbName); // シンボルの作成

  if (Symb.IsCustom())
  {
    Symb.SetProperty(SYMBOL_TRADE_STOPS_LEVEL, 0);    

    // シンボルの通貨を口座の通貨にする
    Symb.SetProperty(SYMBOL_CURRENCY_PROFIT, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_MARGIN, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_BASE, AccountInfoString(ACCOUNT_CURRENCY));

    // 利益の計算
// Symb.SetProperty(SYMBOL_TRADE_TICK_VALUE, 1);
// Symb.SetProperty(SYMBOL_TRADE_TICK_SIZE, Symb.GetProperty(SYMBOL_POINT));
    
    MqlTick Ticks[];
    
    GetTicks(Ticks); // ティック履歴の形成
    
    if ((Symb.AddTicks(Ticks) > 0) && (Symb.DataToSymbol() > 0) && Symb.On()) // ティック履歴をシンボルに送る
      ChartOpen(Symb.Name, PERIOD_CURRENT); // チャートを開く
  }
}

このスクリプトでは、独自のGetTicksだけを書く必要があります。生成された履歴に基づき、テスターで取引可能なほぼ本格的な(カスタム)シンボルを作成する。


 
fxsaber:

カスタムシンボルを使用する別のシナリオ(必ずしもこのライブラリの助けを借りる必要はありません)。


新しいヒストリカルデータで Expert Advisorの定期的なバックテストを完全に自動化し、テスト結果を戦闘Expert Advisorに転送して、実際の画像とテスターを同期させることが可能です。これにより、独自のテスターを作成することなく、このような取引ロジックを実装することができます。


このスキームを使用するもう一つの可能性:

マーケットからExpert Advisorの無料デモバージョンを取得し、新鮮な相場によってテスターで追いかけ、コピー機はテスターの結果からデータを取得します。従って、有料版は必要ない。


カスタムシンボルでのMarket Expert Advisorのバックテストを禁止する必要があるのかもしれない。

// バックテストに現在の日を含める。
#property script_show_inputs

#include <Symbol.mqh> //https://www.mql5.com/ja/code/18855

input int Offset = -24 * 7; // オフセット(時間

#define  HOUR 3600

void OnStart()
{
  const SYMBOL Symb(_Symbol + "_Offset" + (string)Offset); // シンボルの作成

  if (Symb.IsExist()) // シンボルが作成された場合
  {
    Symb.CloneProperties(); // プロパティをコピー
    
    MqlRates Rates[];

    // バータイムをシフト
    for (int i = CopyRates(_Symbol, PERIOD_M1, 0, (int)SeriesInfoInteger(_Symbol, PERIOD_M1, SERIES_BARS_COUNT), Rates) - 1; i >= 0; i--)
      Rates[i].time += Offset * HOUR;
      
// Symb.CloneTicks(Ticks);

    // オフセット・バーを記録し、マーケット・ウォッチにシンボルを含める。
    if ((Symb.CloneRates(Rates) > 0) && Symb.On())
      ChartOpen(Symb.Name, PERIOD_CURRENT); // 新しいシンボル・チャートを開く
  }
}

MT5 Build 1880 - 今のところ動作しています。

 

Testerでスリッページを設定する2つの方法

  1. 実際のティックとティックの間に擬似ティック(スリッページの値で価格を劣化させたもの)を挿入する。奇数ティックは分析、偶数ティックは取引。
  2. 実シンボルによる分析、カスタムシンボルによる取引。カスタム-スリッページ値による実物の劣化。

 

素晴らしい図書館だが、引用する。

Andrey Khatimlianskii:

ありがとう!相変わらず、ちょっと複雑なんだけどね(笑)。

あなたのコードには否定できない利点がある。しかし、その中で何かを微調整するのはかなり難しい、それが欠点だ。

一行でカスタムシンボルの完全な準備が整ったコピーを作成できるのはとても便利ですが:

私はOHLCを修正したいのですが、あなたのコードを台無しにしたくありません))、事前に感謝します!

 
なぜカスタムシンボルが 必要なのでしょうか?DCで入手可能な本物のシンボルが取引されているのなら?
 
Viktar Dzemikhau:
なぜカスタムシンボルが必要なのか?DCで利用可能な実際のシンボルが取引されているのなら?

もしEAがこのシンボルで機能しないなら、他のシンボルが必要かもしれないし、カスタムチャートを使うかもしれない。

これには一定の根拠があります。

;)

 
Igor Makanu:

もしEAがこのシンボルで動かないなら、他のシンボルが必要かもしれないし、カスタムチャートを使うかもしれない。

これには一定の根拠があります。

;)

くだらない。シンボルに何の違いがある?シンボルが実在すればアクセスできる。私は独自のシンボル・クラスを持っている。そのクラスで 必要なのは、取引される商品の名前だけだ。別の商品を入力すれば、必要なデータはすべて得られる。このスレッドを見て、なぜカスタム・シンボルなのだろうと思った。取引できるのであれば、その名前はそうであり、取引できないのであれば...どうすれば取引できないのでしょうか?
 
Viktar Dzemikhau:
取引できるのであれば、その名前はそうであり、取引できないのであれば...なぜ取引できないのでしょうか?

Expert Advisorはストラテジーテスターで動作します。つまり、パターンを探すことができる。

クラスでデータを保存できるとお考えなら、ご自由にどうぞ。カスタムシンボルにデータを出力して、このチャートでインジケーターを使う方が簡単です。

これは私のシンセティックスのEURUSD - GBPUSDスプレッドです。

https://charts.mql5.com/18/849/spread-h1-alpari-international-limited.png

チャートを視覚的に見ることができ、バーの時間を分析することができ、さらにすべてのTFがあり、ストラテジーテスターでストラテジーを実行することができ、実際のシンボルに戻ることも問題ないので、非常に便利です。

 
Igor Makanu:

ストラテジーテスターでは、Expert Advisorが機能します。つまり、パターンを探すことができます。

データはクラスで保存できるとお考えなら、どうぞご自由にお使いください。

もちろんそうする。結局のところ、5ではいつでもさまざまなツールにアクセスできる。ツールごとにクラスを書くのは冗長だ。シェイプがあるようなもので、基本的なシェイプ・クラスは使わず、常に新しいものを書く。もちろん、私は批判しているわけではない。そして彼はよく分かっている。しかし、それは不必要だと思う。


イゴール・マカヌ

エキスパートアドバイザーはストラテジーテスターで動作します。つまり、パターンを探すことができる

データをクラスに保存できるとお考えなら、どうぞご自由に。私にとっては、データをカスタム・シンボルに出力して、このチャート上でインジケータを使う方が簡単です。

これは私のシンセティックによるEURUSD - GBPUSDのスプレッドのスケッチです。

https://charts.mql5.com/18/849/spread-h1-alpari-international-limited.png

チャートを視覚的に見ることができ、バーの時間を分析することができ、さらにすべてのTFがあり、ストラテジーテスターでストラテジーを実行することができ、実際のシンボルに戻ることも問題ないので、非常に便利です。

それが何をもたらすか知っていたら、このアイデアを支持したかもしれない。しかし、現状では...)))

 
Igor Makanu:

OHLCを修正したいのですが、あなたのコードを台無しにしたくありません))、よろしくお願いします!

上記は短いコードです。そこに詳細なコメントがあります。