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

Price Action Dynamic Exit Strategy - Profit Shield pro - MetaTrader 5のためのスクリプト

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

メタエディタビュー

#property copyright "Samson Mwita 2025"
#property link      "Samson Mwita 2025"
#property version   "1.00"
#property description "Advanced price action-based dynamic exit strategy"
#property description "Monitors Fibonacci, market structure, candlestick patterns"
#property description "and behavioral patterns for optimal exit timing"
//--- 入力パラメータ
input double   ProfitActivationPercent = 70.0;  // 取引がTPまでX%になったら監視を開始する。
input bool     UseRSIReversal = true;           // 逆転検知にRSIを使う
input int      RSIPeriod = 14;                  // RSI期間
input double   RSIOverbought = 70.0;            // RSI 買われすぎレベル
input double   RSI_Oversold = 30.0;             // RSI 売り越しレベル
input bool     UseCandlestickPatterns = true;   // ローソク足のパターンを使う
input bool     UseMovingAverageCross = false;   // 確認にはMAクロスを使用
input int      FastMA_Period = 5;               // 高速MA期間
input int      SlowMA_Period = 10;              // スローMA期間
input int      CheckEveryXSeconds = 10;         // チェックする頻度(秒)

//+------------------------------------------------------------------+
//| スクリプト・プログラム開始機能|
//+------------------------------------------------------------------+
void OnStart()
{
   //--- スクリプト開始メッセージを表示する
   Print("Dynamic Exit Protector Started - Monitoring Trades...");
   
   //--- 連続監視用のタイマーを作成する
   EventSetTimer(CheckEveryXSeconds);
}

//+------------------------------------------------------------------+
//| タイマ機能 - X秒ごとに実行される。
//+------------------------------------------------------------------+
void OnTimer()
{
   CheckAndProtectTrades();
}

//+------------------------------------------------------------------+
//| トレードをチェックし、保護するためのメイン機能。
//+------------------------------------------------------------------+
void CheckAndProtectTrades()
{
   int total = PositionsTotal();
   
   for(int i = total-1; i >= 0; i--)
   {
      ulong ticket = PositionGetTicket(i);
      if(ticket > 0)
      {
         string symbol = PositionGetString(POSITION_SYMBOL);
         double volume = PositionGetDouble(POSITION_VOLUME);
         double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
         double currentProfit = PositionGetDouble(POSITION_PROFIT);
         ulong type = PositionGetInteger(POSITION_TYPE);
         double sl = PositionGetDouble(POSITION_SL);
         double tp = PositionGetDouble(POSITION_TP);
         
         //--- テイクプロフィットが設定されていない場合はスキップする。
         if(tp == 0) continue;
         
         double currentPrice = (type == POSITION_TYPE_BUY) ? SymbolInfoDouble(symbol, SYMBOL_BID) : SymbolInfoDouble(symbol, SYMBOL_ASK);
         
         //--- TPにどれだけ近づいているかを計算する(パーセンテージで)。
         double distanceToTP = 0;
         double progressToTP = 0;
         
         if(type == POSITION_TYPE_BUY)
         {
            distanceToTP = tp - openPrice;
            progressToTP = (currentPrice - openPrice) / distanceToTP * 100;
         }
         else // 売りポジション
         {
            distanceToTP = openPrice - tp;
            progressToTP = (openPrice - currentPrice) / distanceToTP * 100;
         }
         
         //--- TPに近づいたら、反転をチェックする。
         if(progressToTP >= ProfitActivationPercent)
         {
            bool shouldClose = false;
            string reason = "";
            
            //--- RSIリバーサルをチェックする(有効な場合)
            if(UseRSIReversal && CheckRSI_Reversal(symbol, type))
            {
               shouldClose = true;
               reason = "RSI Reversal Signal";
            }
            
            //--- ローソク足パターンをチェックする(有効な場合)
            if(UseCandlestickPatterns && CheckCandlestickReversal(symbol, type))
            {
               shouldClose = true;
               reason = "Candlestick Reversal Pattern";
            }
            
            //--- MAクロスをチェックする(有効な場合)
            if(UseMovingAverageCross && CheckMA_Cross(symbol))
            {
               shouldClose = true;
               reason = "Moving Average Cross";
            }
            
            //--- 追加の安全性:利益が著しく減少し始めた場合
            if(IsProfitDecreasing(symbol, ticket, currentProfit))
            {
               shouldClose = true;
               reason = "Profit Retracement Detected";
            }
            
            //--- 逆転条件が満たされたら取引をクローズする。
            if(shouldClose)
            {
               if(ClosePosition(ticket, symbol, volume, type))
               {
                  Print("Position #", ticket, " closed. Reason: ", reason, 
                        " | Progress to TP: ", DoubleToString(progressToTP, 1), "%",
                        " | Final Profit: ", DoubleToString(currentProfit, 2));
               }
            }
         }
      }
   }
}

//+------------------------------------------------------------------+
| RSIで反転シグナルをチェックする|
//+------------------------------------------------------------------+
bool CheckRSI_Reversal(string symbol, ulong positionType)
{
   double rsi[];
   ArraySetAsSeries(rsi, true);
   
   int handle = iRSI(symbol, PERIOD_CURRENT, RSIPeriod, PRICE_CLOSE);
   if(CopyBuffer(handle, 0, 0, 3, rsi) > 0)
   {
      // 買いポジションの場合:RSIが買われ過ぎに転じ、下降に転じるかどうか。
      if(positionType == POSITION_TYPE_BUY)
      {
         if(rsi[0] < rsi[1] && rsi[1] > RSIOverbought)
            return true;
      }
      // 売りポジションの場合:RSIが売られ過ぎに転じ、上昇に転じるか注目する。
      else
      {
         if(rsi[0] > rsi[1] && rsi[1] < RSI_Oversold)
            return true;
      }
   }
   
   return false;
}

//+------------------------------------------------------------------+
//| ローソク足の反転パターンをチェックする。
//+------------------------------------------------------------------+
bool CheckCandlestickReversal(string symbol, ulong positionType)
{
   MqlRates rates[];
   ArraySetAsSeries(rates, true);
   
   if(CopyRates(symbol, PERIOD_CURRENT, 0, 3, rates) > 0)
   {
      // 買いポジションのための単純な弱気反転パターン
      if(positionType == POSITION_TYPE_BUY)
      {
         // 弱気の巻き込みや流れ星をチェックする
         if((rates[1].close > rates[1].open && rates[0].close < rates[0].open && 
             rates[0].close < rates[1].open) || // 弱気の巻き込み
            (rates[0].high - MathMax(rates[0].open, rates[0].close) > 
             MathAbs(rates[0].close - rates[0].open) * 2)) // 流れ星
            return true;
      }
      // 売りポジションのための単純な強気反転パターン
      else
      {
         // 強気の巻き込みまたはハンマーをチェックする
         if((rates[1].close < rates[1].open && rates[0].close > rates[0].open && 
             rates[0].close > rates[1].open) || // 強気の巻き込み
            (MathMin(rates[0].open, rates[0].close) - rates[0].low > 
             MathAbs(rates[0].close - rates[0].open) * 2)) // ハンマー
            return true;
      }
   }
   
   return false;
}

//+------------------------------------------------------------------+
//| 移動平均のクロスチェック|
//+------------------------------------------------------------------+
bool CheckMA_Cross(string symbol)
{
   double fastMA[], slowMA[];
   ArraySetAsSeries(fastMA, true);
   ArraySetAsSeries(slowMA, true);
   
   int fast_handle = iMA(symbol, PERIOD_CURRENT, FastMA_Period, 0, MODE_SMA, PRICE_CLOSE);
   int slow_handle = iMA(symbol, PERIOD_CURRENT, SlowMA_Period, 0, MODE_SMA, PRICE_CLOSE);
   
   if(CopyBuffer(fast_handle, 0, 0, 2, fastMA) > 0 && 
      CopyBuffer(slow_handle, 0, 0, 2, slowMA) > 0)
   {
      // 弱気のクロス(高速MAが低速MAを下回る)をチェックする
      if(fastMA[1] > slowMA[1] && fastMA[0] < slowMA[0])
         return true;
   }
   
   return false;
}

//+------------------------------------------------------------------+
//| 利益が著しく減少しているかどうかをチェックする。
//+------------------------------------------------------------------+
bool IsProfitDecreasing(string symbol, ulong ticket, double currentProfit)
{
   // 実際の実装では、利益履歴を追跡したいかもしれない。
   // これは単純化したもので、以前の利益値を保存することもできる。
   // 利益が一定の割合で減少したかどうかを比較する。
   
   // 今のところ、価格の動きに基づく単純なアプローチを使うことにする。
   static double lastProfit = 0;
   static ulong lastTicket = 0;
   
   if(lastTicket != ticket)
   {
      lastProfit = currentProfit;
      lastTicket = ticket;
      return false;
   }
   
   // 利益がピーク時から20%以上減少した場合
   if(currentProfit < lastProfit * 0.8 && currentProfit > 0)
   {
      return true;
   }
   
   // 現在の利益の方が大きい場合、最後の利益を更新する
   if(currentProfit > lastProfit)
   {
      lastProfit = currentProfit;
   }
   
   return false;
}

//+------------------------------------------------------------------+
//| クローズポジション機能|
//+------------------------------------------------------------------+
bool ClosePosition(ulong ticket, string symbol, double volume, ulong type)
{
   MqlTradeRequest request = {1};
   MqlTradeResult result = {0};
   
   request.action = TRADE_ACTION_DEAL;
   request.position = ticket;
   request.symbol = symbol;
   request.volume = volume;
   request.deviation = 10;
   request.comment = "Dynamic Exit";
   
   if(type == POSITION_TYPE_BUY)
   {
      request.type = ORDER_TYPE_SELL;
      request.price = SymbolInfoDouble(symbol, SYMBOL_BID);
   }
   else
   {
      request.type = ORDER_TYPE_BUY;
      request.price = SymbolInfoDouble(symbol, SYMBOL_ASK);
   }
   
   return OrderSend(request, result);
}

//+------------------------------------------------------------------+
|初期化解除関数|
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+


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

VR Locker Lite - ポジティブロックに基づく取引戦略 VR Locker Lite - ポジティブロックに基づく取引戦略

ポジティブロックを使用して動作し、取引ロボットが1つのポジティブロックを作成し、トレーダー自身がその処理方法を決定します。

取引戦略の頭または尾 (Heads or Tails) 取引戦略の頭または尾 (Heads or Tails)

信号ブロックコードの分析を伴う頭または尾の取引戦略(頭または尾)の古典的なバージョン。

iCrosshair - Real-Time Candle Metrics on Hover iCrosshair - Real-Time Candle Metrics on Hover

任意のローソク足にカーソルを合わせると、MT5で表示されないものが表示されます:レンジサイズ、ボディパーセンテージ、芯の比率。スマート、高速、カスタマイズ可能。

Accelerator Oscillator (AC) Accelerator Oscillator (AC)

アクセルレーション/デセレレーションインジケーター(AC)は現在の市場を動かす力の加速と減速を測ります。