
이 전략은 여러 평균선과 동적 지표에 기반한 트렌드 추적 거래 시스템이다. 이 전략은 주로 20일, 50일, 150일, 200일 간단한 이동 평균 (SMA) 의 동적 관계를 이용하고, 교차량과 RSI 지표를 결합하여 일선 수준에서 강한 상승 추세를 포착하고, 추세가 약해지면 적시에 평정한다. 이 전략은 여러 기술 지표의 조합을 통해 사용되며, 가짜 신호를 효과적으로 필터링하여 거래의 정확성을 향상시킨다.
이 전략의 핵심 논리는 다음과 같은 핵심 부분들로 구성되어 있습니다.
구매 조건은 다음과 같습니다:
판매 조건은 다음과 같습니다:
위험 관리 제안:
이것은 여러 가지 기술 지표의 조화를 통해 강력한 트렌드 기회를 효과적으로 포착 할 수있는 엄격한 트렌드 추적 전략을 설계한 것입니다. 전략의 주요 장점은 완전한 신호 확인 장치와 엄격한 위험 제어 시스템입니다. 약간의 지연이 있음에도 불구하고 합리적인 매개 변수 최적화 및 위험 관리를 통해 전략은 장기간에 걸쳐 안정적인 성능을 유지할 수 있습니다.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Micho's 150 (1D Time Frame Only)", overlay=true)
// Define the length for the SMAs and RSI
sma20Length = 20
sma50Length = 50
sma150Length = 150
sma200Length = 200
volumeMaLength = 20
rsiLength = 14
rsiSmaLength = 14
smaCheckLength = 40 // Check the last month of trading days (~20 days)
requiredRisingDays = 25 // Require SMA to rise in at least 16 of the past 20 days
sma150AboveSma200CheckDays = 1 // Require SMA150 > SMA200 for the last 10 days
// Calculate the SMAs for price
sma20 = ta.sma(close, sma20Length)
sma50 = ta.sma(close, sma50Length)
sma150 = ta.sma(close, sma150Length)
sma200 = ta.sma(close, sma200Length)
// Calculate the 20-period moving average of volume
volumeMA20 = ta.sma(volume, volumeMaLength)
// Calculate the 14-period RSI
rsi = ta.rsi(close, rsiLength)
// Calculate the 14-period SMA of RSI
rsiSMA = ta.sma(rsi, rsiSmaLength)
// Check if most of the last 5 days are buyer days (close > open)
buyerDays = 0
for i = 0 to 9
if close[i] > open[i]
buyerDays := buyerDays + 1
// Check if at least 1 day has volume higher than the 20-period volume MA
highVolumeDays = 0
for i = 0 to 9
if close[i] > open[i] and volume[i] > volumeMA20
highVolumeDays := highVolumeDays + 1
// Define the new RSI condition
rsiCondition = (rsi >= 55) or (rsiSMA > 50 and rsi > rsi[1])
// Check if the 50-day SMA has been rising on at least 16 of the last 20 trading days
risingDays = 0
for i = 1 to smaCheckLength
if sma50[i] > sma50[i + 1]
risingDays := risingDays + 1
// Check if the SMA has risen on at least 16 of the last 20 days
sma50Rising = risingDays >= requiredRisingDays
// Check if the price has been above the SMA150 for the last 20 trading days
priceAboveSma150 = true
for i = 1 to smaCheckLength
if close[i] < sma150[i]
priceAboveSma150 := false
// Check if the SMA150 has been above the SMA200 for the last 10 days
sma150AboveSma200 = true
for i = 1 to sma150AboveSma200CheckDays
if sma150[i] < sma200[i]
sma150AboveSma200 := false
// Define the conditions for the 150-day and 200-day SMAs being rising
sma150Rising = sma150 > sma150[1]
sma200Rising = sma200 > sma200[1]
// Check if most of the last 5 days are seller days (close < open)
sellerDays = 0
for i = 0 to 9
if close[i] < open[i]
sellerDays := sellerDays + 1
// Check if at least 1 day has seller volume higher than the 20-period volume MA
highSellerVolumeDays = 0
for i = 0 to 9
if close[i] < open[i] and volume[i] > volumeMA20
highSellerVolumeDays := highSellerVolumeDays + 1
// Check in the last N days the price below 150
priceBelowSma150 = true
for i = 0 to 0
if close[i] > sma150[i]
priceBelowSma150 := false
// Restrict the strategy to 1D time frame
if timeframe.isdaily
// Buy condition:
// - Most of the last 5 days are buyer days (buyerDays > 2)
// - At least 1 of those days has high buyer volume (highVolumeDays >= 1)
// - RSI SMA (14-period) between 45 and 50 with RSI >= 55, or RSI SMA > 50 and RSI rising
// - 50-day SMA > 150-day SMA and 150-day SMA > 200-day SMA
// - 50-day SMA has been rising on at least 16 of the last 20 trading days
// - The price hasn't been below the 150-day SMA in the last 20 days
// - 150-day SMA has been above the 200-day SMA for the last 10 days
// - 150-day and 200-day SMAs are rising
buyCondition = (close > sma150 and buyerDays > 4 and highVolumeDays >= 1 and rsiCondition and sma50 > sma150 and sma50Rising and sma150Rising and sma200Rising and priceAboveSma150)
// Sell condition:
// - Price crossing below SMA 150
// - Seller volume (current volume > volume MA 20)
// - 150-day SMA crosses below 200-day SMA
// - Most of the last 5 days are seller days (sellerDays > 2) and at least 1 day of higher seller volume (highSellerVolumeDays >= 1)
sellCondition = (priceBelowSma150 and (sma50 < sma150 or (sellerDays >5 and highSellerVolumeDays >= 5)))
// Execute buy when all conditions are met
if (buyCondition)
strategy.entry("Buy", strategy.long)
// Execute sell when all conditions are met
if (sellCondition)
strategy.close("Buy")