低点扫描智能追踪法是一种非反演的Forex交易策略。它使用低点扫描器寻找最低点,并结合Hull移动平均线进行交易信号判断,可以实现高胜率。
该策略首先使用低点扫描器寻找最低点。低点扫描器通过计算价格和交易量的RSI值,再与其WMA曲线比较,判断RSI值低于WMA时为最低点。
然后,策略使用Hull移动平均线进行交易信号判断。它计算两个不同周期的Hull MA,当短周期Hull MA上穿长周期Hull MA时做多,下穿时做空。
最后,策略结合最低点扫描和Hull MA的信号,只在最低点扫描器给出最低点信号时,才发出Hull MA的交易信号,形成入场策略。
这样,通过识别市场最低点再追踪趋势,可以有效避开错误的入场时机,提高交易系统的胜率。
低点扫描智能追踪法的优势主要有:
使用低点扫描器,可以准确识别市场最低点,避免在高点买入造成打击。
Hull MA是一种优良的趋势跟踪指标,可以顺势而为,捕捉较大行情。
结合低点扫描和Hull MA互为验证,可以过滤掉大量噪音,减少虚假信号。
采用渐进止损出场机制,可以最大限度锁定利润,避免回吐。
该策略非反演指标驱动,不会操纵历史数据,真实可靠。
该策略主要存在以下风险:
最低点扫描器可能会漏掉部分最低点,导致错过交易机会。可以适当调整参数,扩大扫描范围。
行情可能出现剧烈反转,造成止损被击出。可以适当放宽止损范围,合理控制仓位规模。
参数设置不当可能导致产生过多或过少交易信号。应多次反复优化,找到最佳参数组合。
该策略仅适用于趋势明显的Forex品种,不适合用于盘整、震荡市场的交易。
该策略可以从以下方面进行优化:
优化低点扫描器的参数,使其可以更准确地识别最低点。
优化Hull MA的参数,使其可以更精确地跟踪趋势。
增加其他指标过滤,如MACD、KDJ等,提高信号的可靠性。
增加机器学习模型预测结果,辅助交易信号判断。
优化止损机制,使其可以根据市场波动程度动态调整。
优化仓位管理策略,让系统可以根据资金管理规则动态调整仓位。
低点扫描智能追踪法是一种高胜率的非反演Forex交易策略。它能够准确识别市场最低点,在趋势明确时顺势入场,并采用渐进止损锁定利润。该策略优化空间较大,可以从多方面进行改进,使其成为一个强大的自动交易系统。
/*backtest start: 2023-10-24 00:00:00 end: 2023-10-25 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // © theCrypster 2020 //@version=4 // strategy(title = "Low Scanner Forex strategy", overlay = false, pyramiding=1,initial_capital = 1000, 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) strat_dir_input = input(title="Strategy Direction", defval="long", options=["long", "short", "all"]) strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all strategy.risk.allow_entry_in(strat_dir_value) leng=1 p1=close[1] min=input(1440) len55 = timeframe.isintraday and timeframe.multiplier >= 1 ? min / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7 //taken from https://www.tradingview.com/script/Ql1FjjfX-security-free-MTF-example-JD/ tf3 = input("W", type=input.resolution) ti = change( time(tf3) ) != 0 T_c = fixnan( ti ? close : na ) vrsi = rsi(cum(change(T_c) * volume), leng) pp=wma(vrsi,len55) d=(vrsi[1]-pp[1]) min1 =input(60) len100 = timeframe.isintraday and timeframe.multiplier >= 1 ? min1 / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7 x=ema(d,len100) // zx=x/-1 col=zx > 0? color.lime : color.orange plot(zx,color=col,linewidth=1) // tf10 = input("W", title = "Timeframe", type = input.resolution, options = ["1", "5", "15", "30", "60","120", "240","360","720", "D", "W"]) length = input(24, title = "Period", type = input.integer) shift = input(1, title = "Shift", type = input.integer) hma(_src, _length)=> wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length))) hma3(_src, _length)=> p = length/2 wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p) a = security(syminfo.tickerid, tf10, hma(close, length)) b =security(syminfo.tickerid, tf10, hma3(close[1], length)[shift]) //plot(a,color=color.gray) //plot(b,color=color.yellow) close_price = close[0] len = input(25) linear_reg = linreg(close_price, len, 0) //plot(linear_reg, color=color.blue, title="LR", linewidth=3) buy=crossover(linear_reg, b) sell=crossunder(linear_reg, b) // // Time period input testStartYear = input(2016, "BACKTEST START YEAR", minval = 1980, maxval = 2222) testStartMonth = input(06, "BACKTEST START MONTH", minval = 1, maxval = 12) testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31) testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2222, "BACKTEST STOP YEAR", minval=1980, maxval = 2222) testStopMonth = input(12, "BACKTEST STOP MONTH", minval=1, maxval=12) testStopDay = input(31, "BACKTEST STOP DAY", minval=1, maxval=31) testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0) testPeriod = time >= testPeriodStart and time <= testPeriodStop ? true : false l = crossover(zx,0) or buy if l and testPeriod strategy.entry("buy", strategy.long) per(pcnt) => strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) stoploss=input(title=" stop loss", defval=25, minval=0.01) los = per(stoploss) q1=input(title=" qty_percent1", defval=25, minval=1) q2=input(title=" qty_percent2", defval=25, minval=1) q3=input(title=" qty_percent3", defval=25, minval=1) tp1=input(title=" Take profit1", defval=0.5, minval=0.01) tp2=input(title=" Take profit2", defval=1, minval=0.01) tp3=input(title=" Take profit3", defval=1.5, minval=0.01) tp4=input(title=" Take profit4", defval=2, minval=0.01) strategy.exit("x1", qty_percent = q1, profit = per(tp1), loss = los) strategy.exit("x2", qty_percent = q2, profit = per(tp2), loss = los) strategy.exit("x3", qty_percent = q3, profit = per(tp3), loss = los) strategy.exit("x4", profit = per(tp4), loss = los)