熊市反转哈拉米回测策略通过识别蜡烛图中的熊市反转哈拉米形态,实现自动交易。当识别到熊市反转哈拉米形态时,该策略会进入做空头寸;当止损或止盈后,平仓头寸。
该策略的核心识别指标是:前一根K线为长阳线,第二根K线收盘价包含在前一根K线实体内,并且为阴线,则可能形成熊市反转哈拉米形态。符合该形态时,策略会进入做空头寸。
具体判断逻辑是: 1. 计算前一根K线体大小ABS(Close1 - Open1)是否大于设置的最小实体大小 2. 判断前一根K线是否为阳线 Close1 > Open1 3. 判断当前K线是否为阴线 Open > Close 4. 判断当前K线开盘价是否小于等于前一根K线收盘价 Open <= Close1 5. 判断前一根K线开盘价是否小于等于当前K线收盘价 Open1 <= Close 6. 判断当前K线实体是否小于前一根K线 Open - Close < Close1 - Open1 7. 满足以上条件则形成熊市反转哈拉米,进入做空头寸
该策略具有以下优势:
该策略也存在一些风险:
该策略还可从以下方面进行优化:
熊市反转哈拉米回测策略整体逻辑清晰,易于理解和优化,回测结果较好。风险可控,具有实盘调整空间。整体而言,该策略形成的交易信号较为可靠,值得进一步实盘验证与优化。
/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-19 23:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 16/01/2019
// This is a bearish reversal pattern formed by two candlesticks in which a short
// real body is contained within the prior session's long real body. Usually the
// second real body is the opposite color of the first real body. The Harami pattern
// is the reverse of the Engulfing pattern.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title = "Bearish Harami Backtest", overlay = true)
input_takeprofit = input(20, title="Take Profit pip")
input_stoploss = input(10, title="Stop Loss pip")
input_minsizebody = input(3, title="Min. Size Body pip")
barcolor(abs(close- open) >= input_minsizebody ? close[1] > open[1] ? open > close ? open <= close[1] ? open[1] <= close ? open - close < close[1] - open[1] ? yellow :na :na : na : na : na : na)
pos = 0.0
barcolor(nz(pos[1], 0) == -1 ? red: nz(pos[1], 0) == 1 ? green : blue )
posprice = 0.0
posprice := abs( close - open) >= input_minsizebody? close[1] > open[1] ? open > close ? open <= close[1] ? open[1] <= close ? open - close < close[1] - open[1] ? close :nz(posprice[1], 0) :nz(posprice[1], 0) : nz(posprice[1], 0) : nz(posprice[1], 0) : nz(posprice[1], 0): nz(posprice[1], 0)
pos := iff(posprice > 0, -1, 0)
if (pos == 0)
strategy.close_all()
if (pos == -1)
strategy.entry("Short", strategy.short)
posprice := iff(low <= posprice - input_takeprofit and posprice > 0, 0 , nz(posprice, 0))
posprice := iff(high >= posprice + input_stoploss and posprice > 0, 0 , nz(posprice, 0))