Files
strategies/均衡线PSAR指标交易策略Heikin-Ashi-PSAR-Trend-Trading-Strategy.md
2024-03-03 22:27:55 +08:00

6.0 KiB

Name

均衡线PSAR指标交易策略Heikin-Ashi-PSAR-Trend-Trading-Strategy

Author

ChaoZhang

Strategy Description

[trans]

本策略结合使用均衡线图形和PSAR指标,进行趋势判断和交易信号产生。该策略借助均衡线降噪的特点,配合PSAR指标判断趋势反转点,实现对中长线趋势的捕捉。

策略原理:

  1. 计算均衡线的开盘价、收盘价、最高价、最低价。

  2. 根据均衡线实体颜色判断多头和空头趋势。

  3. 计算PSAR指标,当其由上向下或下向上突破时,确定趋势反转。

  4. 均衡线多头时,PSAR向下突破做多;均衡线空头时,PSAR向上突破做空。

  5. PSAR根据新高新低和加速因子进行自适应调整。

该策略的优势:

  1. 均衡线过滤噪音,PSAR捕捉反转。组合提高精确度。

  2. PSAR参数自适应,可应对市场变化。

  3. 规则清晰易行,有利于参数优化。

该策略的风险:

  1. 均衡线和PSAR均存在滞后问题,可能错过最佳入场点位。

  2. 震荡趋势下PSAR容易产生错误信号。

  3. 需要严格的资金管理,以对冲反转交易的风险。

总之,该策略通过均衡线判断大趋势,PSAR识别具体入场时点,进行趋势追踪操作。滞后问题和假反转风险需要警惕,但可通过优化获得长期稳定回报。

||

This strategy combines Heikin-Ashi candlesticks and the PSAR indicator for trend identification and trade signals. It uses Heikin-Ashi noise filtering with PSAR for trend reversal detection, aiming to capture medium-long term trends.

Strategy Logic:

  1. Calculate Heikin-Ashi open, close, high and low.

  2. Candle color determines interim bull/bear trend.

  3. Calculate PSAR and identify trend reversal when it crosses Heikin-Ashi price.

  4. Go long on PSAR downtrend and short on PSAR uptrend.

  5. PSAR adapts based on new highs/lows and acceleration factor.

Advantages:

  1. Combination improves accuracy - Heikin-Ashi filters noise, PSAR catches reversals.

  2. Adaptive PSAR adjustable to changing market conditions.

  3. Clear rules benefit parameter optimization.

Risks:

  1. Lagging Heikin-Ashi and PSAR may miss best entries.

  2. PSAR prone to false signals in choppy trends.

  3. Strict risk management needed to defend against whipsaws.

In summary, this strategy pairs Heikin-Ashi for trend context with PSAR for timing. Lag and false signals require caution but can be overcome through optimization for long-term steady gains.

[/trans]

Strategy Arguments

Argument Default Description
v_input_1 0.02 PSAR Start
v_input_2 0.02 PSAR Increment
v_input_3 0.2 PSAR Max
v_input_4 2018 Start Year
v_input_5 true Start Month
v_input_6 true Start Day
v_input_7 2100 End Year
v_input_8 true End Month
v_input_9 true End Day

Source (PineScript)

/*backtest
start: 2023-08-12 00:00:00
end: 2023-09-11 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("QuantNomad - Heikin-Ashi PSAR Strategy", shorttitle = "HA-PSAR[QN]", overlay = false)

////////////
// INPUTS //

start      = input(0.02, title = "PSAR Start")
increment  = input(0.02, title = "PSAR Increment")
maximum    = input(0.2,  title = "PSAR Max")

start_year  = input(2018, 'Start Year',  input.integer)
start_month = input(1,    'Start Month', input.integer)
start_day   = input(1,    'Start Day',   input.integer)

end_year  = input(2100, 'End Year',  input.integer)
end_month = input(1,    'End Month', input.integer)
end_day   = input(1,    'End Day',   input.integer)

date_start = timestamp(start_year, start_month, start_day, 00, 00)
date_end   = timestamp(end_year,   end_month,   end_day,   00, 00)

// if time is in correct period
time_cond = time >= date_start and time <= date_end

// Calculation HA Values 
haopen  = 0.0
haclose = (open + high + low + close) / 4
haopen := na(haopen[1]) ? (open + close) / 2 : (haopen[1] + haclose[1]) / 2
hahigh  = max(high, max(haopen, haclose))
halow   = min(low,  min(haopen, haclose))

// HA colors
hacolor = haclose > haopen ? color.green : color.red

psar        = 0.0 // PSAR
af          = 0.0 // Acceleration Factor
trend_dir   = 0   // Current direction of PSAR
ep          = 0.0 // Extreme point
trend_bars  = 0

sar_long_to_short = trend_dir[1] == 1  and haclose <= psar[1] // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and haclose >= psar[1] // PSAR switches from short to long

trend_change = barstate.isfirst[1] or sar_long_to_short or sar_short_to_long

// Calculate trend direction
trend_dir    := barstate.isfirst[1] and haclose[1] > haopen[1] ? 1 : 
   barstate.isfirst[1] and haclose[1] <= haopen[1] ? -1 : 
   sar_long_to_short ? -1 : 
   sar_short_to_long ?  1 : nz(trend_dir[1])

trend_bars := sar_long_to_short ? -1 : 
              sar_short_to_long ?  1 : 
              trend_dir ==  1   ? nz(trend_bars[1]) + 1 : 
              trend_dir == -1   ? nz(trend_bars[1]) - 1 : 
              nz(trend_bars[1])

// Calculate  Acceleration Factor
af := trend_change ? start : 
   (trend_dir == 1 and hahigh > ep[1]) or  
   (trend_dir == -1 and low < ep[1]) ? 
   min(maximum, af[1] + increment) : 
   af[1]

// Calculate extreme point
ep := trend_change and trend_dir == 1 ? hahigh :  
   trend_change and trend_dir == -1 ? halow : 
   trend_dir == 1 ? max(ep[1], hahigh) : 
   min(ep[1], halow)

// Calculate PSAR
psar := barstate.isfirst[1] and haclose[1] > haopen[1] ? halow[1] : 
   barstate.isfirst[1] and haclose[1] <= haopen[1] ? hahigh[1] : 
   trend_change ? ep[1] :    
   trend_dir == 1 ? psar[1] + af * (ep - psar[1]) : psar[1] - af * (psar[1] - ep) 

plotcandle(haopen, hahigh, halow, haclose, title = "HA", color = hacolor)
plot(psar, style=plot.style_cross, color=trend_dir == 1 ? color.green : color.red,  linewidth = 2)

// Strategy
strategy.entry("long",  true,  when = sar_short_to_long and time_cond)
strategy.entry("short", false, when = sar_long_to_short and time_cond)

Detail

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

Last Modified

2023-09-12 15:16:17