記事"トレーディングモデルに基づくマルチエキスパートアドバイザーの作成"についてのディスカッション - ページ 3

 
Serj_Che:

記事の名前を変えるべきだと思う。複雑にできるのに、なぜシンプルにするのか。

良い点だ。


少なくとも、著者が読者に伝えたかったことの本質は理解できた(と思う)。

ということだ。誰もが書かれていることの本質を理解している。 これを読んだ人の誰が、添付されているコードを、ある開発段階の即座の実装として受け取るだろうか?事実上、著者以外には誰もいない。この記事は入門的なものであり、コードではなくアイデアだけを取り上げることができる。そして、そのために多くの文字を作る必要はなかった。

ローダーを名乗るのであれば、体を張ればいい。人に教えたり、自分の経験を分かち合ったりするのであれば、一語一語、提示する情報の構造をよく考えて書くべきだ。思考が歩いていて、広大さを受け入れ、世界のすべてについて書きたいのであれば、記事を書く 根本的な計画を取ることは何もない。 そして、これはバージョン1.0ベータ版だという言葉はふさわしくない。有能なコーダーの評判を落とすことになる。

フォーラムの管理者には、公開された資料に対してもっと気を配り、著者の作品(記事だけでなくコードも)に対してもっと厳しい管理をしてほしい。また、掲載数を水増しするためだけに、すべてを一挙に取り上げるべきではありません。MQL4のコードベースのようにならないように。アナログのない本当に価値のある作品は、何百もの1.0ベータ版の陰に隠れて失われてしまう。

 

Руководству форума желаю...

1.どう書けとか、何を書けとか言うな。

2.メタクォーツ・ソフトウェア社に、どのようなマーケティング方針をとるべきか、また、どのように著者を評価し、選定すべきかを指図しないでください。

これらの点は、願望としてではなく、警告として考えてください。もしあなたが、私の記事専用のフォーラムスレッドで否定的な意見を撒き散らし、MetaQuotes社に何をすべきか、どのようにすべきかを指示し続けるのであれば、それは私の仕事を否定し、MetaQuotes社のチームのプロフェッショナリズムに疑問を投げかけようとしていると見なします。この場合、私はこのセクションのモデレーターに相応の苦情を申し立てますし、私とあなたの対立が私に有利に解決されると信じる重大な理由があります。

公式な関係明確化には持ち込まず、友好的な合意に至りましょう:あなたは私の記事専用スレッドに、ここで検討されているトピックとは全く関係のない情報を書き込むのをやめ、私の行った仕事を否定するのをやめるのです。いっそのこと、ここに何も書き込まない方がいい。私はあなたの見解を理解している。私はそれに同意しないし、あなたは私の意見に同意しない。私たちはともに知的な人間だと思うので、この無駄な極論はやめましょう。

 
udmurt2:

フォーラムの運営には、発表された資料にもっと気を配り、著者の作品(記事だけでなくコードも)をより厳しく管理してほしい。また、出版物の数を埋めるためだけに、すべてを一度に取り上げるべきではありません。MQL4のコードベースのようにならないように。アナログのない本当に価値のある作品は、何百もの1.0ベータ版の陰に隠れて失われてしまう。

+1

記事 セクションは消費 者にとって有益であるべき だと思います!Nadelektsyaは、それらを怖がらせ、混乱させることはありません!

そして今 - "Chukchaは作家であり、Chukchaは読者ではありません" ....

 

>>> 想像してみてください。 たった一つのExpert Advisorで、数十種類の取引戦略を、利用可能なすべての金融商品と可能なすべてのタイムフレームで一度に取引することを! さらに、このExpert Advisorはテスターで完璧にテストされ、1つまたは複数の資金管理 システムがこのExpert Advisorに含まれるすべての戦略で利用可能です。

これがまさに、チャンピオンシップでの私のExpert Advisorトレードの編成方法です。すべてがシンプルになりました。主なことは、すべてを正しく設計し、一つの山に混ぜないことだ。

//+------------------------------------------------------------------+
//|活力レベルmq5||の
//| Copyright 2010, MetaQuotes Software Corp.
//|http://mql5.commql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#include <Vigor\Strategy.mqh>

#include <Vigor\TradeSignal.mqh>
#include <Vigor\ADXMAStrategy.mqh>
#include <Vigor\ADXStrategy.mqh>
#include <Vigor\MAVSimpleStrategy.mqh>
#include <Vigor\Order.mqh>
#include <Vigor\Dispatcher.mqh>
#include <Vigor\AdaptiveStrategy.mqh>
CDispatcher dispatcher;

//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   int myTick = 60;
   EventSetTimer(myTick);
   dispatcher.tickSeconds = myTick;

  //-- ディスパッチャーオブジェクトは注文を扱い、ストラテジーオブジェクトは
// シグナルのみを扱い、マーケットを扱わない。

  //-- CStrategyクラスの継承者。
 //--戦略
   CMAVStrategy *s4 = new CMAVStrategy();
   s4.Symbol = "EURGBP";
   s4.onBars = true;
   s4.TimeFrame = PERIOD_M5;
   s4.HourStart = 7;
   s4.HourEnd = 18;
   s4.Risk = 0.1;
   s4.takeProfit = 2000;
   s4.stopLoss = 450;
   s4.trailingStop = 77;
   s4.lots = 0.1;
   s4.maxLots = 5;
  //--カスタム;
   s4.period1 = 2;
   s4.max = 0.0025;
   s4.sensity = 0.39;
   s4.unsensity = 0.53;
   s4.init();
   dispatcher.strategies.Add(s4);



  //--戦略
   CADXStrategy *s2 = new CADXStrategy();
   s2.Symbol = "GBPUSD";
   s2.onBars = true;
   s2.TimeFrame = PERIOD_M5;
   //s2.mHourStart = 0;
   //mHourEnd = 24;
   s2.Risk = 0.13;
   s2.takeProfit = 2000;
   s2.stopLoss = 360;
   s2.trailingStop = 150;
   s2.lots = 0.1;
   s2.maxLots = 5;
  //--カスタム
   s2.period = 17;
   s2.level = 0.0042;
   s2.init();
   dispatcher.strategies.Add(s2);

  //--など。


  //-- 適応戦略は、それ自身の中に仮想的な
//連結リストのトレード(再びCStrategyの相続人)を含む。
//また、CStrategyの相続人であり、dispetcher'aに違いはない。
   CAdaptiveStrategy *sadapt4 = new CAdaptiveStrategy();
   sadapt4.onBars = false;
   sadapt4.mRisk = 0.13;
   sadapt4.lots = 0.1;
   sadapt4.performance_variant = 2;
   sadapt4.maxLots = 5;
   sadapt4.init();
        
        // ***************************************** M30
        CADXStrategy *s_gbpjpy1 = new CADXStrategy();    s_gbpjpy1.Symbol = "GBPJPY";    s_gbpjpy1.onBars = true;    s_gbpjpy1.TimeFrame = PERIOD_M30;  s_gbpjpy1.takeProfit = 2000; s_gbpjpy1.trailingStop = 70; s_gbpjpy1.lots = 0.1; s_gbpjpy1.maxLots = 5; 
        s_gbpjpy1.stopLoss = 300;  s_gbpjpy1.init();
        sadapt4.strategies.Add(s_gbpjpy1); // すべてを適応戦略に入れる
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
        //  и т.д.
        // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
        


  dispatcher.strategies.Add(sadapt4);


 // 好きなもので埋める

  return(0);
  }
//+------------------------------------------------------------------+
|エキスパート初期化関数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| エキスパート・ティック機能|
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   dispatcher.control();
  }
//+------------------------------------------------------------------+
 

あなたが挙げた例は、実は私の例とよく似ている。見かけより違いは少ない。すべてがクラスを通して実装され、各クラス-ストラテジーはそれぞれ独立したパラメーターを持っている。最大の違いはそのレイアウトで、あなたのケースではすべてのストラテジーはディスパッチャーによって処理され、私のケースではそれらはCObject 型のリストで処理される。実際、私のやり方はあなたのやり方よりずっと複雑というわけではなく、同じことを違う言葉で話しているだけなのです。

当初、私は、マルチタイムフレーム、マルチストラテジー、マルチツールという3つの "マルチ "のあらゆる組み合わせを解決することを意図していた。今は、それ以上のものだと考えている。第2部では、エキスパートの決断の問題を取り上げようと考えている。エキスパート・アドバイザーは、どのようにトレードするか、何をトレードするか、いつトレードするかを決定する。これによって、私のアプローチが可能になります。おそらく、あなたのアプローチもそうでしょう。

ところで、ディスパッチャ自体の実装を見てもらえますか?

 
class CDispatcher {
   public:
      CTrade trade;
      CList strategies; 
      CList newOrders; 
      CList currentOrders;
      CList* strategiesResults;
      int repeats;
      int tickSeconds;
   private:
      ulong Magic;            
   public:
      void CDispatcher() {
          strategiesResults = new CList();
          repeats = 5;
          tickSeconds = 1;
      }
      void ~CDispatcher() {
        delete(strategiesResults);
      }
      
      void control();

      bool controlLimits();
      void controlOrders();
      bool controlOpen();
      bool controlClose();
      bool controlModify();      
      ulong ticketOpen(string smb, ENUM_ORDER_TYPE type,double lot,int SL,int TP);
      double countLotByRisk(CSymbolInfo *symbinfo, CStrategy *s, int dist, double risk, double lot, double maxlot);
       double NormalPrice(CSymbolInfo *symbinfo, double d);
      double NormalLot(CSymbolInfo *symbinfo, double lot);
      double BasePrice(CSymbolInfo *symbinfo, int dir);
      double ReversePrice(CSymbolInfo *symbinfo, int dir);
      double ReversType(ENUM_ORDER_TYPE type);
      double NormalTP(CSymbolInfo *symbinfo, int dir,double op,double pr,int TP,double stop);
      double NormalSL(CSymbolInfo *symbinfo, int dir,double op,double pr,int SL,double stop);
      void   checkDeals(CStrategy *s);
       ENUM_ORDER_TYPE getTypeByDirection(int dir);
       int getDirectionByType(ENUM_ORDER_TYPE type);
};
実装は掲載しない。ここですべてが明らかになる。ストラテジーはすべてCObjectの子孫だ。しかし、それらはディスパッチャーによって処理される。シンプルなものから複雑なものへ移行する必要がある。外部のオブザーバーにとって、オブジェクトのシンプルなインターフェースは、実装の詳細をすべて隠すものでなければならない。私が言いたいのは、マルチには特別なものはまったくないということだ。OOPとポリモーフィズムを 持つことで、すべてがシンプルになる。
 
Vigor:
実装は掲載しない。ここですべてが明らかになる。ストラテジーはすべてCObjectの子孫だ。しかし、それらはディスパッチャーによって処理される。シンプルなものから複雑なものへ移行する必要がある。外部のオブザーバーにとって、オブジェクトのシンプルなインターフェースは、実装の詳細をすべて隠すものでなければならない。私が言いたいのは、マルチには特別なものはまったくないということだ。OOPとポリモーフィズムを 使えば、すべてシンプルにできる。
+1.まったく同感だ。そして一般的に言いたいのは、私のアプローチもあなたのアプローチと同じような2つの水滴のようなものだということだ。ストラテジーはすべてベースとなるストラテジーCModelの子孫であり、CModelはCObjectの子孫である。あなたのように、すべてが動的に初期化され、リストに入れられる。あなたと同じように、シンプルなオブジェクト・インターフェースを実装し、実装の詳細をすべて隠しています。もうひとつは、記事の中で実装のすべてを説明しなければならなかったことだ。しかし、私のようなタイプのオブジェクトを使うには、それが内部でどのように動いているのか知る必要さえない。
 

ヴァシリー、記事をどうもありがとう!あっという間に読んでしまいました!とてもすんなり頭に入ってきました。私がこの種の教材に適しているのでしょう。多くのトレーダーがそうであるように、私も記事で取り上げられている問題のいくつかに頭を悩ませました。解決したものもあれば、解決しなかったものもある。そしていくつかは漠然としたアイデアの形でしかなかった。そして、すべてがこのように体系的に提示されているのを見るのは、とても楽しく、予想外のことだった。

解決された問題、そしてさらに展望のスケールは非常に大きい。すべての "マインド "が、それらを解決できるほど成熟しているわけではない。クリロフの寓話『キツネとブドウ』のように、「目は目を見るが、歯は歯を知らない」と言われる所以である。そして、自己主張への欲求は不屈のものである。だから、彼らはコメントし、他の人がこう思うことを望むのだ:"ああ、モス! 彼女は象に吠えるほど強いんだ!"と。:)注意する価値もない。

これからも創作活動を続けてください!

P.S.まだMetaTrader 5を実際に使うことはできませんが、「MetaTrader 5からMetaTrader 4へ取引をコピーする」という記事を使うことができます。これは非常に賢明で実績のあるものです!ですから、すべてが非常に適切であり、今日の取引で使用することができます!

 

......
For what, without fear of sin,
does the Cuckoo praise the Rooster?

 

不当にレッテルを貼られるより、当然の賞賛を受ける方がいい。