
이 전략은 로렌즈 분류법에 기반한 다중 시간 프레임 거래 시스템으로, 목표 가격과 동적 스톱 로드 메커니즘을 결합한다. 지수 이동 평균 (EMA) 과 분류 지수 (CI) 를 사용하여 시장의 추세를 식별하고, 높은 시간 프레임과 현재 시간 프레임에 대한 교차 분석을 수행한다. 이 전략은 목표 비율을 설정하여 수익을 극대화하고, 동시에 회귀 메커니즘을 사용하여 거래 신호의 유효성을 확인한다.
이 전략의 핵심은 로렌즈 분류법이며, 트리플 지수 이동 평균 ((EMA) 와 분류 지수 ((CI) 를 결합하여 거래 신호를 생성합니다. 구체적인 단계는 다음과 같습니다.
전략은 현재 시간 프레임과 더 높은 시간 프레임에서 로렌즈 라인을 계산하여 다차원적인 시장 관점을 제공합니다. 거래 신호는 가격과 로렌즈 라인을 교차하고 회전 메커니즘을 통해 확인됩니다. 구매 신호는 가격에서 로렌즈 라인을 통과하고 회전 기간 동안 최저 가격이 로렌즈 라인보다 낮을 때 촉발됩니다. 판매 신호는 그 반대입니다.
이 전략은 또한 사용자가 설정한 목표 퍼센트에 따라 탈퇴점을 결정하는 목표 가격 메커니즘을 도입했다. 동시에, 위험을 제어하기 위해 동적 스톱로스를 구현했다.
다중 시간 프레임 분석: 현재와 더 높은 시간 프레임을 결합하여 로렌즈 라인을 사용하여 전략은 더 포괄적인 시장 추세를 포착하고 가짜 신호를 줄일 수 있습니다.
동적 트렌드 식별: 로렌즈 분류법은 시장의 변화에 빠르게 적응하여 민감한 트렌드 식별 능력을 제공합니다.
신호 확인 메커니즘: 회귀 기간을 사용하여 거래 신호를 확인하여 잘못된 거래의 가능성을 효과적으로 감소시킵니다.
목표 가격 최적화: 목표 비율을 설정함으로써 전략은 유리한 상황에서 수익을 극대화 할 수 있습니다.
리스크 관리: 동적 중지 메커니즘을 도입하여 거래 당 위험을 효과적으로 제어합니다.
시각화 및 통계: 전략은 직관적인 차트 표시와 거래 통계를 제공하여 거래자가 전략을 분석하고 최적화 할 수 있습니다.
유연성: 여러 가지 조정 가능한 매개 변수가 거래자를 다른 시장 조건과 개인 선호도에 따라 최적화 할 수 있습니다.
변수 민감성: 전략의 성능은 입력 변수의 선택에 크게 의존하며, 잘못된 변수 설정으로 인해 과도한 거래 또는 중요한 기회를 놓칠 수 있습니다.
시장 조건 의존성: 불안정한 시장에서, 전략은 빈번한 잘못된 신호를 생성하여 연속적인 손실을 초래할 수 있다.
슬라이드 포인트 위험: 빠르게 변동하는 시장에서 실제 실행 가격은 신호 가격과 현저한 차이가 있을 수 있다.
과도한 최적화 위험: 역사적 데이터에 맞게 매개 변수를 과도하게 조정하는 것은 미래의 실 디스크 성능에 영향을 미치는 과도한 적합성을 초래할 수 있다.
기술 장애: 복잡한 기술 지표 계산에 의존하는 시스템 장애 또는 데이터 오류가 잘못된 거래 결정을 초래할 수 있습니다.
이러한 위험을 줄이기 위해 다음과 같은 것이 권장됩니다.
동적 변수 조정: 시장의 변동성에 따라 EMA 길이를 자동으로 조정하는 적응 변수 조정 메커니즘을 구현합니다.
필터를 추가: 추가 기술 지표 또는 기본 지표를 필터로 도입하여 신호 품질을 향상시킵니다.
기계 학습 통합: 기계 학습 알고리즘을 사용하여 매개 변수 선택 및 신호 생성 과정을 최적화한다.
다종 관련성 분석: 여러 종 관련성을 고려하여 보다 포괄적인 시장 관점을 제공합니다.
뉴스 이벤트 통합: 뉴스 이벤트 분석 기능을 추가하여 중요한 경제 데이터가 발표되는 동안 전략적 행동을 조정합니다.
변동성 조정: 시장의 변동성 동력에 따라 목표 비율과 중지 수준을 조정한다.
위험 관리 강화: 더 복잡한 포지션 관리 및 위험 제어 전략, 예를 들어 변동성에 기반한 포지션 조정.
이러한 최적화 방향은 전략의 적응성과 안정성을 높여 다양한 시장 조건에서 좋은 성능을 유지할 수 있도록 한다.
로렌즈 분류 다중 시간 프레임 목표 전략은 첨단 기술 분석 방법과 지능적인 위험 관리 메커니즘을 결합한 포괄적 인 거래 시스템입니다. 다중 시간 프레임 분석, 동적 트렌드 식별 및 목표 가격 최적화를 통해이 전략은 다양한 시장 조건에서 안정적인 거래 성능을 달성 할 잠재력이 있습니다. 그러나, 그것은 또한 변수 민감성 및 시장 의존성과 같은 도전에 직면합니다. 지속적인 최적화 및 위험 관리를 통해 거래자는 잠재적인 위험을 효과적으로 제어하면서 전략의 장점을 최대한 활용할 수 있습니다.
/*backtest
start: 2023-07-31 00:00:00
end: 2024-07-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Lorenzian Classification Strategy with Target and Multi-Timeframe", overlay=true)
// Input parameters
length = input.int(5, "Lorenzian Length", minval=1)
threshold = input.float(1.0, "Threshold", step=0.1)
lookback = input.int(3, "Lookback Candles", minval=1, maxval=20)
targetPercentage = input.float(1.5, "Target Percentage (%)", step=0.1) // Target percentage for exit
higherTimeframe = input.timeframe("D", "Higher Timeframe") // Higher timeframe for multi-timeframe analysis
// Lorenzian Classification calculation for current timeframe
ema1 = ta.ema(hlc3, length)
ema2 = ta.ema(ema1, length)
ema3 = ta.ema(ema2, length)
d = ema1 - ema2
ci = d / (0.015 * ta.ema(math.abs(d), length)) * 100
lorenzian = ema3 + ci
// Lorenzian Classification calculation for higher timeframe
hlc3_htf = request.security(syminfo.tickerid, higherTimeframe, (high + low + close)/3 )
ema1_htf = ta.ema(hlc3_htf, length)
ema2_htf = ta.ema(ema1_htf, length)
ema3_htf = ta.ema(ema2_htf, length)
d_htf = ema1_htf - ema2_htf
ci_htf = d_htf / (0.015 * ta.ema(math.abs(d_htf), length)) * 100
lorenzian_htf = ema3_htf + ci_htf
// Signal generation
crossUp = ta.crossover(close, lorenzian)
crossDown = ta.crossunder(close, lorenzian)
// Determine color based on price position relative to the line
lineColor = close > ema3 ? color.green : color.red
lineColorH = close > ema3_htf ? color.blue : color.red
// Plot the line with dynamic color
plot(ema3, color=lineColor, title="EMA3", linewidth=2)
plot(ema3_htf, color=lineColorH, title="EMA3 HTF", linewidth=2)
// Function to check for opposite movement
oppositeMove(isLong) =>
if isLong
lowest = ta.lowest(low, lookback)
lowest < lorenzian[lookback]
else
highest = ta.highest(high, lookback)
highest > lorenzian[lookback]
// Generate buy and sell signals
buySignal = crossUp and oppositeMove(true)
sellSignal = crossDown and oppositeMove(false)
// Calculate and manage target price
var float targetPrice = na
var float plotTargetPrice = na
var float entryPrice = na
// Variables to track trade outcomes
var int targetMet = 0
var int targetNotMet = 0
var int totalTrades = 0
if (buySignal)
strategy.entry("Buy", strategy.long)
entryPrice := close
targetPrice := entryPrice * (1 + targetPercentage/100)
plotTargetPrice := targetPrice
totalTrades := totalTrades + 1
if (sellSignal)
strategy.entry("Sell", strategy.short)
entryPrice := close
targetPrice := entryPrice * (1 - targetPercentage/100)
plotTargetPrice := targetPrice
totalTrades := totalTrades + 1
// Check if target price is met to exit
if (not na(targetPrice))
if (strategy.position_size > 0 and high >= targetPrice) // Long position exit condition
strategy.close("Buy")
targetPrice := na
entryPrice := na
targetMet := targetMet + 1
else if (strategy.position_size > 0 and low < entryPrice * (1 - targetPercentage/100)) // Stop loss for long
strategy.close("Buy")
targetPrice := na
entryPrice := na
targetNotMet := targetNotMet + 1
if (strategy.position_size < 0 and low <= targetPrice) // Short position exit condition
strategy.close("Sell")
targetPrice := na
entryPrice := na
targetMet := targetMet + 1
else if (strategy.position_size < 0 and high > entryPrice * (1 + targetPercentage/100)) // Stop loss for short
strategy.close("Sell")
targetPrice := na
entryPrice := na
targetNotMet := targetNotMet + 1
// Reset plotTargetPrice when position is closed
if (strategy.position_size == 0)
plotTargetPrice := na
// Plot signals and target price
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.purple, style=shape.triangledown, size=size.small)
plot(plotTargetPrice, color=color.yellow, title="Target Price", style=plot.style_circles, linewidth=2)
// Add alerts
alertcondition(buySignal, title="Buy Signal", message="Lorenzian Buy Signal")
alertcondition(sellSignal, title="Sell Signal", message="Lorenzian Sell Signal")
// Calculate success percentage
successPercentage = totalTrades > 0 ? (targetMet / totalTrades) * 100 : 0
// Create a table to display trade outcomes
var table tradeStats = table.new(position.top_right, 2, 3, border_width=1)
table.cell(tradeStats, 0, 0, "Targets Met", bgcolor=color.new(color.green, 30))
table.cell(tradeStats, 1, 0, "Targets Missed", bgcolor=color.new(color.red, 30))
table.cell(tradeStats, 0, 1, str.tostring(targetMet), bgcolor=color.new(color.green, 30))
table.cell(tradeStats, 1, 1, str.tostring(targetNotMet), bgcolor=color.new(color.red, 30))
table.cell(tradeStats, 0, 2, "Success Rate", bgcolor=color.new(color.blue, 30))
table.cell(tradeStats, 1, 2, str.tostring(successPercentage, "#.##") + "%", bgcolor=color.new(color.blue, 30))