策略回测
/*backtest
start: 2022-01-01 09:00:00
end: 2022-04-21 15:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
args: [["ContractType","rb888",360008]]
*/
//@version=5
indicator("Inverted Hammer", overlay=true)
downtrend_threshold = input.int(10, "下降趋势EMA阈值", minval=0, maxval=200, step=1, tooltip="Close must be below this EMA to be considered an inverted hammer in a downtrend")
upper_wick_min = input.float(2, "最小向上 X 主体", minval=2, maxval=20, step=1, tooltip="Upper wick must be this multiple of the body size or greater")
upper_wick_max = input.float(20, "最大向上 X 主体", minval=3, maxval=100, step=1, tooltip="Upper wick must be this multiple of the body size or less")
lower_wick_max = input.float(1, "最大向下 X 主体", minval=.25, maxval=10, step=.25, tooltip="Lower wick must be this multiple of the body size or less")
body_min = input.float(2, "K线的最小主体 %", minval=1, maxval=50, step=1, tooltip="Body must be at least this percent of the total candle range (high - low)")
up_only = input.bool(false, "仅在阳线", tooltip="The close must be higher than the previous close")
broke_high = input.bool(false, "突破先前高点", tooltip="The high must be higher than the previous high")
bodyGreen = close > open
body = math.abs(close - open)
upper_wick = high - math.max(open, close)
lower_wick = math.min(open, close) - low
upper_wick_qualify =
(body * upper_wick_min <= upper_wick) and
(body * upper_wick_max >= upper_wick) and
(not broke_high or high > high[1])
lower_wick_qualify =
(lower_wick <= body * lower_wick_max)
body_qualify =
(bodyGreen or not up_only) and
(body > (body_min / 100 * (high - low))) and
(downtrend_threshold == 0 or close < ta.ema(close, downtrend_threshold))
invertedHammer = body_qualify and upper_wick_qualify and lower_wick_qualify ? low : na
plot( invertedHammer , title="Inverted hammer", style=plot.style_circles, linewidth=12,color=color.yellow)
if invertedHammer
strategy.entry("buy", strategy.long)