Cette stratégie est basée sur le modèle de drapeau taureau. Elle achète lorsque le prix dépasse le plus haut de la plage de drapeau, fixe le stop loss au plus bas de la plage de drapeau et fixe l'objectif de profit en fonction du rapport risque-rendement. La stratégie utilise les fonctions de prix les plus élevées et les plus basses pour identifier la plage de drapeau et détermine la rupture en comparant le prix de clôture actuel avec le prix le plus élevé de la bougie précédente.
Cette stratégie est une stratégie de rupture basée sur le modèle classique de drapeau taureau, qui capture les opportunités de poursuite de la tendance en identifiant la plage de drapeau et les ruptures de prix. Les avantages de la stratégie sont une logique claire et un risque contrôlable, mais elle fait face à certains risques sur les marchés volatils ou les renversements de tendance. Des améliorations peuvent être apportées en termes d'optimisation des signaux, des paramètres dynamiques, de la gestion de position, etc., pour améliorer la robustesse et la rentabilité de la stratégie.
/*backtest start: 2023-05-22 00:00:00 end: 2024-05-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bull Flag Breakout", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Параметры стратегии riskRewardRatio = 3.0 flagLength = input.int(5, title="Flag Length") stopLossBuffer = input.float(0.01, title="Stop Loss Buffer", step=0.001) // Функция для вычисления стоп-лосса и тейк-профита calcRiskRewardPrice(entryPrice, stopLossPrice, riskRewardRatio) => takeProfitPrice = entryPrice + (entryPrice - stopLossPrice) * riskRewardRatio [stopLossPrice, takeProfitPrice] // Найти минимум и максимум флага flagLow = ta.lowest(low, flagLength) flagHigh = ta.highest(high, flagLength) // Условия для формирования бычьего флага isBullFlag = high[1] < flagHigh and close > high[1] // Условия для входа в сделку if (isBullFlag) entryPrice = close stopLossPrice = flagLow - stopLossBuffer [calculatedStopLoss, calculatedTakeProfit] = calcRiskRewardPrice(entryPrice, stopLossPrice, riskRewardRatio) // Открыть длинную позицию strategy.entry("Bull Flag Long", strategy.long) strategy.exit("Take Profit", "Bull Flag Long", limit=calculatedTakeProfit) strategy.exit("Stop Loss", "Bull Flag Long", stop=calculatedStopLoss) label.new(bar_index, high, "Buy", color=color.green, textcolor=color.white, style=label.style_label_down)