記事"ユニバーサルEA:イベントモデルと取引ストラテジープロトタイプ(パート2)"についてのディスカッション - ページ 4

 
Andrey Khatimlianskii:
少なくとも、価格を分析してください。もしかしたら、エントリーする必要はないかもしれない。
はい、そのようなメカニズムがあります。取引注文の クラスでなければ、どこに組み込むべきか?また、そのようなメカニズムをどのように公式化するか、どのような急激な動きを重要視するか。
 
Гога:
そのような仕組みはある。貿易注文の クラスでなければ、どこに組み込まれるべきなのか?また、そのようなメカニズムをどのように公式化すればよいのか、どのような鋭い動きを重要視すればよいのか。

それが問題だ!それが、エンジンに組み込まれていない理由だ。

あるストラテジーでは20ピプスのスリップは問題ではなく、とにかくエントリーすべきですが、別のストラテジーでは2ピプスのスリップがすべての統計を破り、さらに悪いエントリーをしてはいけません。

普遍的な取引エンジンは、この2つの戦略に対して何をすべきでしょうか?そうですね、リクオート価格を返し、取引ロジックに判断を任せます。

あるいは、カスタマイズを追加する。より正確には、人生のすべてのケースのための設定 )

 
とても良い記事だ。とても勉強になった。ありがとう。
 
Alain Verleyen:

ビルド1241では、コードはうまくコンパイルされているので、バックテストを実行してみた。トレードができない。

少し調べてみたところ、充填モードが原因であることがわかりました。私が使用しているブローカー/シンボルで許可されているモードは ORDER_FILLING_IOC です。TradeCustomクラスは充填モードをデフォルトでORDER_FILLING_FOKに 設定しています。そして、Agent.mq5 EAがトレードを行うために、このフィリングモードを変更するにはどうすればよいのでしょうか?検索することはできますが、時間がかかります。

それがこのようなツールの問題点です。MetaquotesのMQL5ウィザードEAと非常によく似ていて、クラスのすべての詳細を知らない人にはほとんど使えません。いったん作者が提供していない問題に直面すると、それを修正したり、修正・追加したりするのは本当に面倒になる。私は、あなたの解決策とMetaquotes(ウィザード)の解決策の間に本当の違いはないと思います。

ともあれ、大仕事おめでとう。素晴らしいプログラミングだ。

MetaEditor5のincludeフォルダにいくつかのクラスがあります。Expertフォルダのクラスはとても複雑に見えるので、どなたか詳しく説明していただけると助かります。EAの標準的な書き方は、形式的な基本クラスに基づいていて、常に車輪を再作成するわけではありません。とにかく、この記事はホイールを再作成しないために大いに役立つ。
 
Amy Liu:
MetaEditor5のincludeフォルダにはいくつかのクラスがあります。Expertフォルダのクラスはとても複雑に見えるので、もし誰かが深く説明してくれるなら、とても助かる。EAの標準的なクラスは、形式的な基本クラスに基づいて記述するのが一般的で、常に車輪を作り直す必要はありません。とにかく、この記事は車輪を作り直さないために大いに役立つ。
私もそう思う。問題はフレームワークにバグがある場合だ。フレームワークを使う前に、そのフレームワークを深く学ぶか、作者によってしっかりとサポートされていることを確認するべきだ。
 
Alain Verleyen:
私もそう思う。問題はフレームワークにバグがある場合だ。フレームワークを使う前に、そのフレームワークを深く学ぶか、作者によってしっかりとサポートされていることを確認する必要がある。
これが、私がMetaEditor5のクラスを学びたい理由だ。)
 
Amy Liu:
だからMetaEditor5のクラスを学びたいんだ。)
そして、バグだらけでサポートされていない :-D
 
ありがとう。
 

ヴァシリーさん、

とても素晴らしいコードですね。

mt5のニュースビルド(1952)では、コンパイラに "メッセージ "が表示されました、


bool CBarDetector::IsNewBar(void)

  {

   datetime time[];

   if(CopyTime(m_symbol, m_timeframe, 0, 1, time) < 1)return false;

   if(time[0] == m_last_time)return false;

   return (m_last_time = time[0]);    //<=============ここから

  }

//+------------------------------------------------------------------+

///////////////////////////////////////////////////////////////////////////////
expression not boolean NewBarDetector.mqh 87 24


これは正しいのでしょうか?

//+------------------------------------------------------------------+
//| 指定されたシンボルとタイムフレームに|が存在する場合、trueを返す。
//| 新しいバー。|
//+------------------------------------------------------------------+
bool CBarDetector::IsNewBar(void)
  {
   datetime time[];
   if(CopyTime(m_symbol, m_timeframe, 0, 1, time) < 1)return (false);
   if(time[0] == m_last_time)return (false);
   return (m_last_time == time[0]);
  }
//+------------------------------------------------------------------+



 

こんにちは、バシリイ、

あなたが記事を書いた後、こんなところまで質問することをお許しください。私は今、フレームワークの代替案を探すために記事をきちんと読んでいるところです。私の誤解の可能性が高いのですが、奇妙に感じたことがあります。

New TickとNew Barのイベントハンドラについて。追加されたティックのリストをループし、イベント構造を構築し、それをInitとSupportイベントハンドラに渡します:

//+------------------------------------------------------------------+
//| 複数楽器の新しいティックの到着を検出する。
//+------------------------------------------------------------------+
void CStrategy::NewTickDetect(void)
  {
   if(m_ticks_detectors.Total()==0)
      AddTickEvent(ExpertSymbol());
   for(int i=0; i<m_ticks_detectors.Total(); i++)
     {
      CTickDetector *tick=m_ticks_detectors.At(i);
      if(tick.IsNewTick())
        {
         m_event.period=PERIOD_CURRENT;
         m_event.type=MARKET_EVENT_TICK;
         m_event.symbol=tick.Symbol();
         CallSupport(m_event);
         CallInit(m_event);
        }
     }
  }

例えば、以下の移動平均クリップのように;

bool CMovingAverage::IsTrackEvents(const MarketEvent &event)
  {
//--- 作業中のシンボルとタイムフレーム上の新しいバーのオープンのみを処理する。
   if(event.type != MARKET_EVENT_BAR_OPEN)return false;
   if(event.period != Timeframe())return false;
   if(event.symbol != ExpertSymbol())return false;
   return true;
  }

このIsTrackEvents関数は、上記のNewTickDetect関数の目的を無効にするようです!つまり、上記の移動平均の例では、NewTickDetectのように複数のシンボルをチェックする機能に基づいて、複数の金融商品で取引できるはずですが、IsTrackEventsは、ストラテジーの時間枠とシンボル(ここではシンボルがキー)に対してのみ取引を許可します。これは、ストラテジーがそのシンボルに対してのみ取引ができるため、NewTickDetectループは実際には必要ないということではないのでしょうか?事実上、NewTickDetectは、受信したティックがストラテジーのシンボルであるかどうかだけをチェックする必要があります。これは実質的に、興味のあるシンボルごとにストラテジー・オブジェクトを持ち、それをCStragyListがループするのと同じようなものでしょうか?

私の言っていることが理解できることを願っています。

私はあなたの仕事が大好きです。あなたの記事から多くを学びました。

よろしくお願いします、

シェップ