無料でロボットをダウンロードする方法を見る
Telegram上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
エキスパート

Code Block for "Trailing Stop" based on current market price. (Ask / Bid) - MetaTrader 5のためのエキスパート

ビュー:
106
評価:
(5)
パブリッシュ済み:
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

このコードブロックは、ストップロスまたはストップロスを使用しない場合に機能します。


必要条件

  • ポジションと注文を操作できる CTrade クラスにアクセスするには、 "Trade.mqh " をインクルードする必要があります。

#include <Trade\Trade.mqh> // <<------------------------------------------ CTradeクラスにアクセスするには、この "Trade.mqh "をインクルードする。 

  • トレーリング距離を調整するための入力パラメーターを 設定する必要があります。これは必須ではありませんが、便利な機能です。
input double Traling_Step = 3.0;
  • CTrade クラスのインスタンスを定義する必要があります。OnInt イベント・ハンドラの後に定義するのがよいでしょう。

  • 次に、現在実行中のポジションがあるかどうかをチェックするif 文を作成する必要があります。このステートメントは、ティック ごとにCheck_TrailingStop(); 関数を呼び出します。これは、EAがシャープかつスムーズに トレールするために重要です。このステートメントを OnTickイベントハンドラの一番 上に置くと正しく動作します。
//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit()
  {
//--- タイマーを作成する
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }


CTrade trade; <<------------------------------------------ "CTrade "カルスの宣言。"trade "は好きな名前に置き換えることができる。
void OnTick()
  {
   
   if(PositionsTotal() > 0) // ポジションが実行中であれば、毎ティック、トレーリング・ストップ関数を呼び出す。 
     {
      Check_TralingStop(); 
     } 
     
       
  }

  • 残りの処理を行うには、Check_TrailingStop();( この場合)というカスタム関数を宣言する必要があります 。好きな名前を使うことができる。
  • このカスタム関数は、オープンしたすべてのポジションを ループし、必要な距離だけトレールします。
void Check_TralingStop()
  {
   int totalPositions = PositionsTotal();
   for(int count =0; count < totalPositions; count++)
     {
      ulong TicketNo = PositionGetTicket(count); // ポジションの「インデックス」を使ってポジションチケット番号を取得する。

      if(PositionSelectByTicket(TicketNo)) // チケット番号を使ってポジションを選択する。
        {
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // ポジションの確認 タイプ
           {
            double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
            double stopLoss  = PositionGetDouble(POSITION_SL);       // <<-------------------Get ポジション 現在のストップロス
            double takeProfit = PositionGetDouble(POSITION_TP);
            double bidPrice  = SymbolInfoDouble(_Symbol,SYMBOL_BID);
            ulong ticket = PositionGetTicket(count);
            double trailingLevel = NormalizeDouble(bidPrice - (Traling_Step * Point()),_Digits);

            if(stopLoss < openPrice) // ストップ・ロスなしが真。
              {
               if(bidPrice > openPrice && trailingLevel > openPrice) // ポジションごとに一度だけ実行される。最初のSLを設定します。

                  trade.PositionModify(ticket,trailingLevel,takeProfit); // "CTrade.trade "を使用してトレーリング・ストップを変更する。
              }


            if(bidPrice > openPrice && trailingLevel > stopLoss) // 後続のレベルが前のレベルより上かどうかをチェックする。
              {
               trade.PositionModify(ticket,trailingLevel,takeProfit); // "CTrade.trade "を使用してトレーリング・ストップを変更する。
              }

           }
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
           {
            double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
            double stopLoss  = PositionGetDouble(POSITION_SL);
            double takeProfit = PositionGetDouble(POSITION_TP);
            double bidPrice  = SymbolInfoDouble(_Symbol,SYMBOL_BID);
            double askPrice  = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
            ulong ticket = PositionGetTicket(count);
            double trailingLevel = NormalizeDouble(askPrice + (Traling_Step * Point()),_Digits);

            if(stopLoss < openPrice) // ストップ・ロスなしが真。
              {
               if(askPrice < openPrice && trailingLevel < openPrice) // ポジションごとに一度だけ実行される。最初のSLを設定します。

                  trade.PositionModify(ticket,trailingLevel,takeProfit); // "CTrade.trade "を使用してトレーリング・ストップを変更する。
              }

            if(askPrice < openPrice && trailingLevel < stopLoss) // 後続のレベルが前のレベルより上かどうかをチェックする。
              {
               trade.PositionModify(ticket,trailingLevel,takeProfit); // "CTrade.trade "を使用してトレーリング・ストップを変更する。
              }
           }

        }
     }
  }










    MetaQuotes Ltdによって英語から翻訳されました。
    元のコード: https://www.mql5.com/en/code/49021

    ConvertServerTime ConvertServerTime

    サーバーの時間をブローカーのタイムゾーンから別のタイムゾーンに変換する関数。

    Bollinger Bands Squeeze Bollinger Bands Squeeze

    市場のボラティリティが低い時期が終わろうとしていることを示し、価格が大きく動くことを予感させる。

    Simple Code for Detect  A  "New Bar or New Candle " Received Simple Code for Detect A "New Bar or New Candle " Received

    このコード・ブロックは、ニュー・バーまたはニュー・キャンドルを受信したときに検出する。

    Logarithmic Moving Average Logarithmic Moving Average

    対数移動平均は、期間内の最高値と最安値の対数平均を連続的に計算します。