
La stratégie de codage de position dynamique uniforme multi-signaux est une stratégie de négociation quantitative spécialement conçue pour le marché des crypto-monnaies, qui combine des indicateurs d’analyse technique et un système de gestion de position dynamique. L’idée centrale est d’utiliser des signaux croisés de moyennes mobiles rapides et lentes et un indicateur stochastique RSI aléatoire relativement fort pour déterminer la direction de la tendance du marché et le moment d’entrée, tout en utilisant une méthode pyramidale d’augmentation de la position pour répondre à la rétroaction des prix.
La stratégie est basée sur les composants techniques suivants:
Système de moyenne mobile doubleLa stratégie utilise le croisement de deux moyennes mobiles (Fast et Slow) comme principal signal d’entrée. L’utilisateur peut choisir entre la moyenne mobile simple (SMA), la moyenne mobile indicielle (EMA) ou la moyenne mobile de Hull (HMA), et peut choisir de se positionner à la hausse ou à la baisse lorsque la moyenne est croisée en fonction de la situation du marché.
Le RSI est un indicateur aléatoire de force et de faiblesse (Stochastic RSI)En tant que condition d’entrée auxiliaire, un signal d’achat est déclenché lorsque le RSI stochastique atteint le niveau de 5 sur la ligne K et que la moyenne mobile rapide est dans une tendance à la hausse (à la hausse pendant 5 cycles consécutifs).
Système de commande de sécurité dynamique: Après l’entrée initiale, la stratégie place plusieurs ordres de sécurité en dessous du niveau de prix prédéfini. Ces niveaux de prix sont calculés en fonction des paramètres d’écart de prix et du facteur d’échelle de longueur d’étape.
Adaptation dynamique de la taille des positions: La taille de chaque ordre de sécurité augmente progressivement en fonction du facteur d’escalade de la taille de l’ordre de sécurité, formant une structure d’acquisition progressive.
Le mécanisme de plafonnement des bénéfices cibles: la stratégie définit un niveau de profit cible basé sur le prix moyen de la position, et toutes les positions sont liquidées lorsque le prix atteint ce niveau.
Le processus d’exécution de la stratégie est le suivant:
Signaux d’entrée multidimensionnels: une combinaison de l’indicateur de tendance (la moyenne mobile) et de l’indicateur de dynamique (le RSI stochastique) pour améliorer la précision d’entrée et réduire les faux signaux.
Très adaptableLes paramètres de la stratégie sont hautement personnalisables, et l’utilisateur peut ajuster le type de moyenne mobile, la période, l’orientation croisée, le taux d’écart des prix, etc., en fonction de l’environnement du marché et des préférences de risque personnelles.
Effets de la moyenne des coûts: Grâce à un système de commande sécurisé par défaut, le stock est automatiquement augmenté lorsque les prix baissent, ce qui réduit efficacement le coût moyen de détention et améliore la probabilité de profit final.
Optimisation de l’efficacité financière: La conception de l’échelle croissante des commandes de sécurité rend l’allocation des fonds plus efficace, plus d’argent est alloué à des commandes à des prix plus bas, conformément à la philosophie de l’investissement en valeur.
Automatisation de l’exécutionUne fois que les paramètres sont définis, la stratégie peut être exécutée automatiquement, sans intervention humaine, réduisant ainsi les décisions commerciales émotionnelles.
Adaptation à un marché flexibleLa stratégie peut s’adapter à différents environnements de marché en ajustant la direction transversale des moyennes mobiles (en hausse ou en baisse).
Le risque est sans fin.: La stratégie n’a pas été conçue de manière explicite pour mettre en place un mécanisme de stop-loss, ce qui peut entraîner des pertes importantes dans des conditions de baisse persistante. Dans des conditions de marché extrêmes, telles que la chute des prix des actifs ou le retour à zéro, cela peut entraîner de graves pertes de fonds.
Le besoin de financement est élevéLes investisseurs doivent s’assurer qu’ils disposent de suffisamment de liquidités car la stratégie nécessite de réserver des fonds pour plusieurs ordres de sécurité et que la taille de chaque ordre augmente.
Vous êtes polycentrique.: La stratégie actuelle est conçue pour favoriser la diversification et n’est pas efficace dans les tendances baissières à long terme. Il est recommandé d’appliquer cette stratégie sur les actifs qui semblent globalement bons.
Paramètre SensibilitéLa performance de la stratégie est fortement dépendante des paramètres, et les paramètres inappropriés peuvent entraîner un déclenchement prématuré d’une commande de sécurité ou un surstockage.
Le piège du coût moyenBien que la stratégie vise à réduire le coût moyen par l’augmentation des stocks, elle peut entraîner des “recoups” et des emprisonnements de fonds si la valeur des actifs continue de baisser et ne peut pas être récupérée.
Les méthodes d’atténuation des risques comprennent: l’application de la stratégie sur des actifs globalement favorables; la mise de côté de suffisamment de fonds pour répondre aux ordres de sécurité; la vérification régulière de la correspondance des paramètres de la stratégie avec l’environnement du marché; la définition d’une limite au nombre maximal d’ordres de sécurité; l’examen de l’ajout d’un mécanisme de stop-loss global à la stratégie.
Augmentation du mécanisme de prévention des pertesLe défaut le plus évident de la stratégie est l’absence de mécanisme de stop loss. Il est recommandé d’ajouter un paramètre global de stop loss, qui oblige à régler toutes les positions lorsque les pertes atteignent un certain pourcentage, pour protéger la sécurité des fonds.
Joignez-vous au filtre de tendances du marchéIl est possible d’ajouter des indicateurs de jugement de tendance à plus long terme, tels que les moyennes mobiles à long terme ou les indicateurs ADX, et d’exécuter la stratégie uniquement lorsque la direction de la tendance principale est cohérente, afin d’éviter de prendre des positions inutilement importantes dans un marché baissier évident.
Optimiser la logique de déclenchement des commandes de sécurité: Les ordres de sécurité actuels sont basés uniquement sur le déclenchement de l’écart de prix, mais il est possible d’envisager de combiner le volume, la volatilité ou d’autres indicateurs techniques pour rendre le déclenchement des ordres de sécurité plus intelligent.
Modification dynamique des objectifs de profit: il est possible d’ajuster le niveau de profit cible en fonction de la volatilité du marché ou de la dynamique du comportement des prix après l’entrée et de fixer un profit cible plus élevé dans un environnement de marché très volatil.
Ajout d’une fonction de prévisualisation: la stratégie d’extension soutient la direction du shorting, ce qui lui permet d’être tout aussi efficace dans une tendance baissière et d’améliorer l’adaptabilité de la stratégie sur l’ensemble du marché.
Ajouter un contrôle de retracement: définir des limites de retrait maximales, suspendre la négociation ou réinitialiser les paramètres lorsque le retrait stratégique dépasse la barre latérale, afin de prévenir les pertes continues dans des conditions de marché défavorables.
Optimisation des paramètres périodiquesL’ajout d’une fonction d’optimisation automatique des paramètres, permettant d’ajuster régulièrement les paramètres en fonction des dernières données du marché, permettant ainsi aux stratégies de s’adapter aux changements de caractéristiques du marché.
Ces orientations d’optimisation visent à améliorer la capacité de gestion des risques, l’adaptabilité au marché et la stabilité à long terme de la stratégie, afin qu’elle puisse obtenir une performance relativement stable dans divers environnements de marché.
La stratégie de codage de position dynamique linéaire multi-signaux auto-adaptative offre une méthode de négociation systématique pour le marché de la crypto-monnaie en combinant des signaux d’entrée avec des moyennes mobiles et des indicateurs aléatoires relativement faibles, en combinaison avec un système de commande sécurisée dynamique. Son avantage central réside dans la possibilité d’augmenter automatiquement les positions progressivement lorsque les prix rebondissent, de réduire le coût moyen des positions et de réaliser des bénéfices lorsque les prix rebondissent.
Cependant, la stratégie comporte également des risques évidents, en particulier le manque de mécanismes de stop-loss et la perte de fonds qui peut en résulter dans un contexte de baisse continue. L’investisseur doit être pleinement conscient de ses caractéristiques de risque lorsqu’il utilise cette stratégie, s’assurer d’avoir une réserve de fonds suffisante et envisager d’ajouter des mesures de contrôle des risques supplémentaires.
La stratégie peut devenir un outil puissant pour les investisseurs à long terme dans les crypto-monnaies, en particulier pour ceux qui croient en la valeur à long terme d’un actif crypto particulier mais qui souhaitent optimiser le coût d’entrée. Dans les applications pratiques, il est recommandé de bien tester d’abord dans un environnement simulé et d’ajuster et d’optimiser continuellement les paramètres de la stratégie en fonction de la performance réelle du marché.
/*backtest
start: 2024-08-19 00:00:00
end: 2025-08-18 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"BTC_USDT","balance":5000}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//
//@version=6
strategy(title = 'PEPE- DCA Strategy', overlay = true, pyramiding = 11, process_orders_on_close = true, commission_value = 0.1)
Base_order_size = input.int(1500, 'Base order Size')/close
Safety_order_size = input.int(350, 'Save order')/close
Triger_Type = input.string('Over', 'Entry at Cross Over / Under', options = ['Over', 'Under'], group = 'Deal start condition > Trading View custom signal', inline = '1', tooltip = 'Deal start condition decision')
Short_Moving_Average = input.string('SMA', 'Short Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '2', options = ['SMA', 'EMA', 'HMA'])
Short_Period = input.int(17, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '2')
Long_Moving_Average = input.string('HMA', 'Long Moving Average', group = 'Deal start condition > Trading View custom signal', inline = '3', options = ['SMA', 'EMA', 'HMA'])
Long_Period = input.int(26, 'Period', group = 'Deal start condition > Trading View custom signal', inline = '3')
Target_profit = input.float(1.9, 'Target profit (%)', step = 0.05, group = 'Take profit / Stop Loss', inline = '1') * 0.01
Max_safety_trades_count = input.int(5, 'Max safety trades count', maxval = 10, group = 'Safety orders', inline = '1')
Price_deviation = input.float(2.45, 'Price deviation to open safety orders (% from initial order)', step = 0.01, group = 'Safety orders', inline = '2') * 0.01
Safety_order_volume_scale = input.float(1.85, 'Safety order volume scale', step = 0.01, group = 'Safety orders', inline = '3')
Safety_order_step_scale = input.float(1.61, 'Safety order step scale', step = 0.01, group = 'Safety orders', inline = '3')
// Position status
status_none = strategy.opentrades == 0
status_long = strategy.position_size[1] == 0 and strategy.position_size > 0
/////////// Moving_Averages
Short_Moving_Average_Line = Short_Moving_Average == 'SMA' ? ta.sma(close, Short_Period) : Short_Moving_Average == 'EMA' ? ta.ema(close, Short_Period) : Short_Moving_Average == 'HMA' ? ta.sma(close, Short_Period) : na
Long_Moving_Average_Line = Long_Moving_Average == 'SMA' ? ta.sma(close, Long_Period) : Long_Moving_Average == 'EMA' ? ta.ema(close, Long_Period) : Long_Moving_Average == 'HMA' ? ta.sma(close, Long_Period) : na
///////////// Moving_Averages long condition
Base_order_Condition = Triger_Type == 'Over' ? ta.crossover(Short_Moving_Average_Line, Long_Moving_Average_Line) : ta.crossunder(Short_Moving_Average_Line, Long_Moving_Average_Line) // Buy when close crossing lower band
//////////////////// Savety order deviation
safety_order_deviation(index) =>
Price_deviation * math.pow(Safety_order_step_scale, index - 1)
pd = Price_deviation
ss = Safety_order_step_scale
//////// Cal of deviation steps
step(i) =>
i == 1 ? pd : i == 2 ? pd + pd * ss : i == 3 ? pd + (pd + pd * ss) * ss : i == 4 ? pd + (pd + (pd + pd * ss) * ss) * ss : i == 5 ? pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss : i == 6 ? pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss : i == 7 ? pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss : i == 8 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 9 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : i == 10 ? pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + (pd + pd * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss) * ss : na
long_line(i) =>
close[1] - close[1] * step(i)
////////// Savety order Triger
Safe_order_line(i) =>
i == 0 ? ta.valuewhen(status_long, long_line(0), 0) : i == 1 ? ta.valuewhen(status_long, long_line(1), 0) : i == 2 ? ta.valuewhen(status_long, long_line(2), 0) : i == 3 ? ta.valuewhen(status_long, long_line(3), 0) : i == 4 ? ta.valuewhen(status_long, long_line(4), 0) : i == 5 ? ta.valuewhen(status_long, long_line(5), 0) : i == 6 ? ta.valuewhen(status_long, long_line(6), 0) : i == 7 ? ta.valuewhen(status_long, long_line(7), 0) : i == 8 ? ta.valuewhen(status_long, long_line(8), 0) : i == 9 ? ta.valuewhen(status_long, long_line(9), 0) : i == 10 ? ta.valuewhen(status_long, long_line(10), 0) : na
l1 = Safe_order_line(1)
l2 = Safe_order_line(2)
l3 = Safe_order_line(3)
l4 = Safe_order_line(4)
l5 = Safe_order_line(5)
l6 = Safe_order_line(6)
l7 = Safe_order_line(7)
l8 = Safe_order_line(8)
l9 = Safe_order_line(9)
l10 = Safe_order_line(10)
//// take profit
TP_line = strategy.position_avg_price * (1 + Target_profit)
//Size of safety orders
safety_order_size(i) =>
Safety_order_size * math.pow(Safety_order_volume_scale, i - 1)
///plots
plot(Short_Moving_Average_Line, 'Short MA', color = color.new(color.red, 0), style = plot.style_line)
plot(Long_Moving_Average_Line, 'Long MA', color = color.new(color.green, 0), style = plot.style_line)
plot(strategy.opentrades == 1 ? l1 : na, 'Safety order1',color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 2 ? l2 : na, 'Safety order2', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 3 ? l3 : na, 'Safety order3', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 4 ? l4 : na, 'Safety order4', color =color.red, style = plot.style_linebr)
plot(strategy.opentrades == 5 ? l5 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 6 ? l6 : na, 'Safety order5', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 7 ? l7 : na, 'Safety order6', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 8 ? l8 : na, 'Safety order7', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 9 ? l9 : na, 'Safety order8', color = color.red, style = plot.style_linebr)
plot(strategy.opentrades == 10 ? l10 : na, 'Safety order9', color = color.red, style = plot.style_linebr)
plot(strategy.position_size > 0 ? TP_line : na, 'Take Profit', color = color.green, style = plot.style_linebr)
///////////////SToch-Rsi
smoothK = input.int(1, "ST_RSI -K settings for long", minval=1)
smoothD = input.int(3, "ST_RSI-D settings for long", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(9, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
////////buy cond- ST_RSI
bk = ta.crossover(k,5)
r = ta.rising(Short_Moving_Average_Line,5)
buy = bk and r
//Stradegy mod
if Base_order_Condition or buy
if (Base_order_Condition or buy ) and strategy.opentrades == 0
strategy.entry('Base order', strategy.long, qty = Base_order_size )
for i = 1 to Max_safety_trades_count by 1
i_s = str.tostring(i)
if strategy.opentrades <= i and strategy.position_size > 0 and not(strategy.position_size == 0)
strategy.entry('Safety order' + i_s, strategy.long, qty = safety_order_size(i) , limit = Safe_order_line(i))
for i = 1 to Max_safety_trades_count by 1
i_s = str.tostring(i)
if status_none
strategy.cancel('Safety order' + i_s)
strategy.exit('TP/SL', 'Base order', limit = TP_line)
strategy.exit('TP/SL', 'Safety order' + i_s, limit = TP_line)
//