Une stratégie de trading à inversion de gradient est une stratégie de suivi de tendance qui utilise un système de courbe pour émettre des signaux d’achat et de vente. Elle permet de déterminer la direction de la tendance actuelle des prix en calculant des moyennes mobiles de différentes périodes.
La stratégie génère un signal de transaction en calculant deux moyennes mobiles, l’une avec une moyenne de plus longue période comme ligne de référence, et l’autre avec une moyenne de plus courte période. La logique d’opération est la suivante:
Calculer une moyenne de référence avec un paramètre cyclique de len1, qui représente la moyenne des tendances à plus longs cycles.
Calculer une moyenne du signal, dont le paramètre de périodicité est len2, représentant une moyenne de tendance à plus courte périodicité, len2
Lorsque la courte moyenne descend de la direction supérieure et traverse la longue moyenne, le shorting indique un renversement de tendance et la possibilité d’une baisse des cours.
Lorsque la courte moyenne franchit la longue moyenne en descendant, faites plus de transactions, indiquant un renversement de tendance et une hausse possible du cours des actions.
La correction de la position est effectuée lorsque le prix revient à la zone de la moyenne longue.
Ainsi, les points de basculement de la tendance moyenne-longue sont capturés par la croisée des moyennes mobiles et les transactions de tendance sont effectuées.
L’utilisation d’un système de croisement de la même ligne permet de capturer efficacement le renversement de tendance de la période intermédiaire.
Les signaux de transaction sont simples, clairs et faciles à comprendre.
Les paramètres de cycle peuvent être personnalisés pour s’adapter aux différentes variétés et aux différents commerçants.
Il est possible d’installer un Stop Loss Brake pour contrôler chaque risque.
Il n’est pas nécessaire de prédire la valeur de l’action, il suffit de se préoccuper de la direction de la tendance.
Dans le cas d’une secousse, les croisements sont fréquents et produisent plus de faux signaux.
Il n’est pas possible de tirer profit des fluctuations de prix à court terme, mais il est préférable de négocier des tendances à moyen et long terme.
Le système de ligne moyenne est en retard sur les variations de prix et ne parvient pas à saisir les changements de tendance en temps opportun.
La fréquence des transactions peut être faible et les bénéfices insuffisants.
Les paramètres doivent être ajustés en temps opportun pour adapter la fréquence des transactions au marché.
Il permet de vérifier et de filtrer les signaux fausses en combinaison avec d’autres indicateurs techniques tels que MACD, KD, etc.
Ajout d’un filtre de tendance qui ne signale que lorsque la tendance est claire.
Les échanges sur plusieurs périodes, les cycles de convergence, permettent de combiner plus d’opportunités de transactions.
Optimiser dynamiquement les paramètres pour que les paramètres cycliques suivent les changements du marché.
Les modèles d’apprentissage automatique ont été ajoutés pour aider à déterminer l’inversion de tendance.
La stratégie de trading de gradient inverse est une stratégie de suivi de tendance simple et pratique dans l’ensemble. Elle détermine les points de retournement de tendance intermédiaires en croisant les lignes de parité pour capturer les tendances des prix sur des périodes plus longues. La stratégie est facile à mettre en œuvre, les signaux de négociation sont clairs, mais il existe également des limites.
/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//Created by 100kiwi
strategy(title = "TrapTrading", overlay = true)
/////////////////////////////////////////////////////////////////////
// COMPONENT CODE START
//*******************************************************************
// Backtesting Period Selector | Component by pbergden
//*******************************************************************
testStartYear = input(2015, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
// COMPONENT CODE STOP
/////////////////////////////////////////////////////////////////////
// input
buySide = input(defval = true, title = "Trade Direction (ON: Buy Side OFF: Sell Side)", type = bool)
counterTrend = input(defval = true, title = "Trade Mode (ON: Counter Trend OFF: Trend Following)", type = bool)
len1 = input(defval = 14, title = "Period")
multiple = input(defval = 1.4, title = "Multiple")
m1 = close - close[len1]
controlPoint = counterTrend ? lowest(abs(m1), len1) == abs(m1) : highest(abs(m1), len1) == abs(m1)
baseLine = valuewhen(controlPoint, avg(close, close[len1]), 0)
// trap line
atr = atr(len1)
line1Up = baseLine + (atr * multiple)
line2Up = baseLine + (atr * 2 * multiple)
line3Up = baseLine + (atr * 3 * multiple)
line4Up = baseLine + (atr * 4 * multiple)
line5Up = baseLine + (atr * 5 * multiple)
line6Up = baseLine + (atr * 6 * multiple)
line7Up = baseLine + (atr * 7 * multiple)
line8Up = baseLine + (atr * 8 * multiple)
line9Up = baseLine + (atr * 9 * multiple)
line10Up = baseLine + (atr * 10 * multiple)
line1Down = baseLine - (atr * multiple)
line2Down = baseLine - (atr * 2 * multiple)
line3Down = baseLine - (atr * 3 * multiple)
line4Down = baseLine - (atr * 4 * multiple)
line5Down = baseLine - (atr * 5 * multiple)
line6Down = baseLine - (atr * 6 * multiple)
line7Down = baseLine - (atr * 7 * multiple)
line8Down = baseLine - (atr * 8 * multiple)
line9Down = baseLine - (atr * 9 * multiple)
line10Down = baseLine - (atr * 9 * multiple)
// draw
color = close >= baseLine ? teal : red
barcolor(controlPoint ? yellow : na, title = "Candle Color")
plot(baseLine, title = "Base Line", color = white, linewidth = 4, style = stepline, transp = 0)
plot(line1Up, title = "1Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line2Up, title = "2Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line3Up, title = "3Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line4Up, title = "4Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line5Up, title = "5Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line6Up, title = "6Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line7Up, title = "7Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line8Up, title = "8Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line9Up, title = "9Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line10Up, title = "10Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line1Down, title = "1Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line2Down, title = "2Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line3Down, title = "2Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line4Down, title = "4Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line5Down, title = "5Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line6Down, title = "6Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line7Down, title = "7Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line8Down, title = "8Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line9Down, title = "9Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line10Down, title = "10Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
// strategy code
if testPeriod() and buySide
strategy.exit("Exit Long0", from_entry = "Long0", qty = 1, limit = line2Up)
strategy.exit("Exit Long1", from_entry = "Long1", qty = 1, limit = line1Up)
strategy.exit("Exit Long2", from_entry = "Long2", qty = 1, limit = baseLine)
strategy.exit("Exit Long3", from_entry = "Long3", qty = 1, limit = line1Down)
strategy.exit("Exit Long4", from_entry = "Long4", qty = 1, limit = line2Down)
strategy.exit("Exit Long5", from_entry = "Long5", qty = 1, limit = line3Down)
strategy.exit("Exit Long6", from_entry = "Long6", qty = 1, limit = line4Down)
strategy.exit("Exit Long7", from_entry = "Long7", qty = 1, limit = line5Down)
strategy.exit("Exit Long8", from_entry = "Long8", qty = 1, limit = line6Down)
strategy.exit("Exit Long9", from_entry = "Long9", qty = 1, limit = line7Down)
strategy.exit("Exit Long10", from_entry = "Long10", qty = 1, limit = line8Down)
strategy.order("Long0", strategy.long, qty = 1, limit = baseLine, when = strategy.position_size <= 0)
strategy.order("Long1", strategy.long, qty = 1, limit = line1Down, when = strategy.position_size <= 1)
strategy.order("Long2", strategy.long, qty = 1, limit = line2Down, when = strategy.position_size <= 2)
strategy.order("Long3", strategy.long, qty = 1, limit = line3Down, when = strategy.position_size <= 3)
strategy.order("Long4", strategy.long, qty = 1, limit = line4Down, when = strategy.position_size <= 4)
strategy.order("Long5", strategy.long, qty = 1, limit = line5Down, when = strategy.position_size <= 5)
strategy.order("Long6", strategy.long, qty = 1, limit = line6Down, when = strategy.position_size <= 6)
strategy.order("Long7", strategy.long, qty = 1, limit = line7Down, when = strategy.position_size <= 7)
strategy.order("Long8", strategy.long, qty = 1, limit = line8Down, when = strategy.position_size <= 8)
strategy.order("Long9", strategy.long, qty = 1, limit = line9Down, when = strategy.position_size <= 9)
strategy.order("Long10", strategy.long, qty = 1, limit = line10Down, when = strategy.position_size <= 10)
else
if testPeriod() and not buySide
strategy.exit("Exit Short0", from_entry = "Short0", qty = 1, limit = line2Down)
strategy.exit("Exit Short1", from_entry = "Short1", qty = 1, limit = line1Down)
strategy.exit("Exit Short2", from_entry = "Short2", qty = 1, limit = baseLine)
strategy.exit("Exit Short3", from_entry = "Short3", qty = 1, limit = line1Up)
strategy.exit("Exit Short4", from_entry = "Short4", qty = 1, limit = line2Up)
strategy.exit("Exit Short5", from_entry = "Short5", qty = 1, limit = line3Up)
strategy.exit("Exit Short6", from_entry = "Short6", qty = 1, limit = line4Up)
strategy.exit("Exit Short7", from_entry = "Short7", qty = 1, limit = line5Up)
strategy.exit("Exit Short8", from_entry = "Short8", qty = 1, limit = line6Up)
strategy.exit("Exit Short9", from_entry = "Short9", qty = 1, limit = line7Up)
strategy.exit("Exit Short10", from_entry = "Short10", qty = 1, limit = line8Up)
strategy.order("Short0", strategy.short, qty = 1, limit = baseLine, when = strategy.position_size >= 0)
strategy.order("Short1", strategy.short, qty = 1, limit = line1Up, when = strategy.position_size >= -1)
strategy.order("Short2", strategy.short, qty = 1, limit = line2Up, when = strategy.position_size >= -2)
strategy.order("Short3", strategy.short, qty = 1, limit = line3Up, when = strategy.position_size >= -3)
strategy.order("Short4", strategy.short, qty = 1, limit = line4Up, when = strategy.position_size >= -4)
strategy.order("Short5", strategy.short, qty = 1, limit = line5Up, when = strategy.position_size >= -5)
strategy.order("Short6", strategy.short, qty = 1, limit = line6Up, when = strategy.position_size >= -6)
strategy.order("Short7", strategy.short, qty = 1, limit = line7Up, when = strategy.position_size >= -7)
strategy.order("Short8", strategy.short, qty = 1, limit = line8Up, when = strategy.position_size >= -8)
strategy.order("Short9", strategy.short, qty = 1, limit = line9Up, when = strategy.position_size >= -9)
strategy.order("Short10", strategy.short, qty = 1, limit = line10Up, when = strategy.position_size >= -10)