0bps

Strategy vault / Trend following

AlphaTrend Dual Tracking Strategy

The AlphaTrend dual tracking strategy trades based on the buy and sell signals generated by the AlphaTrend indicator. It opens long and short positions in the areas where AlphaTrend produces buy and sell signals.

Author
ChaoZhang
Complexity
Starter · 87 lines
Parameters
5
Backtest bar
1h · intraday
Tested on
BTC/USDT · futures

IMG

Overview

The AlphaTrend dual tracking strategy trades based on the buy and sell signals generated by the AlphaTrend indicator. It opens long and short positions in the areas where AlphaTrend produces buy and sell signals.

Strategy Logic

The core of the AlphaTrend dual tracking strategy is the AlphaTrend indicator. The AlphaTrend indicator calculates the upper and lower bands based on the adaptive ATR and price (close price or volume weighted average price). The specific calculation method is:

Upper Band = Lowest Low - ATR * Multiplier Lower Band = Highest High + ATR * Multiplier

Where ATR is the average true range over a certain period and multiplier is an adjustable parameter. When price is above the upper band, the indicator line approaches the upper band. When price is below the lower band, the indicator line approaches the lower band. Thus AlphaTrend forms an adaptive channel.

The AlphaTrend dual tracking strategy establishes long and short positions based on the signals generated by AlphaTrend. The specific logic is:

  • Go long when price crosses above AlphaTrend;
  • Go short when price crosses below AlphaTrend.

This completes the dual-directional tracking trading based on the dynamic AlphaTrend channel.

Advantage Analysis

The biggest advantage of AlphaTrend dual tracking strategy is that it can track changes in market trends. The adaptive ATR can adjust the channel range according to changes in market volatility, avoiding the problem of traditional Bollinger Bands losing effectiveness due to volatility expansion.

In addition, AlphaTrend combines both price and volume (or momentum) information, which helps filter out some false breakouts, improving the quality of trading signals.

Risk Analysis

The main risk of the AlphaTrend dual tracking strategy comes from huge market fluctuations that could hit the stop loss points. When there is abnormal market movement, the stop loss points may be broken, leading to large losses. This needs to be controlled by properly adjusting ATR parameters and stop loss points.

In addition, ALPHA itself has some lagging. It may also generate incorrect signals around market turning points. Other indicators should be used to confirm the signals.

Optimization Directions

The AlphaTrend dual tracking strategy can be optimized in the following aspects:

  1. Combine with trend indicators to determine the major market trend to avoid trading against the trend;
  2. Increase volume filter to avoid losses caused by low volume false breakouts;
  3. Optimize indicator parameters to make the channel range more suitable for different products;
  4. Increase machine learning algorithms to make the channel more intelligent.

Through the above optimizations, the stability and profitability of the AlphaTrend strategy can be further improved.

Summary

In summary, the AlphaTrend dual tracking strategy is an effective way to track market changes. It solves the problem of traditional technical indicators losing effectiveness and also incorporates volume information to filter signals. With proper optimizations, this strategy can become a powerful tool in quantitative trading systems.

Parameters

NameDefaultWhat it controls
v_input_float_1trueMultiplier
v_input_114Common Period
v_input_2_close0src: close | high | low | open | hl2 | hlc3 | hlcc4 | ohlc4
v_input_3trueShow Signals?
v_input_4falseChange calculation (no volume data)?

Source Pine Script

/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 1h
basePeriod: 15m
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/
// author © KivancOzbilgic
// developer © KivancOzbilgic
//@version=5
strategy('AlphaTrend', shorttitle='AT', overlay=true, format=format.price, precision=2)
coeff = input.float(1, 'Multiplier', step=0.1)
AP = input(14, 'Common Period')
ATR = ta.sma(ta.tr, AP)
src = input(close)
showsignalsk = input(title='Show Signals?', defval=true)
novolumedata = input(title='Change calculation (no volume data)?', defval=false)
upT = low - ATR * coeff
downT = high + ATR * coeff
AlphaTrend = 0.0
AlphaTrend := (novolumedata ? ta.rsi(src, AP) >= 50 : ta.mfi(hlc3, AP) >= 50) ? upT < nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : upT : downT > nz(AlphaTrend[1]) ? nz(AlphaTrend[1]) : downT

color1 = AlphaTrend > AlphaTrend[2] ? #00E60F : AlphaTrend < AlphaTrend[2] ? #80000B : AlphaTrend[1] > AlphaTrend[3] ? #00E60F : #80000B
k1 = plot(AlphaTrend, color=color.new(#0022FC, 0), linewidth=3)
k2 = plot(AlphaTrend[2], color=color.new(#FC0400, 0), linewidth=3)

fill(k1, k2, color=color1)

buySignalk = ta.crossover(AlphaTrend, AlphaTrend[2])
sellSignalk = ta.crossunder(AlphaTrend, AlphaTrend[2])


K1 = ta.barssince(buySignalk)
K2 = ta.barssince(sellSignalk)
O1 = ta.barssince(buySignalk[1])
O2 = ta.barssince(sellSignalk[1])

//plotshape(buySignalk and showsignalsk and O1 > K2 ? AlphaTrend[2] * 0.9999 : na, title='BUY', text='BUY', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(#0022FC, 0), textcolor=color.new(color.white, 0))

//plotshape(sellSignalk and showsignalsk and O2 > K1 ? AlphaTrend[2] * 1.0001 : na, title='SELL', text='SELL', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.maroon, 0), textcolor=color.new(color.white, 0))



longCondition = buySignalk and showsignalsk and O1 > K2
if (longCondition)
    
    strategy.entry("BUY", strategy.long, comment = "BUY ENTRY")

shortCondition = sellSignalk and showsignalsk and O2 > K1
if (shortCondition )
    
    strategy.entry("SELL", strategy.short, comment = "SELL ENTRY")













// alertcondition(buySignalk and O1 > K2, title='Potential BUY Alarm', message='BUY SIGNAL!')
// alertcondition(sellSignalk and O2 > K1, title='Potential SELL Alarm', message='SELL SIGNAL!')

// alertcondition(buySignalk[1] and O1[1] > K2, title='Confirmed BUY Alarm', message='BUY SIGNAL APPROVED!')
// alertcondition(sellSignalk[1] and O2[1] > K1, title='Confirmed SELL Alarm', message='SELL SIGNAL APPROVED!')



// alertcondition(ta.cross(close, AlphaTrend), title='Price Cross Alert', message='Price - AlphaTrend Crossing!')
// alertcondition(ta.crossover(low, AlphaTrend), title='Candle CrossOver Alarm', message='LAST BAR is ABOVE ALPHATREND')
// alertcondition(ta.crossunder(high, AlphaTrend), title='Candle CrossUnder Alarm', message='LAST BAR is BELOW ALPHATREND!')

// alertcondition(ta.cross(close[1], AlphaTrend[1]), title='Price Cross Alert After Bar Close', message='Price - AlphaTrend Crossing!')
// alertcondition(ta.crossover(low[1], AlphaTrend[1]), title='Candle CrossOver Alarm After Bar Close', message='LAST BAR is ABOVE ALPHATREND!')
// alertcondition(ta.crossunder(high[1], AlphaTrend[1]), title='Candle CrossUnder Alarm After Bar Close', message='LAST BAR is BELOW ALPHATREND!')




Published by ChaoZhang on the FMZ strategy square · last modified 2024-02-02. Collected in the Quant Trading Vault. Unvalidated research: re-test with your own data and costs before trusting it.

Build this with AgenKit

A spec is not a trading system. Paste this into your coding agent and AgenKit runs a specialist team — architecture, test-first build, risk gates, review — with paper trading on by default.

in Claude Code, Cursor, Codex & 4 more
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/AlphaTrend-Dual-Tracking-Strategy.md
  1. npx agenkit install engineering-kit in your project
  2. Paste the command into your agent and approve each phase
  3. Get tests, backtest, risk controls and a paper-trading switch

Understand it first

Before you run this, read the lesson behind the idea and how to backtest it honestly. Specs like this one are the survivors of an unknown number of trials; deflate their results accordingly.

Related specs

esc

Try , , or .

↑↓ move↵ open