Skip to content

Latest commit

 

History

History
168 lines (118 loc) · 7.69 KB

吊灯出场策略Chandelier-Exit-Strategy.md

File metadata and controls

168 lines (118 loc) · 7.69 KB

Name

吊灯出场策略Chandelier-Exit-Strategy

Author

ChaoZhang

Strategy Description

IMG

[trans]

概述

这个策略利用吊灯指标来确定价格突破的方向和力度,从而产生买入和卖出信号。它只进行买入操作。

策略原理

这个策略基于吊灯指标,吊灯指标是根据价格的最高价、最低价和平均真实波动幅度来设置停损线。具体来说,该策略计算22日的平均真实波动幅度,并乘以一个系数(默认为3)。然后根据这一数值设置长线停损线和短线停损线。策略持有多头头寸时,如果价格跌破长线停损线则产生卖出信号;如果空头头寸的时候价格突破短线停损线则产生买入信号。

该策略仅进行买入操作。具体来说,它在价格突破上一次的长线停损线时产生买入信号。然后在价格跌破短线停损线时产生卖出信号并平仓。

优势分析

  • 利用吊灯指标设置动态的停损线,可以有效控制风险
  • 结合价格突破产生交易信号,可以抓住价格的趋势性 Features
  • 只进行买入操作,实现了一个规避行情两端反转的策略
  • 设置了多种条件触发的Alert提醒,可以即时监控策略的状态

风险分析

  • 吊灯指标对波动幅度较敏感,如果出现异常的价格波动可能会误报信号
  • 买入后没有设置止损,无法有效控制亏损风险
  • 没有考虑跟踪止盈,无法锁定利润

风险解决方法:

  1. 结合其他指标过滤信号,避免误报
  2. 设置止损线,限制最大亏损比例
  3. 加入跟踪止盈机制,可以考虑动态调整卖出线或部分离场

优化方向

  1. 可以测试不同的参数设置,优化买入和卖出的时机
  2. 可以加入其他指标的确认,避免误报信号
  3. 可以考虑同时进行买入和卖出操作
  4. 可以设置止损和止盈机制

总结

这个策略利用吊灯指标的动态停损线识别价格反转机会。它仅在价格向上突破长停损线时买入,并在价格跌破短停损线时卖出,实现了一个单边操作、规避行情两端反转的简单策略。该策略有效控制了风险,但没有止损和止盈设置。我们可以通过加入其他指标过滤和设置止损止盈来优化该策略,使其更稳健。

||

Overview

This strategy uses the Chandelier Exit indicator to determine the direction and momentum of price breakouts and generate buy and sell signals. It only performs buy operations.

Strategy Logic

This strategy is based on the Chandelier Exit indicator which sets stop-loss lines based on the highest high, lowest low and the Average True Range. Specifically, it calculates a 22-day ATR and multiples it by a coefficient (default 3) to derive values for long and short stop lines. The strategy generates a sell signal when price breaks below the long stop when long, and a buy signal when price breaks above the short stop when short.

The strategy only performs buy operations. It triggers a long entry when price breaks above the previous long stop line, and creates an exit signal when price falls below the short stop line, closing the long position.

Advantage Analysis

  • Utilizes dynamic stop loss lines from Chandelier Exit to effectively control risks
  • Combines price breakouts to capture trending moves
  • Implements a strategy that avoids upside/downside reversals by only buying
  • Alert conditions trigger notifications to monitor strategy status

Risk Analysis

  • Chandelier Exit is sensitive to volatility expansion which may cause false signals
  • No stop loss in place after buying to limit loss
  • No profit taking mechanism to lock in gains

Risk Mitigations:

  1. Add filter with other indicators to avoid false signals
  2. Implement stop loss to limit maximum loss %
  3. Incorporate trailing profit stops, such as dynamic adjustment of sell line or partial exits

Enhancement Opportunities

  1. Test different parameter sets to optimize entries and exits
  2. Add indicator filters to confirm signals and avoid false signals
  3. Consider allowing both buy and sell operations
  4. Introduce stop loss and take profit mechanisms

Conclusion

This strategy identifies reversal opportunities using the dynamic stop lines from the Chandelier Exit indicator. It buys on upside breaks of the long stop line and sells when prices falls below the short stop line, implementing a simple one-sided strategy that avoids upside/downside reversals. It effectively controls risk but lacks stop loss and take profit provisions. Optimization opportunities include adding filters and stop loss/profit taking mechanisms to make the strategy more robust.

[/trans]

Strategy Arguments

Argument Default Description
v_input_1 22 ATR Period
v_input_float_1 3 ATR Multiplier
v_input_2 true Show Buy/Sell Labels ?
v_input_3 true Use Close Price for Extremums ?
v_input_4 true Highlight State ?

Source (PineScript)

/*backtest
start: 2023-12-28 00:00:00
end: 2024-01-04 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Chandelier Exit Strategy", overlay=true)

length = input(title='ATR Period', defval=22)
mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
showLabels = input(title='Show Buy/Sell Labels ?', defval=true)
useClose = input(title='Use Close Price for Extremums ?', defval=true)
highlightState = input(title='Highlight State ?', defval=true)

atr = mult * ta.atr(length)

longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop

shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop

var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir

var color longColor = color.green
var color shortColor = color.red

longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.new(longColor, 0))
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title='Long Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(longColor, 0))
plotshape(buySignal and showLabels ? longStop : na, title='Buy Label', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(longColor, 0), textcolor=color.new(color.white, 0))

shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.new(shortColor, 0))
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title='Short Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(shortColor, 0))
plotshape(sellSignal and showLabels ? shortStop : na, title='Sell Label', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(shortColor, 0), textcolor=color.new(color.white, 0))

changeCond = dir != dir[1]
alertcondition(changeCond, title='Alert: CE Direction Change', message='Chandelier Exit has changed direction!')
alertcondition(buySignal, title='Alert: CE Buy', message='Chandelier Exit Buy!')
alertcondition(sellSignal, title='Alert: CE Sell', message='Chandelier Exit Sell!')

// Define initial capital
initial_capital =25

// Trigger buy order and close buy order on sell signal
if buySignal
    strategy.entry("Buy", strategy.long, qty = initial_capital / close)

if sellSignal
    strategy.close("Buy")

Detail

https://www.fmz.com/strategy/437792

Last Modified

2024-01-05 15:57:51