本策略是一个只做多头的趋势跟踪策略,它通过Aroon指标和线性回归移动平均线的双重确认来产生交易信号。该策略适用于中长线趋势交易。
本策略使用Aroon指标的上轨和下轨的交叉来判断趋势方向。当上轨从下轨向上突破时生成买入信号。当上轨从上轨向下跌破时生成卖出信号。为了过滤假突破,策略还引入了线性回归移动平均线LSMA作为辅助判断标准。只有当收盘价高于LSMA时才会触发买入信号。
具体来说,策略的交易信号生成规则为:
买入信号生成条件:上轨突破下轨(Aroon指标判定双轨交叉形成上升趋势)且当日收盘价高于LSMA移动平均线(收盘价处于上升趋势中)
卖出信号生成条件:上轨跌破下轨(Aroon指标判定双轨交叉形成下降趋势)且当日收盘价低于LSMA移动平均线(收盘价处于下降趋势中)
要防范风险,可以设置止损策略,或者结合其他指标判断趋势反转时机,及时止损。
本策略总体来说是一个较为简单实用的双重确认趋势跟踪策略。它使用Aroon判定趋势方向和LSMA过滤噪音的思路简单直接,在参数设置得当的情况下,可以获得不错的效果。该策略适合中长线持有,避免被短期市场噪音干扰。通过加入止损策略等模块进行优化,可以进一步扩大策略优势,减小风险。
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99
//@version=4
strategy(title = "Aroon Strategy long only", overlay = true, pyramiding=1,initial_capital = 100, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.1)
//Time
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2010, title = "From Year", minval = 1970)
//monday and session
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
//INPUTS
length = input(15, minval=1, title="Aroon Legnth")
upper = 100 * (highestbars(high, length+1) + length)/length
lower = 100 * (lowestbars(low, length+1) + length)/length
lengthx = input(title="Length LSMA", type=input.integer, defval=20)
offset = 0//input(title="Offset", type=input.integer, defval=0)
src = input(close, title="Source")
lsma = linreg(src, lengthx, offset)
long = crossover(upper,lower) and close > lsma
longexit = crossunder(upper,lower) and close < lsma
if(time_cond)
strategy.entry("long",1,when=long)
strategy.close("long",when=longexit)