Cette stratégie utilise des indicateurs techniques transcycliques pour identifier la direction de la tendance, en combinant le filtrage de la tendance et le filtrage de la volatilité, pour réaliser des transactions de suivi de tendance à faible risque.
Utilisez la rupture des hauts et des bas pour juger des signaux d’achat et de vente. Regardez vers le bas lorsque le prix atteint les hauts de 7 cycles et vers le haut lorsque le prix atteint les bas de 7 cycles.
L’indicateur Trendflex détermine la direction de la tendance principale. Cet indicateur, combinant une technique de doublure, permet d’identifier efficacement les segments intermédiaires de la tendance. Les valeurs supérieures à 1 indiquent une tendance à la hausse et les valeurs inférieures à -1 une tendance à la baisse.
Les fluctuations des bandes de Bollinger permettent d’identifier les zones de choc. Lorsque le prix est proche de la zone, évitez de faire trop de blanchiment.
La gestion des positions est gérée par des stop-loss mobiles et des stop-loss mobiles.
L’indicateur intercyclique, combiné à une technique de double-glissement, permet d’identifier efficacement la direction de la tendance et d’éviter d’être perturbé par les chocs des marchés.
Les signaux de négociation sont plus fiables en tenant compte de la direction de la tendance et des lois de la volatilité.
Le Stop Loss Stop est raisonnable et permet de bloquer les profits et d’empêcher l’expansion des pertes.
Les stratégies sont simples, faciles à comprendre et à mettre en œuvre.
Les signaux de rupture peuvent avoir des fausses ruptures, ce qui peut conduire à des transactions erronées. Il est possible d’envisager d’ajouter d’autres conditions de brouillage.
Les paramètres de cycle fixe ne peuvent pas s’adapter aux changements du marché, on peut considérer les paramètres d’optimisation dynamique.
Le manque d’arrêt des prix n’empêche pas les pertes massives causées par les tendances extrêmes.
Le point d’arrêt et de perte est fixe et ne peut pas être ajusté intelligemment en fonction des fluctuations du marché.
Il est possible d’envisager d’ajouter plus d’indicateurs de jugement de tendance, de former un portefeuille de stratégies et d’améliorer l’exactitude de jugement.
L’ajout d’un module de détection des tremblements de terre et la suspension des transactions en cas de tremblement de terre a réduit les risques.
L’introduction d’algorithmes d’apprentissage automatique pour optimiser dynamiquement les paramètres
L’ajout d’un module d’arrêt de la perte de prix permet d’arrêter la perte et de se retirer lorsque la perte atteint une certaine dépréciation.
Le stop-loss est calculé en fonction des fluctuations du marché et est ajusté intelligemment.
Cette stratégie est globalement robuste et fiable, mais il y a aussi de la place pour l’amélioration. L’idée centrale est de déterminer la direction de la tendance à travers les cycles, puis de combiner l’indicateur de force de tendance et l’indicateur de fluctuation pour filtrer, ce qui émet un signal de haute qualité.
/*backtest
start: 2023-08-27 00:00:00
end: 2023-09-26 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Eltrut", shorttitle="Eltrut Strat", overlay=true, pyramiding=0, default_qty_type= strategy.percent_of_equity,calc_on_order_fills=false, slippage=25,commission_type=strategy.commission.percent,commission_value=0.075)
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// R E F L E X / T R E N D F L E X
f_supersmoother(_src,_len)=>
pi = 2 * asin(1)
_a = exp(-sqrt(2) * pi / _len)
_c2 = 2 * _a * cos(sqrt(2) * pi / _len)
_c3 = -_a * _a
_c1 = 1 - _c2 - _c3
_out = 0.0
_out := _c1 * _src + _c2 * nz(_out[1],nz(_src[1],_src)) + _c3 * nz(_out[2],nz(_src[2],nz(_src[1],_src)))
f_IQIFM(_src1,_max)=>
_src = _src1 < 0.001 ? _src1 * 10000 : _src1
_imult = 0.635, _qmult = 0.338 , _inphase = 0.0, _quad = 0.0
_re = 0.0, _im = 0.0, _deltaphase = 0.0, _instper = 0.0, _per = 0.0, _v4 = 0.0
_v1 = _src - nz(_src[7])
_inphase := 1.25 * (nz(_v1[4]) - _imult * _v1[2]) + _imult * nz(_inphase[3])
_quad := _v1[2] - _qmult * _v1 + _qmult * nz(_quad[2])
_re := 0.2 * (_inphase * _inphase[1] + _quad * _quad[1]) + 0.8 * nz(_re[1])
_im := 0.2 * (_inphase * _quad[1] - _inphase[1] * _quad) + 0.8 * nz(_im[1])
if _re != 0.0
_deltaphase := atan(_im / _re)
for i = 0 to _max
_v4 := _v4 + _deltaphase[i]
if _v4 > 4 * asin(1) and _instper == 0.0
_instper := i
if _instper == 0.0
_instper := nz(_instper[1])
_per := 0.25 * _instper + 0.75 * nz(_per[1])
_per
f_flex(_src1, _fixed_len, _reflex) =>
_src = _src1
_len = _fixed_len
_ss1 = f_supersmoother(_src, _len)
_ss = _ss1
_slope = (_ss[_len] - _ss) / _len
_sum = 0.0
for _i = 1 to _len
_c1 = _reflex ? _ss + _i * _slope - _ss[_i] : _ss - _ss[_i]
_sum := _sum + _c1
_sum := _sum / _len
_ms = 0.0
_ms := 0.04 * pow(_sum,2) + 0.96 * nz(_ms[1])
_flex1 = _ms != 0 ? _sum / sqrt(nz(_ms)) : 0.0
_flex = _flex1
_flex
rflx = f_flex(close, 20, true)
trndflx = f_flex(close, 20, false)
// S I G N A L
hi7 = highest(7)
lo7 = lowest(7)
long_cond = crossunder(close, lo7[1])
short_cond = crossover(close, hi7[1])
// F I L T E R S
long_filter1 = trndflx < 1
short_filter1 = trndflx > -1
basis = sma(close, 35)
dev = 3 * stdev(close, 35)
long_filter2 = close > basis - dev
short_filter2 = close < basis + dev
// S T R A T E G Y
long = long_cond and long_filter1 and long_filter2
short = short_cond and short_filter1 and short_filter2
if( true)
strategy.entry("Long", strategy.long, when = long)
strategy.entry("Long", strategy.long, when = short)
// User Options to Change Inputs (%)
stopPer = input(3, title='Stop Loss %', type=input.float) / 100
takePer = input(9, title='Take Profit %', type=input.float) / 100
// Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)
if strategy.position_size > 0
strategy.exit(id="Exit Long", stop=longStop, limit=longTake)
if strategy.position_size < 0
strategy.exit(id="Exit Short", stop=shortStop, limit=shortTake)
// P L O T
plotshape(long, color = #1e90ff, text = "", style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(short, color = #ff69b4, text = "", style=shape.triangledown, location=location.abovebar, size=size.tiny)
alertcondition(long, "Long", "Enter Long")
alertcondition(short, "Short", "Enter S")