
La stratégie SuperTrend est un système de trading quantitatif basé sur l’adaptation de la volatilité au fil du temps, qui repose sur l’indicateur SuperTrend comme outil de suivi dynamique des arrêts. La stratégie capture les tendances du marché en identifiant le moment où les prix franchissent la ligne de référence SuperTrend et combine plusieurs mécanismes de filtrage, y compris le filtre Moscow Time (MSK), le filtrage des niveaux de prix et la fonctionnalité de blocage au pourcentage fixe.
Le fonctionnement central de la stratégie repose sur les mécanismes clés suivants:
Calcul de l’indicateur de SuperTrend: la stratégie utilise l’indicateur ATR (la période par défaut est de 23) et le facteur de multiplication (le facteur par défaut est de 1.8) pour calculer la ligne de SuperTrend, qui s’ajuste automatiquement en fonction de la volatilité du marché, formant un support et une résistance dynamiques.
Signal de transaction généré:
Sélection du mode de transactionLa stratégie offre trois modes de transaction:
Système de filtration multiple:
Système d’arrêt dynamique: La stratégie implémente un stop-loss à pourcentage fixe basé sur le prix d’entrée (défaut de 1,5%), une fois que le prix atteint le niveau de stop-loss, la stratégie se calme automatiquement et bloque les bénéfices. Le niveau de stop-loss peut être affiché intuitivement sur le graphique et l’utilisateur peut activer ou désactiver cette fonctionnalité visuelle selon ses besoins.
L’analyse approfondie de ce code m’a permis de résumer les avantages notables suivants:
Adaptabilité à la volatilitéL’indicateur SuperTrend est basé sur le calcul de l’ATR et permet d’ajuster automatiquement la distance de suivi en fonction des conditions de volatilité du marché, d’augmenter la distance de protection dans les marchés à forte volatilité et de suivre plus étroitement les prix dans les marchés à faible volatilité, ce qui améliore la capacité d’adaptation de la stratégie à différents environnements de marché.
Contrôle des risques multiplesLa stratégie intègre trois niveaux de gestion des risques: filtrage temporel, filtrage des prix et paramétrage de l’arrêt, ce mécanisme de contrôle des risques multidimensionnel améliore considérablement la sécurité des transactions.
Une orientation flexible des échangesLes stratégies peuvent être adaptées aux différentes préférences du marché et aux contraintes de négociation.
Optimisation du tempsLe filtre unique de l’heure de Moscou permet de négocier à des périodes spécifiques, aide à éviter les périodes d’inefficacité du marché et capture des fenêtres de négociation efficaces de manière ciblée, particulièrement adaptée aux traders qui doivent tenir compte des heures de négociation internationales.
Les avantages de la visualisation: offre une référence visuelle intuitive à la transaction, réduisant la complexité de l’analyse, grâce à des changements de couleur de fond, des couleurs de ligne SuperTrend et des marqueurs de niveau d’arrêt.
Optimisation de la conception des commissionsLe taux de commission intégrée à la stratégie est de 0,06% pour rendre les résultats de la rétroanalyse plus proches de l’environnement réel des transactions.
Mécanisme de mise en œuvre des prix de clôture: stratégie d’exécution des ordres à l’arrêt de cours ((process_orders_on_close=true), réduit l’impact des points de glissement et améliore la fiabilité du suivi.
Malgré la bonne conception de cette stratégie, les risques potentiels sont les suivants:
Un retour en arrière retardéL’indicateur SuperTrend est essentiellement un indicateur en retard, qui peut générer un signal de retard lors d’une reprise brutale du marché, ce qui entraîne une entrée ou une sortie tardive, augmentant le risque de retrait. La solution consiste à ajuster le cycle ATR et le facteur de multiplication pour équilibrer la sensibilité et la stabilité.
Limitation de l’arrêt fixeIl est recommandé d’ajuster le pourcentage de stop-loss en fonction de la dynamique volatile du marché ou d’optimiser la stratégie de stop-loss en combinaison avec d’autres indicateurs techniques.
Paramètre SensibilitéLa performance de la stratégie est fortement dépendante de la configuration des paramètres (cycle d’ATR, facteur de multiplication, pourcentage d’arrêt, etc.), les paramètres inappropriés peuvent entraîner des transactions excessives ou des signaux erronés. La recherche de la combinaison optimale de paramètres doit être effectuée à l’aide de la récupération des données historiques.
Les filtres sont trop limitésIl est recommandé d’ajuster les conditions de filtrage en fonction de la variété de transactions réelles et des caractéristiques du marché.
Les conditions du marché dépendent: Cette stratégie fonctionne bien dans les marchés où la tendance est évidente, mais peut produire de faux signaux fréquemment dans les marchés en turbulence. Un mécanisme d’identification de l’état du marché peut être envisagé, la stratégie est activée uniquement dans les marchés tendance.
Manque de mécanisme de prévention: Bien que SuperTrend puisse servir de référence de stop loss dynamique, les conditions de stop loss ne sont pas explicitement définies dans le code et il est possible de faire face à des pertes plus importantes dans des conditions de marché extrêmes. Il est recommandé d’ajouter un mécanisme de stop loss rigide.
Sur la base de l’analyse du code, je suggère les optimisations suivantes:
Les paramètres dynamiques s’adaptentIl est possible d’écrire des fonctions qui ajustent automatiquement les périodes et les facteurs ATR et multiplicatifs de SuperTrend en fonction de l’état du marché (volatilité, volume de transactions, etc.), ce qui améliore l’adaptabilité de la stratégie. L’avantage de ce type de fonction est de pouvoir trouver automatiquement la combinaison de paramètres optimale à différents stades du marché.
Confirmation de plusieurs périodes: l’introduction d’un mécanisme de confirmation à plusieurs périodes de temps, permettant d’exécuter des transactions uniquement lorsque les périodes de temps plus importantes et la direction de la SuperTrend de la période de temps actuelle sont alignées, ce qui réduit le nombre de faux signaux.
Système d’arrêt intelligent: modification de l’arrêt à pourcentage fixe en arrêt dynamique ou arrêt à intervalles basé sur l’ATR (certaines positions sont rentables à des objectifs inférieurs, d’autres recherchent des gains plus importants), optimisation des stratégies de gestion de fonds.
Identifier l’état du marchéAugmentation de l’indicateur de la force de la tendance (comme l’ADX) ou de l’indicateur de volatilité, exécutant les transactions uniquement lorsque le marché répond à des conditions spécifiques et évitant les transactions dans des conditions de marché inefficaces.
Amélioration de la gestion des risques: ajouter des limites de risque par transaction et des logiques de gestion des risques de compte pour s’assurer que les risques individuels et globaux sont maîtrisés.
Fusion de plusieurs indicateurs: en combinaison avec d’autres indicateurs techniques (comme le MACD, le RSI ou les bandes de Brin) comme confirmation auxiliaire, les transactions ne sont exécutées que lorsque plusieurs indicateurs résonnent, ce qui améliore la fiabilité du signal.
Le volume des transactions s’adapte à la logiqueAjuster la taille des transactions en fonction de la liquidité et de la dynamique de la volatilité du marché, réduire les positions en cas de forte volatilité et augmenter les positions en cas de tendance stable.
Élargissement de la période d’observation: effectuer un large retour d’expérience dans différents cycles et conditions de marché, afin d’assurer la stabilité de la stratégie dans différents environnements de marché.
La stratégie de stop-loss dynamique et de filtrage temporel de SuperTrend est un système de trading quantitatif intégré combinant l’analyse technique et la gestion des risques. Elle capture les tendances à travers les indicateurs de SuperTrend et améliore la qualité du signal en utilisant plusieurs mécanismes de filtrage. Les principaux avantages de la stratégie résident dans son auto-adaptation au taux d’oscillation et son contrôle des risques à plusieurs niveaux, tandis que les risques potentiels proviennent principalement de la retardation des indicateurs et de la sensibilité des paramètres.
En mettant en œuvre des mesures d’optimisation recommandées, telles que l’ajustement dynamique des paramètres, la confirmation des cycles de temps multiples et le système d’arrêt intelligent, la stratégie peut encore améliorer son adaptabilité et sa rentabilité. Plus important encore, les traders doivent comprendre les principes de conception et les limites de cette stratégie, combiner leurs propres préférences en matière de risque et la perception du marché, et personnaliser les paramètres pour obtenir des résultats de trading optimaux.
Dans l’ensemble, il s’agit d’une stratégie de négociation structurée et logiquement rigoureuse, dotée d’une grande valeur pratique et d’un potentiel de personnalisation, adaptée aux investisseurs quantifiés ayant une certaine expérience de la négociation.
/*backtest
start: 2024-03-26 00:00:00
end: 2024-07-11 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Supertrend Fixed TP Unified with Time Filter (MSK)", overlay=true,
default_qty_value=0.01,
commission_type=strategy.commission.percent,
commission_value=0.06,
pyramiding=0,
process_orders_on_close=true)
// Настройки индикатора
atrPeriod = input(23, "ATR Length")
factor = input.float(1.8, "Factor", step=0.1, minval=0.1)
tradeMode = input.string("Both", "Trade Mode", options=["Long Only", "Short Only", "Both"])
// Общий параметр тейк-профита
takeProfitPercent = input.float(1.5, "Take Profit (%)", minval=0.01)
showTP = input.bool(true, "▲▼ Показывать ТП") // Добавлен переключатель
// Фильтр цены
price_param = input.float(10000.0, "Цена фильтра", step=1.0)
use_price_filter = input.bool(false, "Использовать фильтр цены")
// Фильтр по времени (Московское время)
useTimeFilter = input.bool(true, "▲▼ Использовать фильтр по времени") // Переключатель фильтра времени
timeFrom = input.int(0, "Время С (часы MSK)", minval=0, maxval=23, step=1)
timeTo = input.int(23, "Время ДО (часы MSK)", minval=0, maxval=23, step=1)
// Функция проверки времени (с учетом Московского времени UTC+3)
isTimeInRange() =>
if not useTimeFilter
true // Фильтр отключен
else
// Переводим время сервера (UTC) в Московское время (UTC+3)
mskHour = (hour(time) + 3) % 24 // Добавляем 3 часа для MSK
if timeFrom <= timeTo
mskHour >= timeFrom and mskHour < timeTo // До timeTo (не включая timeTo)
else
mskHour >= timeFrom or mskHour < timeTo // До timeTo (не включая timeTo)
// Расчет Supertrend
[supertrend, dir] = ta.supertrend(factor, atrPeriod)
// Визуализация Supertrend
plot(supertrend, "Supertrend",
color = dir < 0 ? color.green : color.red,
linewidth = 2,
style = plot.style_linebr)
bgcolor(dir < 0 ? color.new(color.green, 90) : color.new(color.red, 90))
// Сигналы входа с фильтром по времени
longEntry = (dir < 0 and dir[1] > 0) and (use_price_filter ? close > price_param : true) and isTimeInRange()
shortEntry = (dir > 0 and dir[1] < 0) and (use_price_filter ? close < price_param : true) and isTimeInRange()
// Логика стратегии
if tradeMode == "Both"
if longEntry
strategy.close("Short", comment="Close Short")
strategy.entry("Long", strategy.long)
if shortEntry
strategy.close("Long", comment="Close Long")
strategy.entry("Short", strategy.short)
else if tradeMode == "Long Only"
if longEntry
strategy.entry("Long", strategy.long)
if shortEntry
strategy.close("Long", comment="Close Long")
else if tradeMode == "Short Only"
if shortEntry
strategy.entry("Short", strategy.short)
if longEntry
strategy.close("Short", comment="Close Short")
// Управление тейк-профитом
var color tpColor = na
var float tpLevel = na
var label tpLabel = na
// Сброс при закрытии позиции
if strategy.position_size == 0 and strategy.position_size[1] != 0
tpLevel := na
tpColor := na
label.delete(tpLabel)
tpLabel := na
// Обновление ТП при открытии позиции
if strategy.position_size > 0
entryPrice = strategy.opentrades.entry_price(0)
tpLevel := entryPrice * (1 + takeProfitPercent/100)
tpColor := color.green
// Закрытие лонга по TP на закрытии бара
if close >= tpLevel
strategy.close("Long", comment="TP Long")
// Обновление метки
if showTP
label.delete(tpLabel)
tpLabel := label.new(
bar_index, tpLevel,
text = str.tostring(tpLevel, "#.##"),
color = color.green,
textcolor = color.white,
style = label.style_label_down,
yloc = yloc.price)
if strategy.position_size < 0
entryPrice = strategy.opentrades.entry_price(0)
tpLevel := entryPrice * (1 - takeProfitPercent/100)
tpColor := color.red
// Закрытие шорта по TP на закрытии бара
if close <= tpLevel
strategy.close("Short", comment="TP Short")
// Обновление метки
if showTP
label.delete(tpLabel)
tpLabel := label.new(
bar_index, tpLevel,
text = str.tostring(tpLevel, "#.##"),
color = color.red,
textcolor = color.white,
style = label.style_label_up,
yloc = yloc.price)
// Визуализация ТП
plot(showTP ? tpLevel : na, "Take Profit",
color = tpColor,
linewidth = 1,
style = plot.style_circles)
// Обновление позиции метки
if showTP and not na(tpLevel)
label.set_xy(tpLabel, bar_index, tpLevel)