Stratégie Long-Short de l'indicateur adaptatif Bullwinkle


Date de création: 2024-01-04 16:09:30 Dernière modification: 2024-01-04 16:09:30
Copier: 0 Nombre de clics: 651
1
Suivre
1621
Abonnés

Stratégie Long-Short de l’indicateur adaptatif Bullwinkle

Le film a été tourné en deux temps.

La stratégie est basée sur l’indicateur de Bouvinco pour identifier automatiquement les tendances du marché et établir des positions en surplus. Elle intègre des indicateurs techniques tels que l’indicateur de Bouvinco, les moyennes mobiles et les lignes de support horizontales pour identifier automatiquement les signaux de rupture et établir des positions.

Le principe de stratégie

L’indicateur central de cette stratégie est l’indicateur de Bouvinco, qui détermine les tendances du marché et les niveaux importants de support/résistance en calculant les écarts logarithmiques des prix de clôture des différents jours de négociation.

En outre, la stratégie intègre la ceinture de sécurité de l’EMA composée de plusieurs moyennes mobiles, telles que les moyennes mobiles à 21 jours et à 55 jours. Selon la relation de tri de ces lignes uniformes, il est actuellement jugé qu’il s’agit d’un marché à plusieurs têtes, d’un marché à tête vide ou d’un marché de consolidation, et limité en conséquence à la mise à découvert ou à la multiplication des opérations.

L’indicateur de Bouvinco permet d’identifier les signaux de négociation et les moyennes mobiles permettent de juger de la phase du marché, ce qui permet d’éviter la création de positions inappropriées.

L’analyse des avantages

Le plus grand avantage de cette stratégie est qu’elle permet d’identifier automatiquement les tendances à la hausse du marché. L’indicateur de Bouvinco est très sensible aux écarts de prix entre les deux périodes et permet de localiser rapidement les résistances de soutien clés.

Cette combinaison d’indicateurs rapides et d’indicateurs de tendance permet à la stratégie de localiser rapidement les points d’achat et de vente, tout en empêchant les achats inappropriés. C’est le plus grand avantage de la stratégie.

L’analyse des risques

Le risque de cette stratégie provient principalement de deux facteurs: d’une part, l’indicateur Bouvinco est lui-même très sensible aux fluctuations de prix et peut générer de nombreux signaux de négociation inutiles; d’autre part, la moyenne mobile peut être désordonnée de manière désordonnée lorsqu’elle est horizontale, ce qui conduit à la confusion des positions.

Pour le premier risque, il est possible d’ajuster les paramètres de l’indicateur de Poincaré de manière appropriée, d’augmenter le cycle de calcul de l’indicateur et de réduire les transactions inutiles; pour le second risque, il est possible d’ajouter plus de moyennes mobiles, ce qui rend le jugement de la tendance plus précis.

Directions d’optimisation

Le principal objectif de cette stratégie est d’ajuster les paramètres et d’augmenter les conditions de filtrage.

Pour l’indicateur de Bouvinco, il est possible d’essayer différents paramètres cycliques pour trouver la meilleure combinaison de paramètres. Pour les moyennes mobiles, il est possible d’ajouter plus de moyennes pour former un système de jugement de tendance plus complet. En outre, il est possible d’ajouter des conditions de filtrage telles que l’indicateur de taux de volatilité et l’indicateur de volume de transactions, afin de réduire les faux signaux.

La stabilité et la rentabilité de la stratégie peuvent être encore améliorées par un ajustement global des paramètres et des conditions.

Résumé

La stratégie d’adaptation de Bouincourt a réussi à combiner des indicateurs rapides avec des indicateurs de tendance, permettant d’identifier automatiquement les points critiques du marché et de créer la bonne position. Son avantage est la capacité de se positionner rapidement et de prévenir la création de positions inappropriées. La prochaine étape peut être optimisée par des paramètres et des conditions, améliorant encore la stabilité de la stratégie et le niveau de rentabilité.

Code source de la stratégie
/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 1m
basePeriod: 1m
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/
// © boftei

//@version=5

strategy("Boftei's Strategy", overlay=false, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, margin_long = 100, margin_short = 100, slippage=0, commission_type=strategy.commission.percent, commission_value = 0, initial_capital = 40, precision = 6)
strat_dir_input = input.string("all", "strategy direction", 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)
//////////////////////////////////////////////////////////////////////
//DATA
testStartYear = input(2005, "Backtest Start Year")
testStartMonth = input(7, "Backtest Start Month")
testStartDay = input(16, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
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)


testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
//////////////////////////////////////////////////////////////////////
sell = input.float(0.0065, "sell level")
buy = input.float(0, "buy level")
long1 = input.float(-0.493, "long retry - too low")
long2 = input.float(2, "long close up")
long3 = input.float(-1.5, "long close down")
short1 = input.float(1.26, "short retry - too high")
short2 = input.float(-5, "dead - close the short")
///< botvenko script
nn = input(60, "Histogram Period")
float x = 0
float z = 0
float k = 0



y = math.log(close[0]) - math.log(close[nn])
if y>0
    x := y
else
    k := y
//---------------------------------------------
        
plot(y > 0 ? x: 0, color = color.green, linewidth = 4)
plot(y <= 0 ? k: 0, color = color.maroon, linewidth = 4)
plot(y, color = color.yellow, linewidth = 1)

co = ta.crossover(y, buy)
cu = ta.crossunder(y, sell)
retry_long = ta.crossunder(y, long1)
deadline_long_up = ta.crossover(y, long2)
deadline_long_down = ta.crossunder(y, long3)
retry_short = ta.crossover(y, short1)
deadline_short = ta.crossunder(y, short2)


hline(buy, title='buy', color=color.green, linestyle=hline.style_dotted, linewidth=2)
hline(0, title='zero', color=color.white, linestyle=hline.style_dotted, linewidth=1)
hline(sell, title='sell', color=color.red, linestyle=hline.style_dotted, linewidth=2)
hline(long1, title='long retry', color=color.blue, linestyle=hline.style_dotted, linewidth=2)
hline(long2, title='overbought', color=color.teal, linestyle=hline.style_dotted, linewidth=2)
hline(long3, title='oversold', color=color.maroon, linestyle=hline.style_dotted, linewidth=2)
hline(short1, title='short retry', color=color.purple, linestyle=hline.style_dotted, linewidth=2)
hline(short2, title='too low to short - an asset may die', color=color.navy, linestyle=hline.style_dotted, linewidth=2)


////////////////////////////////////////////////////////////EMAprotectionBLOCK
ema_21 = ta.ema(close, 21)
ema_55 = ta.ema(close, 55)
ema_89 = ta.ema(close, 89)
ema_144 = ta.ema(close, 144)
//ema_233 = ta.ema(close, 233)
// ema_377 = ta.ema(close, 377)

long_st = ema_21>ema_55 and ema_55>ema_89 and ema_89>ema_144 //and ema_144>ema_233 and ema_233>ema_377
short_st = ema_21<ema_55 and ema_55<ema_89 and ema_89<ema_144 //and ema_144<ema_233 and ema_233<ema_377 

g_v = long_st == true?3:0
r_v = short_st == true?-2:0
y_v = long_st != true and short_st != true?2:0

plot(math.log(ema_21), color = color.new(#ffaf5e, 50))
plot(math.log(ema_55), color = color.new(#b9ff5e, 50))
plot(math.log(ema_89), color = color.new(#5eff81, 50))
plot(math.log(ema_144), color = color.new(#5effe4, 50))
//plot(math.log(ema_233), color = color.new(#5e9fff, 50))
//plot(math.log(ema_377), color = color.new(#af5eff, 50))

plot(long_st == true?3:0, color = color.new(color.green, 65), linewidth = 5)
plot(short_st == true?-2:0, color = color.new(color.red, 65), linewidth = 5)
plot(long_st != true and short_st != true?2:0, color = color.new(color.yellow, 65), linewidth = 5)
////////////////////////////////////////////////////////////EMAprotectionBLOCK




if (co and testPeriod() and (g_v == 3 or y_v == 2))
    strategy.close("OH BRO", comment = "EXIT-SHORT")
    strategy.close("OH DUDE", comment = "EXIT-SHORT")
	strategy.entry("OH DAMN", strategy.long, comment="ENTER-LONG 'co'")
if (retry_long and testPeriod() and (g_v == 3 or y_v == 2))
    strategy.close("OH DAMN", comment = "EXIT-LONG")
    strategy.entry("OH BRUH", strategy.long, comment="ENTER-LONG 'retry_long'")
	
if (cu and testPeriod() and (r_v == -2 or y_v == 2))
    strategy.close("OH DAMN", comment = "EXIT-LONG")
    strategy.close("OH BRUH", comment = "EXIT-LONG")
	strategy.entry("OH BRO", strategy.short, comment="ENTER-SHORT 'cu'")
if (retry_short and testPeriod() and (r_v == -2 or y_v == 2))
    strategy.close("OH BRO", comment = "EXIT-SHORT")
    strategy.entry("OH DUDE", strategy.short, comment="ENTER-SHORT 'retry_short'")
	
    
if (deadline_long_up and testPeriod() or r_v == -2 and testPeriod())
    strategy.close("OH DAMN", comment = "EXIT-LONG 'deadline_long_up'")
if (deadline_long_down and testPeriod())
    strategy.close("OH DAMN", comment = "EXIT-LONG 'deadline_long_down'")
if (deadline_short and testPeriod() or g_v == 3 and testPeriod())
    strategy.close("OH BRO", comment = "EXIT-SHORT 'deadline_short'")
    // (you can use strategy.close_all(comment = "close all entries") here)