该策略的主要思想是基于每周的价格趋势来确定多空方向,在看涨的情况下,当出现阳线形态之后进入多单;当价格上涨至预设的止盈点时止盈,如果下跌至预设的止损点则止损。
该策略首先定义了判断每周趋势的条件:
isUptrend = close > close[1]
isDowntrend = close < close[1]
如果当前收盘价大于前一日的收盘价则判断为看涨趋势,反之则看跌。
然后定义日内交易信号:
buyCondition = getPrevDayClose() > getPrevDayOpen() and getPrevDayOpen() > getPrevDayClose()[1] and isUptrend
即前一日收盘价大于开盘价(阳线),且前一日开盘价大于前前日收盘价(缺口涨),且处于看涨趋势,满足多头入场条件。
入场后,止损点设置为前一日收盘价再减去1.382倍的前一日实体线长度:
stopLoss = getPrevDayClose() - 1.382 * (getPrevDayClose() - getPrevDayOpen())
止盈点则设置为前一日收盘价加上2倍止损点与收盘价的差额:
takeProfit = getPrevDayClose() + 2 * (getPrevDayClose() - stopLoss)
以此实现止损追利。
该策略具有以下优势:
该策略也存在一些风险:
为控制这些风险,可以考虑加入如下优化:
该策略还可以从以下方向进行优化:
该策略整体来说较为实用,核心思路突出趋势交易,同时控制风险。可以作为日内短线交易的基础策略,也可根据不同市场和品种进行模块化优化,实现多样化的交易组合。在实际运用中,仍需要注意控制成本和防范被套风险,保持适当的心态很关键。
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Trend Following Strategy with Stop Loss and Take Profit", overlay=true)
// Function to get previous day's close and open
getPrevDayClose() =>
request.security(syminfo.tickerid, "D", close[1])
getPrevDayOpen() =>
request.security(syminfo.tickerid, "D", open[1])
// Determine weekly trend
isUptrend = close > close[1]
isDowntrend = close < close[1]
// Determine daily conditions for buy
buyCondition = getPrevDayClose() > getPrevDayOpen() and getPrevDayOpen() > getPrevDayClose()[1] and isUptrend
// Calculate stop loss and take profit
stopLoss = getPrevDayClose() - 1.382 * (getPrevDayClose() - getPrevDayOpen())
takeProfit = getPrevDayClose() + 2 * (getPrevDayClose() - stopLoss)
// Strategy logic
if (isUptrend)
strategy.entry("Buy", strategy.long, when = buyCondition)
strategy.exit("Take Profit/Stop Loss", from_entry="Buy", loss=stopLoss, profit=takeProfit)
if (isDowntrend)
strategy.entry("Sell", strategy.short)
// Plotting the trend on the chart
plotshape(series=isUptrend, title="Uptrend", color=color.green, style=shape.triangleup, location=location.abovebar)
plotshape(series=isDowntrend, title="Downtrend", color=color.red, style=shape.triangledown, location=location.belowbar)
// Plotting stop loss and take profit levels on the chart
plot(stopLoss, color=color.red, title="Stop Loss", linewidth=2, style=plot.style_cross)
plot(takeProfit, color=color.green, title="Take Profit", linewidth=2, style=plot.style_cross)