이 전략은 자금 흐름 지표 ((MFI) 를 기반으로 한 자동화 된 거래 시스템으로, 자산이 과매도 지역에서 수행되는 것을 식별하여 잠재적인 역전 기회를 포착합니다. 전략의 핵심은 MFI 지표가 과매도 지역에서 (설정값 20 이하) 다시 올랐을 때 구매 신호를 발생시키고, 제한 가격 주문, 중지 손실 및 이익 결제와 같은 여러 가지 메커니즘을 통해 거래 위험과 수익을 관리합니다. 이 전략은 특히 시장에서 과하 반전이 발생할 때 배치하는 데 적합합니다.
이 전략은 다음과 같은 몇 가지 중요한 단계에 기반합니다.
이것은 합리적이고 논리적으로 명확하게 설계된 자동화 거래 전략이다. MFI 지표의 유연한 사용과 완벽한 주문 관리 메커니즘을 결합하여 시장 과매매 후의 반발 기회를 효과적으로 잡을 수 있다. 전략의 구성성이 강하여 다양한 시장 환경에 따라 최적화된 조정이 가능합니다.
/*backtest
start: 2024-11-04 00:00:00
end: 2024-12-04 00:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © traderhub
//@version=5
strategy("MFI Strategy with Oversold Zone Exit and Averaging", overlay=true)
// Strategy parameters
mfiPeriod = input.int(title="MFI Period", defval=14) // Period for calculating MFI
mfiOS = input.float(title="MFI Oversold Level", defval=20.0) // Oversold level for MFI
longEntryPercentage = input.float(title="Long Entry Percentage (%)", minval=0.0, step=0.1, defval=0.1) // Percentage for the buy limit order
stopLossPercentage = input.float(title="Stop Loss Percentage (%)", minval=0.0, step=0.1, defval=1.0) // Percentage for the stop-loss
exitGainPercentage = input.float(title="Exit Gain Percentage (%)", minval=0.0, step=0.1, defval=1.0) // Percentage gain for the take-profit
cancelAfterBars = input.int(title="Cancel Order After # Bars", minval=1, defval=5) // Cancel order after a certain number of bars
// Calculate MFI
mfi = ta.mfi(close, mfiPeriod) // MFI with specified period
// Variables for tracking state
var bool inOversoldZone = false // Flag for being in the oversold zone
var float longEntryPrice = na // Price for long entry
var int barsSinceEntryOrder = na // Counter for bars after placing an order
// Define being in the oversold zone
if (mfi < mfiOS)
inOversoldZone := true // Entered oversold zone
// Condition for exiting the oversold zone and placing a limit order
if (inOversoldZone and mfi > mfiOS)
inOversoldZone := false // Leaving the oversold zone
longEntryPrice := close * (1 - longEntryPercentage / 100) // Calculate limit price for entry
strategy.entry("Long Entry", strategy.long, limit=longEntryPrice) // Place a limit order
barsSinceEntryOrder := 0 // Reset counter for bars after placing the order
// Increase the bar counter if the order has not yet been filled
if (not na(barsSinceEntryOrder))
barsSinceEntryOrder += 1
// Cancel order if it hasn’t been filled within the specified number of bars
if (not na(barsSinceEntryOrder) and barsSinceEntryOrder >= cancelAfterBars and strategy.position_size == 0)
strategy.cancel("Long Entry")
barsSinceEntryOrder := na // Reset bar counter
// Set stop-loss and take-profit for filled positions
if (strategy.position_size > 0)
stopLossPrice = longEntryPrice * (1 - stopLossPercentage / 100) // Calculate stop-loss level
takeProfitPrice = longEntryPrice * (1 + exitGainPercentage / 100) // Calculate take-profit level
strategy.exit("Exit Long", from_entry="Long Entry", limit=takeProfitPrice, stop=stopLossPrice)
// Visualize oversold and overbought zones
bgcolor(mfi < mfiOS ? color.new(color.green, 90) : na) // Background in oversold zone
plot(mfi, title="MFI", color=color.blue) // MFI plot
hline(mfiOS, "Oversold Level", color=color.red) // Oversold level line