記事「多通貨エキスパートアドバイザーの開発(第1回):複数取引戦略の連携」についてのディスカッション - ページ 3

 
Yuriy Bykov #:

ここ数年の間に書いたコードをほぼゼロから再設計しているところだ。

リファクタリングをするときは、後でやり直す必要がなく、便利で見通しの良い方法で行いたいと常に思っている。

Child( const string sInputs ) : Parent(sInputs)
{
  this.SetInputs(sInputs);
}

virtual int SetInputs( const string sInputs )
{
  return(this.Inputs.FromString(sInputs) + this.Parent::SetInputs(sInputs));
} 

その結果、インプットを使うという解決策にたどり着いた。

 
fxsaber #:

リファクタリングをするときは、後でやり直す必要がなく、便利で見通しの良いものにしたいと常に考えている。

CStrategyを3つのエンティティに分けると、アーキテクチャ的に有望に思える:トレーディング・コア(シグナルを与える)、トレーディング・パート(シグナルを取引する)、そしてMM。

class CSimpleVolumeStrategy : public CStrategy {
private:
   //--- オープニング・シグナルのパラメータ
   int               signalPeriod_;       // ボリューム平均のローソク足の本数
   double            signalDeviation_;    // 1順目オープン時の平均からの相対偏差
   double            signaAddlDeviation_; // 2回目以降の注文を開始する際の平均からの相対的乖離

   //--- 保留注文のパラメータ
   int               openDistance_;       // 価格から未決注文までの距離
   double            stopLevel_;          // ストップロス(ポイント)
   double            takeLevel_;          // テイクプロフィット(単位:pips)
   int               ordersExpiration_;   // 保留注文の有効期限(分)

   //--- 資本管理パラメーター
   int               maxCountOfOrders_;   // 同時にオープンされた注文の最大数

ここではそのすべてを一緒にしている。しかし、同じコア(新しいCore1の代わりに新しいCore2)を他の入力で変更できると便利です。同時に、入力は文字列という同じ構文で定義されているため、入力に手を加えることなく置き換えを行うことができる。


コントロールやMMも同様である。一般的に、私は普遍的なアーキテクチャについてもう一度考えてみることを提案する。

 
fxsaber #:
CStrategyが3つのエンティティに分割されている場合、アーキテクチャ的には有望に思える:トレーディング・コア(シグナルを与える)、トレーディング・パート(シグナルをトレードする)、MM...。

このアプローチはすでにSB -CExpert クラスで実装されているようだ。

また、 Vasily Sokolov氏によるCStrategy クラスも あります))

Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert
Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert
  • www.mql5.com
CExpert - Базовые классы экспертов - Модули стратегий - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

標準的なCExpert クラスも見たけど、僕には合わなかった。必要ないものが多すぎた。資金とリスク管理アルゴリズムを実装するための基本クラスと、売買シグナルのジェネレーターを作成するための基本クラスが同じ基本クラスから継承されているのですから。

Vasily Sokolov氏の一連の記事を見たことがありません。リンクをありがとうございます。

 
Denis Kirichenko #:

というわけで、すでにSBではこのようなアプローチが実装されているようだ。

ストラテジー・ウィザードへの統合という課題は、そこで解決されたようだ。つまり、最初のアプローチはまったく異なる。確かに重なる部分もあるが、それはむしろ偶然である。

 
Denis Kirichenko #:

さらに、ヴァシリー・ソコロフによるCStrategy クラスもある ))

アーキテクチャーの骨格は、極めて簡潔で使いやすいものであるべきだと思う。だからTSの基本クラスはこうなっている。

次に、少し腱を肥やす。とても簡単なはずです。

残念ながら、Vasilyは異なるアプローチを持っています。

 
fxsaber #:

アーキテクチャーの骨格は極めて簡潔で使いやすいものであるべきだと思う。だからTCの基本クラスはこうなっている。

次に、腱に少し肉付けする。非常にシンプルであるべきだ。

似たような、(インターフェイス的には)シンプルだが(実装的には)拡張されたものが、この本に載って いる。

interface TradingSignal
{
   virtual int signal(void);
};

interface TradingStrategy
{
   virtual bool trade(void);
};

...
...
AutoPtr<TradingStrategy> strategy;
   
int OnInit()
{
   strategy = new SimpleStrategy(
      new BandOsMaSignal(...параметры...), Magic, StopLoss, Lots);
   return INIT_SUCCEEDED;
}
   
void OnTick()
{
   if(strategy[] != NULL)
   {
      strategy[].trade();
   }
}
...
Учебник по MQL5: Автоматизация торговли / Тестирование и оптимизация экспертов / Большой пример эксперта
Учебник по MQL5: Автоматизация торговли / Тестирование и оптимизация экспертов / Большой пример эксперта
  • www.mql5.com
Автоматизация торговли - Программирование на MQL5 для трейдеров - Учебник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Stanislav Korotky #:

同じように(インターフェイス的には)シンプルだが、(実装的には)拡張されたものがこの本には ある。

ソースコードはどこでダウンロードできますか?

 
fxsaber #:

ソースコードはどこでダウンロードできますか?

https://www.mql5.com/ja/code/45595

Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
  • www.mql5.com
В шестой части книги "Программирование на MQL5 для трейдеров" мы изучим ключевую составляющую языка MQL5 — автоматизацию торговли. Начнем с описания основных сущностей, таких как спецификации финансовых инструментов и настройки торгового счета, которые необходимы для создания корректных советников.
 
とても興味深い戦略だ