
Cette stratégie est un système de négociation unidirectionnel basé sur un diagramme de blocs Renko, combiné à un mécanisme de filtrage temporel, conçu pour des périodes de négociation spécifiques. La stratégie utilise l’ATR (la moyenne de l’amplitude de fluctuation réelle) pour ajuster dynamiquement la taille des blocs, identifier les tendances à la hausse en suivant les mouvements de prix des blocs formés et effectuer des transactions à plusieurs têtes uniquement pendant les périodes de négociation spécifiées.
La stratégie fonctionne selon les principes clés suivants:
Le mécanisme de construction des blocsLe système détermine la taille des blocs de deux manières - par des valeurs fixes ou par des ajustements dynamiques basés sur l’ATR. Dans le mode ATR, la taille des blocs est égale à la valeur ATR d’une période donnée (défaut 5) multipliée par le multiple (défaut 1.0), ce qui permet à la taille des blocs de s’adapter à la volatilité du marché.
Logique de détermination de la directionStratégie de suivi des fluctuations de prix: des fluctuations de prix plus élevées que la taille du bloc forment des fluctuations de hausse; des fluctuations de prix plus élevées que la taille du bloc forment des fluctuations de baisse; des fluctuations de prix plus élevées que deux fois la taille du bloc forment des fluctuations de tendance.
Signal de transaction généré: génère un signal d’achat lorsque la direction du bloc n’est jamais définie ou lorsque la baisse est convertie en hausse; génère un signal de vente lorsque la direction du bloc n’est jamais définie ou lorsque la hausse est convertie en baisse.
Filtreur de tempsStratégie: Exécutez des transactions uniquement pendant la période de négociation spécifiée (de 04:35 à 14:30 par défaut), qui correspond généralement aux périodes actives des principaux marchés. En dehors de la période de négociation, le système nettoie automatiquement la position pour éviter le risque d’une nuit.
Modèle de transaction unidirectionnelleStratégie: exécuter uniquement des transactions à plusieurs titres, sans opérations de courtage, adaptée à un environnement de marché où la tendance haussière est évidente ou interdite.
Selon l’analyse du code, cette stratégie présente les avantages suivants:
Filtrage du bruitLes diagrammes de blocs ont la capacité naturelle de filtrer le bruit du marché et de former de nouveaux blocs uniquement lorsque les variations de prix dépassent un seuil spécifique, ce qui évite une réaction excessive à de petites fluctuations de prix.
Adaptation à la régulationLa stratégie permet d’ajuster la taille des blocs de manière dynamique en fonction de l’environnement et de la volatilité du marché, en augmentant la taille des blocs pendant les périodes de forte volatilité et en réduisant la taille des blocs pendant les périodes de faible volatilité.
Gestion du temps et des risquesLes filtres de temps assurent que les transactions se déroulent uniquement pendant les périodes les plus actives et les plus fluides du marché, évitant les périodes où il peut y avoir un manque de liquidité ou des fluctuations anormales, telles que la nuit et le matin.
La direction est claire.La stratégie est axée sur la capture de tendances à la hausse, la logique est concise et claire, et évite les transactions fréquentes et les frais de traitement induits par les échanges à vide.
Aide visuelleLes stratégies offrent des options de visualisation des balises des signaux d’achat et de vente et des points hauts et bas des blocs, permettant aux traders de comprendre de manière intuitive la dynamique du marché et la performance des stratégies.
Gestion des fondsLa stratégie utilise un modèle de trading quantifié de fonds qui permet de calculer automatiquement la taille de la position en fonction du capital initial, ce qui réduit la complexité de la gestion des fonds.
Malgré la bonne conception de la stratégie, les risques potentiels sont les suivants:
Réaction retardéeLes blocs sont essentiellement des indicateurs de retard. La formation de nouveaux blocs nécessite que les prix atteignent une certaine amplitude de mouvement, ce qui peut entraîner un retard relatif dans les temps d’entrée et de sortie, et peut manquer les meilleurs points de négociation dans un marché à basse vitesse.
Manque de souplesse dans les lignes courtesLa stratégie ne génère des signaux que lorsque de nouveaux blocs se forment et peut manquer des opportunités de profit à court terme, en particulier en cas de mauvais rendement dans un marché volatile.
Restrictions unidirectionnellesLes stratégies à long terme sont moins efficaces lorsque le marché est à la baisse pendant une longue période.
Le risque du filtrage temporel: Le réglage des heures de négociation fixes peut laisser passer des opportunités importantes pendant les heures non de négociation, et des opérations de clôture et de réentrée inutiles peuvent survenir à la frontière des heures de négociation.
Paramètre SensibilitéLa performance de la stratégie dépend fortement des paramètres de taille du bloc, et une mauvaise sélection de paramètres peut entraîner des transactions excessives ou des opportunités manquées.
Solution:
Selon l’analyse du code, la stratégie peut être optimisée dans les domaines suivants:
Fusion de plusieurs indicateurs: Combinaison avec d’autres indicateurs techniques tels que le RSI, le MACD ou la croisée des moyennes mobiles comme signal de confirmation, pour améliorer la qualité d’entrée. Cela permet d’éviter les faux signaux résultant d’une simple dépendance à la forme des prix, en particulier dans les marchés volatiles.
Système d’arrêt dynamique: l’introduction de fonctionnalités de suivi des arrêts, telles que l’arrêt dynamique basé sur l’ATR, pour protéger les bénéfices déjà réalisés tout en conservant l’espace au-dessus de la barre. Ceci est particulièrement important pour capturer les grandes tendances.
Expansion des échanges bilatérauxL’ajout de fonctionnalités de trading à vide permet aux stratégies de profiter de la même manière dans les marchés en baisse et améliore la résilience des stratégies tout au long de l’année.
Filtrage du temps: mise à niveau du filtrage à temps fixe vers un filtrage à temps dynamique basé sur l’activité du marché, par exemple en combinant l’analyse de la transaction, en négociant activement pendant les périodes de forte liquidité et en opérant de manière conservatrice pendant les périodes de faible liquidité.
Analyse à cycles multiplesIntroduction d’analyses multi-temporelles, par exemple en utilisant la direction de la tendance dans un cadre temporel de niveau plus élevé comme condition de filtrage des transactions, et en effectuant des transactions uniquement lorsque la direction de la tendance est cohérente avec la plus grande.
Paramètres d’optimisation adaptésDéveloppement d’un mécanisme d’adaptation des paramètres pour adapter les cycles et les multiples de l’ATR en fonction de la dynamique des conditions du marché afin de mieux adapter la stratégie aux différents environnements du marché.
Contrôle de l’exposition: augmentation des algorithmes de gestion des positions, ajustement dynamique de la taille des transactions en fonction de la volatilité du marché et de l’intensité des signaux, contrôle de l’exposition au risque.
Ces orientations d’optimisation visent à améliorer la robustesse et l’adaptabilité des stratégies, à réduire les pertes dans des conditions de marché défavorables et à maximiser la rentabilité dans des conditions de marché favorables.
La stratégie de suivi des tendances est un système de suivi des tendances qui combine la dynamique des prix et le filtrage temporel. Grâce à la construction du mécanisme du graphique en blocs, la stratégie est capable de filtrer efficacement le bruit du marché et de se concentrer sur la capture des variations de prix continues. Grâce au filtre temporel, la stratégie évite les périodes de marché inactives et réduit le risque de détention de positions pendant la nuit.
Les principaux avantages de la stratégie résident dans sa logique de négociation claire et concise, sa conception de taille de bloc adaptative et sa gestion stricte du temps, ce qui la rend particulièrement adaptée aux marchés plus volatiles mais globalement à la hausse. Cependant, ses caractéristiques de négociation unidirectionnelle et sa réaction de retard sont également des limites à prendre en compte.
La stratégie devrait améliorer encore sa performance dans différents environnements de marché en introduisant des mesures d’optimisation telles que la confirmation multi-indicateurs, le stop loss dynamique, la capacité de négociation bidirectionnelle et le filtrage de temps intelligent. C’est un cadre stratégique à considérer pour les investisseurs qui recherchent des transactions solides et qui sont prêts à sacrifier une partie de leur flexibilité en échange d’un signal de négociation plus clair.
/*backtest
start: 2025-06-22 00:00:00
end: 2025-07-22 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":200000}]
args: [["RunMode",1,358374]]
*/
//@version=5
strategy("Renko Long-Only Strategy with Time Filter", overlay=true, default_qty_value = 10)
// --- 输入参数 ---
atrLength = input.int(5, "ATR Period", minval=1)//ATR周期
atrMult = input.float(1.0, "ATR Multiplier", minval=0.1, step=0.1)//ATR乘数
showWicks = input(false, "Show Wick Lines")//是否显示上下影线
showLabels = input(true, "Show Buy/Sell Labels")//是否显示买卖标签
// --- 交易时间设置(24小时制,从4:30 AM到2:30 PM)---
startHour = input.int(4, "Start Hour (24h)", minval=0, maxval=23)//开始交易小时
startMinute = input.int(30, "Start Minute", minval=0, maxval=59)//开始交易分钟
endHour = input.int(14, "End Hour (24h)", minval=0, maxval=23)//结束交易小时
endMinute = input.int(25, "End Minute", minval=0, maxval=59)//结束交易分钟
// --- 时间计算 ---
//检查当前是否在交易时间范围内
isTradingTime() =>
timeHour = hour(time("1"))//获取当前小时
timeMinute = minute(time("1"))//获取当前分钟
// 将时间转换为自午夜起的分钟数进行比较
currentTime = timeHour * 60 + timeMinute//当前时间(分钟)
sessionStart = startHour * 60 + startMinute//交易开始时间(分钟)
sessionEnd = endHour * 60 + endMinute//交易结束时间(分钟)
currentTime >= sessionStart and currentTime <= sessionEnd//判断是否在交易时间范围内
inTradingHours = isTradingTime()//当前是否在交易时间内
timeToClose = not inTradingHours and inTradingHours[1]//刚刚退出交易时间,需要平仓
// --- 砖块计算 ---
var float boxSize = na//砖块大小
var float lastClose = na//最后一个砖块的收盘价
var int direction = 0//方向:0=未定义,1=上涨,-1=下跌
var float wickHigh = na//上影线最高点
var float wickLow = na//下影线最低点
var bool newBrick = false//是否形成新砖块
var int prevDir = 0//前一个方向
// --- 全局信号变量 ---
var bool buySignal = false//买入信号
var bool sellSignal = false//卖出信号
// 更新基于ATR的砖块大小
boxSize :=ta.atr(atrLength) * atrMult//计算砖块大小
// 检测砖块形成条件
upMove = not na(lastClose) and (close - lastClose >= boxSize)//上涨移动
downMove = not na(lastClose) and (lastClose - close >= boxSize)//下跌移动
//反转条件:当前为上升趋势但下跌超过2倍砖块大小,或当前为下降趋势但上涨超过2倍砖块大小
reversal = (direction == 1 and downMove and (lastClose - close >= boxSize * 2)) or
(direction == -1 and upMove and (close - lastClose >= boxSize * 2))
// 生成新砖块
if na(lastClose)//初始化
lastClose := close//设置初始收盘价
wickHigh := high//设置初始最高价
wickLow := low//设置初始最低价
else if upMove and direction >= 0//继续上升趋势
lastClose := lastClose + boxSize//更新收盘价
prevDir := direction//保存前一个方向
direction := 1//设置当前方向为上升
wickHigh := high//更新上影线
wickLow := low//更新下影线
newBrick := true//标记形成新砖块
else if downMove and direction <= 0//继续下降趋势
lastClose := lastClose - boxSize//更新收盘价
prevDir := direction//保存前一个方向
direction := -1//设置当前方向为下降
wickHigh := high//更新上影线
wickLow := low//更新下影线
newBrick := true//标记形成新砖块
else if reversal//趋势反转
lastClose := direction == 1 ? lastClose - boxSize : lastClose + boxSize//根据当前方向反向更新收盘价
prevDir := direction//保存前一个方向
direction := direction * -1//反转方向
wickHigh := high//更新上影线
wickLow := low//更新下影线
newBrick := true//标记形成新砖块
else//没有新砖块形成
wickHigh := math.max(wickHigh, high)//更新上影线最高点
wickLow := math.min(wickLow, low)//更新下影线最低点
newBrick := false//标记没有形成新砖块
// 更新信号(必须在全局范围内)
buySignal := direction == 1 and prevDir != 1//方向从非上升变为上升时产生买入信号
sellSignal := direction == -1 and prevDir != -1//方向从非下降变为下降时产生卖出信号
// --- 策略逻辑 ---
// 只在形成新砖块、K线确认且在交易时间内进入
enterLong = buySignal and newBrick and barstate.isconfirmed and inTradingHours//买入条件
exitLong = (sellSignal and newBrick and barstate.isconfirmed) or timeToClose//卖出条件
// 执行交易
if (enterLong)
strategy.entry("Long", strategy.long)//开仓做多
if (exitLong)
strategy.close("Long")//平仓
// --- 绘图 ---
color brickColor = direction == 1 ? color.green : direction == -1 ? color.red : color.gray//根据方向设置砖块颜色
plot(lastClose, "Renko Close", brickColor, 2, plot.style_linebr)//绘制Renko收盘价
// 如果启用,绘制影线
plot(showWicks ? wickHigh : na, "High", color.new(brickColor, 70), 1, plot.style_circles)//绘制上影线
plot(showWicks ? wickLow : na, "Low", color.new(brickColor, 70), 1, plot.style_circles)//绘制下影线
// 绘制交易时间背景
bgcolor(inTradingHours ? color.new(color.blue, 90) : na)//在交易时间内显示浅蓝色背景