記事「パラボリックSARを使ってトレーリングストップを追加する方法」についてのディスカッション

 

新しい記事「パラボリックSARを使ってトレーリングストップを追加する方法」はパブリッシュされました:

取引戦略を作成する際には、さまざまな保護ストップのオプションをテストする必要があります。その中で、価格に追随してストップロスレベルをダイナミックに引き上げる方法が考えられます。その最有力候補として、パラボリックSAR指標が挙げられます。これ以上シンプルで視覚的にわかりやすい指標はないでしょう。

トレーリングストップは、価格の動きに合わせてストップロスを自動的に追従させ、常に価格から一定の距離を保つ仕組みです。これにより、トレーダーはポジションを早期にクローズすることなく、得た利益の一部を確保できます。市場価格がポジション開始価格から離れるたびに、トレーリングストップはストップロスを現行価格に近づけ、指定された距離を維持します。一方で、価格が逆行して始値に近づいた場合、ストップロスはその位置に留まり、起こりうる市場変動による損失を最小限に抑える役割を果たします。

高度なトレーリングストップが必要な場合、MQL5を使って独自の関数を開発し、標準の機能を拡張することが可能です。

たとえば、ストップロスレベルを設定するためには、価格を受け取るプログラム関数があります。この関数は、StopLevelレベル(ストップを置ける最低限の距離)やFreezeLevelレベル(ポジションや保留中の注文を変更できない凍結距離)など、いくつかの禁止要因をチェックします。言い換えると、価格がFreezeLevelに近づいた場合、ストップ注文はトリガーされる見込みがあるため、変更が禁止されます。また、トレーリングストップにはいくつかの個別パラメータ設定があり、ストップロスレベルを指定価格に移動する前に、ポジションの銘柄やマジックナンバーなどの条件も確認されます。 これらの基準は、ストップロスポジションを指定されたレベルに移動させる直前にすべてチェックされます。 

パラボリックSAR指標は、ストップロスが必要とするレベルの「ポインタ」として完璧に機能します。

作者: Artyom Trishkin

 
興味深い記事をありがとう。ざっと読んだだけだ。基本的なことはわかった。携帯電話から。自宅のパソコンでもっと詳しく調べて、自分のプロジェクトに 含まれるファイルを類推して使ってみるよ。
 
Roman Shiredchenko プロジェクトに 含まれるファイルを類推して使ってみるよ。

どういたしまして。このトピックの論理的な結論として、トレーリング・クラスに関する記事が近々掲載される予定です。

このトピックの論理的な結論として。彼らはより正しく、より便利に使われるだろう。

 

記事をありがとう、

しかし、fp番号の切り捨てエラーを避けるために、これを修正してほしい:

        pos_profit_pt= int ((tick.bid - pos_open) / Point ());              // ポジションの利益をポイントで計算する 

へ:

        pos_profit_pt= (int) MathRound((tick.bid - pos_open) / Point ());              // ポジションの利益をポイントで計算する 
 
記事は徹底しているが、比較的小さなトピックにしては量が多すぎる。誰もが対応できるものではないだろう。
 
しかし、すべてが最初から最後まで説明されている...。例えばMAのような、トロール用の他の指標を接続することも可能です。
 
Artyom Trishkin #:

どういたしまして。このトピックの論理的な結論として、トレーリングクラスに関する記事が近々発表される予定だ。

それは、言うなれば、より正しく、より便利に使われるようになるだろう。

ありがとうございます。例を私のロボットに持って行きました:

//--- 新しいバーがない場合 - ハンドラを残す
   if(!IsNewBar())
      return;
и 
//--- 取引クラスオブジェクトにマジックナンバーを設定する。
   ExtTrade.SetExpertMagicNumber(InpMagic);

 

私自身、そのようなテーマを検討しているのですが......。

//+------------------------------------------------------------------+
//| オープンポジションの管理:トレーリングストップ
//+------------------------------------------------------------------+
void ManageOpenPositions(string Sym, int mn)
  {
   if(TrailingStop > 0)
    for(int i = 0; i < PositionsTotal(); i++)
     {
      if(PositionGetSymbol(i)==Sym) // 位置が現在のシンボル上にあるかどうかを選択し、チェックする。
      if(PositionGetString(POSITION_SYMBOL) == Sym)
      if(PositionGetInteger(POSITION_MAGIC)==mn || mn == -1)
        {
         ulong  ticket = (ulong)PositionGetInteger(POSITION_TICKET);      // ポジションチケットの取得
...

あなたの提案したバリアントも仕事の中で見てみるつもりだ:

//+------------------------------------------------------------------+
//| ストップ・ロス価格によるストップ・ロス・トレーリング機能。
//+------------------------------------------------------------------+
void TrailingStopByValue(const double value_sl, const long magic=-1, const int trailing_step_pt=0, const int trailing_start_pt=0)
  {
//--- 価格構成
   MqlTick tick={};
//--- オープンポジションの総数で計算する。
   int total=PositionsTotal();
   for(int i=total-1; i>=0; i--)
     {
      //--- 次のポジションのチケットを取得する
      ulong  pos_ticket=PositionGetTicket(i);
      if(pos_ticket==0)
         continue;
         
      //--- シンボルと位置のマジックを得る
      string pos_symbol = PositionGetString(POSITION_SYMBOL);
      long   pos_magic  = PositionGetInteger(POSITION_MAGIC);
      
      //--- シンボルとマジックのフィルターにマッチしないポジションはスキップする。
      if((magic!=-1 && pos_magic!=magic) || pos_symbol!=Symbol())
         continue;
         
      //--- 価格が得られなかった場合は、さらに進む。
      if(!SymbolInfoTick(Symbol(), tick))
         continue;
...
 

どなたかこのようなEAについて詳しく説明するか、またはコード(またはファイル)を投稿していただけませんか?






手動でオープンしたすべてのポジションで常にSLを動かしています。