アダプティブ・マルチタイムフレームフィボナッチリトレースメント・トレーディング・ストラテジー (Adaptive Multi Timeframe Fibonacci Retracement Trading Strategy) は,アダプティブ・ムービング・平均値,ストカスティック・RSI,フィボナッチリトレースメントゾーンを含むトレンドフォロー戦略である.この戦略は,ポジションのサイズを動的に調整するために,さまざまな指標で異なるタイムフレームの市場動きを分析する.この戦略は,トレンドが形成されるときにポジションを確立するために潜在的なプルバックゾーンを正確に特定することができる.また,リスクを制御するためにストップ・ロスを設定する.
アダプティブ・マルチ・タイムフレーム・フィボナッチ・リトレースメント・トレーディング・ストラテジーは,以下の技術的ツールとメカニズムを使用します.
アダプティブ・ムービング・アベア (SMAとWMA): 異なる期間の (分,時間,日など) 価格の適応型移動平均を計算する.適応型移動平均の傾斜に基づいてトレンド方向を決定する.
ストカスティックRSI: RSIのストカスティック値を計算して,RSIが過買いか過売れているかどうかを判断する.RSI曲線の形を使ってモメントとトレンドを分析する.
フィボナッチリトレースゾーン:最近のスイングハイとスイングローを使用してフィボナッチリトレースゾーンをプロットする.これらのゾーン内のエントリーと出口点を設定し,潜在的なトレンド逆転または引き下げをマークする傾向があります.
ポジションサイズ:ストック・RSIの信号強度と適応動向平均値に基づいてポジションサイズを動的に調整する.
戦略はまずトレンド方向を決定する.価格がフィボナッチゾーンに入ると,潜在的なエントリーポイントがゾーン近くにマークされる.適応型移動平均値とストックRSIが潜在的なポイントの周りにエントリー信号を発行するときに取引が実行される.ストップロスはリスクを制御するためにFibゾーンの外に設定される.
アダプティブ・マルチ・タイムフレーム・フィボナッチ・リトレースメント・トレーディング・ストラテジーは以下の強みがあります.
マルチタイムフレーム分析:より包括的なトレンド判断のために,複数のタイムフレームレベル (分,時間,日など) を同時に評価します.
ダイナミック・ポジション・サイジング: 市場の状況に応じてポジション・サイジングをダイナミックに調整し,リスクをより良くコントロールする.
正確なプルバックターゲティング:フィボナッチゾーンは,トレンド中に短期的な逆転を捉えるために使用できます.
ストップ・ロスはリトラセーションゾーンで ストップ・ロスは大きな損失を 効果的に防ぐことができます
シグナルフィルタリング: 偽のブレイクを避けるために,マークされたエントリーポイントの周りの取引にのみ入ります.
高い最適化可能性:市場ごとに戦略パフォーマンスを最適化するために調整できる複数の調整可能な入力パラメータ.
この戦略に関連した主なリスクは以下のとおりです.
不正ゾーンリスク: ゾーンまたは不正ゾーンに到達できない場合,入場を逃す可能性があります. ゾーン範囲を拡大したり,より多くのゾーンを追加することによって軽減できます.
ストップ損失追跡リスク: 静的ストップ損失は早急にヒットする可能性があります. 後ろのストップ損失,ゾーンストップ損失などを見ることができます.
誤った信号リスク:適応型移動平均値とストックRSIは時々誤った信号を与え,不必要な取引を引き起こす可能性があります.誤った信号率を減らすためにシグナルをフィルタリングすることができます.
高複雑性リスク:複数のパラメータと指標の組み合わせにより戦略の複雑性が高まり,最適化とテストが難しくなります.
この戦略は,次の方法でさらに最適化できます.
安定性を評価するためにより多くの株式や外為商品をテストします 市場ごとに細かなパラメータを調整します
信号フィルタリングメカニズムを追加して 偽信号率を下げ,信号対ノイズ比率を高めます
異なるタイプの移動平均値のパラメータをテストし比較する.
固定ストップ損失を後続ストップ損失またはゾーンストップ損失に置き換える改善を評価する.
長期的に利益を得るために 突破信号やトレンド追跡メカニズムを試す
アダプティブマルチタイムフレームフィボナッチリトレースメント・トレーディング戦略は,トレンド条件を特定し,リトレースメント中にポジションを展開するために様々な分析ツールを使用する.厳格なリスク制御メカニズムとストップロスは,主要なトレンド内で利益を最適化するのに役立ちます.十分な調整可能なパラメータと最適化機会により,この戦略のさらなる改良により,安定かつ信頼性の高い取引システムに形作られるでしょう.
/*backtest start: 2023-12-17 00:00:00 end: 2023-12-24 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/ // © imal_max //@version=5 strategy(title="Auto Fib Golden Pocket Band - Autofib Moving Average", shorttitle="Auto Fib Golden Pocket Band", overlay=true, pyramiding=15, process_orders_on_close=true, calc_on_every_tick=true, initial_capital=10000, currency = currency.USD, default_qty_value=100, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.05, slippage=2) //indicator("Auto Fib Golden Pocket Band - Autofib Moving Average", overlay=true, shorttitle="Auto Fib Golden Pocket Band", timeframe""") // Fibs // auto fib ranges // fib band Strong Trend enable_StrongBand_Bull = input.bool(title='enable Upper Bullish Band . . . Fib Level', defval=true, group='══════ Strong Trend Levels ══════', inline="0") select_StrongBand_Fib_Bull = input.float(0.236, title=" ", options=[-0.272, 0, 0.236, 0.382, 0.5, 0.618, 0.702, 0.71, 0.786, 0.83, 0.886, 1, 1.272], group='══════ Strong Trend Levels ══════', inline="0") enable_StrongBand_Bear = input.bool(title='enable Lower Bearish Band . . . Fib Level', defval=false, group='══════ Strong Trend Levels ══════', inline="1") select_StrongBand_Fib_Bear = input.float(0.382, '', options=[-0.272, 0, 0.236, 0.382, 0.5, 0.618, 0.702, 0.71, 0.786, 0.83, 0.886, 1, 1.272], group='══════ Strong Trend Levels ══════', inline="1") StrongBand_Lookback = input.int(title='Pivot Look Back', minval=1, defval=400, group='══════ Strong Trend Levels ══════', inline="2") StrongBand_EmaLen = input.int(title='Fib EMA Length', minval=1, defval=120, group='══════ Strong Trend Levels ══════', inline="2") // fib middle Band regular Trend enable_MiddleBand_Bull = input.bool(title='enable Middle Bullish Band . . . Fib Level', defval=true, group='══════ Regular Trend Levels ══════', inline="0") select_MiddleBand_Fib_Bull = input.float(0.618, '', options=[-0.272, 0, 0.236, 0.382, 0.5, 0.6, 0.618, 0.702, 0.71, 0.786, 0.83, 0.886, 1, 1.272], group='══════ Regular Trend Levels ══════', inline="0") enable_MiddleBand_Bear = input.bool(title='enable Middle Bearish Band . . . Fib Level', defval=true, group='══════ Regular Trend Levels ══════', inline="1") select_MiddleBand_Fib_Bear = input.float(0.382, '', options=[-0.272, 0, 0.236, 0.382, 0.5, 0.618, 0.702, 0.71, 0.786, 0.83, 0.886, 1, 1.272], group='══════ Regular Trend Levels ══════', inline="1") MiddleBand_Lookback = input.int(title='Pivot Look Back', minval=1, defval=900, group='══════ Regular Trend Levels ══════', inline="2") MiddleBand_EmaLen = input.int(title='Fib EMA Length', minval=1, defval=400, group='══════ Regular Trend Levels ══════', inline="2") // fib Sideways Band enable_SidewaysBand_Bull = input.bool(title='enable Lower Bullish Band . . . Fib Level', defval=true, group='══════ Sideways Trend Levels ══════', inline="0") select_SidewaysBand_Fib_Bull = input.float(0.6, '', options=[-0.272, 0, 0.236, 0.382, 0.5, 0.6, 0.618, 0.702, 0.71, 0.786, 0.83, 0.886, 1, 1.272], group='══════ Sideways Trend Levels ══════', inline="0") enable_SidewaysBand_Bear = input.bool(title='enable Upper Bearish Band . . . Fib Level', defval=true, group='══════ Sideways Trend Levels ══════', inline="1") select_SidewaysBand_Fib_Bear = input.float(0.5, '', options=[-0.272, 0, 0.236, 0.382, 0.5, 0.618, 0.702, 0.71, 0.786, 0.83, 0.886, 1, 1.272], group='══════ Sideways Trend Levels ══════', inline="1") SidewaysBand_Lookback = input.int(title='Pivot Look Back', minval=1, defval=4000, group='══════ Sideways Trend Levels ══════', inline="2") SidewaysBand_EmaLen = input.int(title='Fib EMA Length', minval=1, defval=150, group='══════ Sideways Trend Levels ══════', inline="2") // Strong Band isBelow_StrongBand_Bull = true isBelow_StrongBand_Bear = true StrongBand_Price_of_Low = float(na) StrongBand_Price_of_High = float(na) StrongBand_Bear_Fib_Price = float(na) StrongBand_Bull_Fib_Price = float(na) /// Middle Band isBelow_MiddleBand_Bull = true isBelow_MiddleBand_Bear = true MiddleBand_Price_of_Low = float(na) MiddleBand_Price_of_High = float(na) MiddleBand_Bear_Fib_Price = float(na) MiddleBand_Bull_Fib_Price = float(na) // Sideways Band isBelow_SidewaysBand_Bull = true isBelow_SidewaysBand_Bear = true SidewaysBand_Price_of_Low = float(na) SidewaysBand_Price_of_High = float(na) SidewaysBand_Bear_Fib_Price = float(na) SidewaysBand_Bull_Fib_Price = float(na) // get Fib Levels if enable_StrongBand_Bull StrongBand_Price_of_High := ta.highest(high, StrongBand_Lookback) StrongBand_Price_of_Low := ta.lowest(low, StrongBand_Lookback) StrongBand_Bull_Fib_Price := (StrongBand_Price_of_High - StrongBand_Price_of_Low) * (1 - select_StrongBand_Fib_Bull) + StrongBand_Price_of_Low //+ fibbullHighDivi isBelow_StrongBand_Bull := StrongBand_Bull_Fib_Price > ta.lowest(low, 2) or not enable_StrongBand_Bull if enable_StrongBand_Bear StrongBand_Price_of_High := ta.highest(high, StrongBand_Lookback) StrongBand_Price_of_Low := ta.lowest(low, StrongBand_Lookback) StrongBand_Bear_Fib_Price := (StrongBand_Price_of_High - StrongBand_Price_of_Low) * (1 - select_StrongBand_Fib_Bear) + StrongBand_Price_of_Low// + fibbullLowhDivi isBelow_StrongBand_Bear := StrongBand_Bear_Fib_Price < ta.highest(low, 2) or not enable_StrongBand_Bear if enable_MiddleBand_Bull MiddleBand_Price_of_High := ta.highest(high, MiddleBand_Lookback) MiddleBand_Price_of_Low := ta.lowest(low, MiddleBand_Lookback) MiddleBand_Bull_Fib_Price := (MiddleBand_Price_of_High - MiddleBand_Price_of_Low) * (1 - select_MiddleBand_Fib_Bull) + MiddleBand_Price_of_Low //+ fibbullHighDivi isBelow_MiddleBand_Bull := MiddleBand_Bull_Fib_Price > ta.lowest(low, 2) or not enable_MiddleBand_Bull if enable_MiddleBand_Bear MiddleBand_Price_of_High := ta.highest(high, MiddleBand_Lookback) MiddleBand_Price_of_Low := ta.lowest(low, MiddleBand_Lookback) MiddleBand_Bear_Fib_Price := (MiddleBand_Price_of_High - MiddleBand_Price_of_Low) * (1 - select_MiddleBand_Fib_Bear) + MiddleBand_Price_of_Low// + fibbullLowhDivi isBelow_MiddleBand_Bear := MiddleBand_Bear_Fib_Price < ta.highest(low, 2) or not enable_MiddleBand_Bear if enable_SidewaysBand_Bull SidewaysBand_Price_of_High := ta.highest(high, SidewaysBand_Lookback) SidewaysBand_Price_of_Low := ta.lowest(low, SidewaysBand_Lookback) SidewaysBand_Bull_Fib_Price := (SidewaysBand_Price_of_High - SidewaysBand_Price_of_Low) * (1 - select_SidewaysBand_Fib_Bull) + SidewaysBand_Price_of_Low //+ fibbullHighDivi isBelow_SidewaysBand_Bull := SidewaysBand_Bull_Fib_Price > ta.lowest(low, 2) or not enable_SidewaysBand_Bull if enable_SidewaysBand_Bear SidewaysBand_Price_of_High := ta.highest(high, SidewaysBand_Lookback) SidewaysBand_Price_of_Low := ta.lowest(low, SidewaysBand_Lookback) SidewaysBand_Bear_Fib_Price := (SidewaysBand_Price_of_High - SidewaysBand_Price_of_Low) * (1 - select_SidewaysBand_Fib_Bear) + SidewaysBand_Price_of_Low// + fibbullLowhDivi isBelow_SidewaysBand_Bear := SidewaysBand_Bear_Fib_Price < ta.highest(low, 2) or not enable_SidewaysBand_Bear // Fib EMAs // fib ema Strong Trend StrongBand_current_Trend_EMA = float(na) StrongBand_Bull_EMA = ta.ema(StrongBand_Bull_Fib_Price, StrongBand_EmaLen) StrongBand_Bear_EMA = ta.ema(StrongBand_Bear_Fib_Price, StrongBand_EmaLen) StrongBand_Ema_in_Uptrend = ta.change(StrongBand_Bull_EMA) > 0 or ta.change(StrongBand_Bear_EMA) > 0 StrongBand_Ema_Sideways = ta.change(StrongBand_Bull_EMA) == 0 or ta.change(StrongBand_Bear_EMA) == 0 StrongBand_Ema_in_Downtrend = ta.change(StrongBand_Bull_EMA) < 0 or ta.change(StrongBand_Bear_EMA) < 0 if StrongBand_Ema_in_Uptrend or StrongBand_Ema_Sideways StrongBand_current_Trend_EMA := StrongBand_Bull_EMA if StrongBand_Ema_in_Downtrend StrongBand_current_Trend_EMA := StrongBand_Bear_EMA // fib ema Normal Trend MiddleBand_current_Trend_EMA = float(na) MiddleBand_Bull_EMA = ta.ema(MiddleBand_Bull_Fib_Price, MiddleBand_EmaLen) MiddleBand_Bear_EMA = ta.ema(MiddleBand_Bear_Fib_Price, MiddleBand_EmaLen) MiddleBand_Ema_in_Uptrend = ta.change(MiddleBand_Bull_EMA) > 0 or ta.change(MiddleBand_Bear_EMA) > 0 MiddleBand_Ema_Sideways = ta.change(MiddleBand_Bull_EMA) == 0 or ta.change(MiddleBand_Bear_EMA) == 0 MiddleBand_Ema_in_Downtrend = ta.change(MiddleBand_Bull_EMA) < 0 or ta.change(MiddleBand_Bear_EMA) < 0 if MiddleBand_Ema_in_Uptrend or MiddleBand_Ema_Sideways MiddleBand_current_Trend_EMA := MiddleBand_Bull_EMA if MiddleBand_Ema_in_Downtrend MiddleBand_current_Trend_EMA := MiddleBand_Bear_EMA // fib ema Sideways Trend SidewaysBand_current_Trend_EMA = float(na) SidewaysBand_Bull_EMA = ta.ema(SidewaysBand_Bull_Fib_Price, SidewaysBand_EmaLen) SidewaysBand_Bear_EMA = ta.ema(SidewaysBand_Bear_Fib_Price, SidewaysBand_EmaLen) SidewaysBand_Ema_in_Uptrend = ta.change(SidewaysBand_Bull_EMA) > 0 or ta.change(SidewaysBand_Bear_EMA) > 0 SidewaysBand_Ema_Sideways = ta.change(SidewaysBand_Bull_EMA) == 0 or ta.change(SidewaysBand_Bear_EMA) == 0 SidewaysBand_Ema_in_Downtrend = ta.change(SidewaysBand_Bull_EMA) < 0 or ta.change(SidewaysBand_Bear_EMA) < 0 if SidewaysBand_Ema_in_Uptrend or SidewaysBand_Ema_Sideways SidewaysBand_current_Trend_EMA := SidewaysBand_Bull_EMA if SidewaysBand_Ema_in_Downtrend SidewaysBand_current_Trend_EMA := SidewaysBand_Bear_EMA // trend states and colors all_Fib_Emas_Trending = StrongBand_Ema_in_Uptrend and MiddleBand_Ema_in_Uptrend and SidewaysBand_Ema_in_Uptrend all_Fib_Emas_Downtrend = MiddleBand_Ema_in_Downtrend and StrongBand_Ema_in_Downtrend and SidewaysBand_Ema_in_Downtrend all_Fib_Emas_Sideways = MiddleBand_Ema_Sideways and StrongBand_Ema_Sideways and SidewaysBand_Ema_Sideways all_Fib_Emas_Trend_or_Sideways = (MiddleBand_Ema_Sideways or StrongBand_Ema_Sideways or SidewaysBand_Ema_Sideways) or (StrongBand_Ema_in_Uptrend or MiddleBand_Ema_in_Uptrend or SidewaysBand_Ema_in_Uptrend) and not (MiddleBand_Ema_in_Downtrend or StrongBand_Ema_in_Downtrend or SidewaysBand_Ema_in_Downtrend) allFibsUpAndDownTrend = (MiddleBand_Ema_in_Downtrend or StrongBand_Ema_in_Downtrend or SidewaysBand_Ema_in_Downtrend) and (MiddleBand_Ema_Sideways or SidewaysBand_Ema_Sideways or StrongBand_Ema_Sideways or StrongBand_Ema_in_Uptrend or MiddleBand_Ema_in_Uptrend or SidewaysBand_Ema_in_Uptrend) Middle_and_Sideways_Emas_Trending = MiddleBand_Ema_in_Uptrend and SidewaysBand_Ema_in_Uptrend Middle_and_Sideways_Fib_Emas_Downtrend = MiddleBand_Ema_in_Downtrend and SidewaysBand_Ema_in_Downtrend Middle_and_Sideways_Fib_Emas_Sideways = MiddleBand_Ema_Sideways and SidewaysBand_Ema_Sideways Middle_and_Sideways_Fib_Emas_Trend_or_Sideways = (MiddleBand_Ema_Sideways or SidewaysBand_Ema_Sideways) or (MiddleBand_Ema_in_Uptrend or SidewaysBand_Ema_in_Uptrend) and not (MiddleBand_Ema_in_Downtrend or SidewaysBand_Ema_in_Downtrend) Middle_and_Sideways_UpAndDownTrend = (MiddleBand_Ema_in_Downtrend or SidewaysBand_Ema_in_Downtrend) and (MiddleBand_Ema_Sideways or SidewaysBand_Ema_Sideways or MiddleBand_Ema_in_Uptrend or SidewaysBand_Ema_in_Uptrend) UpperBand_Ema_Color = all_Fib_Emas_Trend_or_Sideways ? color.lime : all_Fib_Emas_Downtrend ? color.red : allFibsUpAndDownTrend ? color.white : na MiddleBand_Ema_Color = Middle_and_Sideways_Fib_Emas_Trend_or_Sideways ? color.lime : Middle_and_Sideways_Fib_Emas_Downtrend ? color.red : Middle_and_Sideways_UpAndDownTrend ? color.white : na SidewaysBand_Ema_Color = SidewaysBand_Ema_in_Uptrend ? color.lime : SidewaysBand_Ema_in_Downtrend ? color.red : (SidewaysBand_Ema_in_Downtrend and (SidewaysBand_Ema_Sideways or SidewaysBand_Ema_in_Uptrend)) ? color.white : na plotStrong_Ema = plot(StrongBand_current_Trend_EMA, color=UpperBand_Ema_Color, title="Strong Trend") plotMiddle_Ema = plot(MiddleBand_current_Trend_EMA, color=MiddleBand_Ema_Color, title="Normal Trend") plotSideways_Ema = plot(SidewaysBand_current_Trend_EMA, color=SidewaysBand_Ema_Color, title="Sidewaysd") Strong_Middle_fillcolor = color.new(color.green, 90) if all_Fib_Emas_Trend_or_Sideways Strong_Middle_fillcolor := color.new(color.green, 90) if all_Fib_Emas_Downtrend Strong_Middle_fillcolor := color.new(color.red, 90) if allFibsUpAndDownTrend Strong_Middle_fillcolor := color.new(color.white, 90) Middle_Sideways_fillcolor = color.new(color.green, 90) if Middle_and_Sideways_Fib_Emas_Trend_or_Sideways Middle_Sideways_fillcolor := color.new(color.green, 90) if Middle_and_Sideways_Fib_Emas_Downtrend Middle_Sideways_fillcolor := color.new(color.red, 90) if Middle_and_Sideways_UpAndDownTrend Middle_Sideways_fillcolor := color.new(color.white, 90) fill(plotStrong_Ema, plotMiddle_Ema, color=Strong_Middle_fillcolor, title="fib band background") fill(plotMiddle_Ema, plotSideways_Ema, color=Middle_Sideways_fillcolor, title="fib band background") // buy condition StrongBand_Price_was_below_Bull_level = ta.lowest(low, 1) < StrongBand_current_Trend_EMA StrongBand_Price_is_above_Bull_level = close > StrongBand_current_Trend_EMA StronBand_Price_Average_above_Bull_Level = ta.ema(low, 10) > StrongBand_current_Trend_EMA StrongBand_Low_isnt_toLow = (ta.lowest(StrongBand_current_Trend_EMA, 15) - ta.lowest(low, 15)) < close * 0.005 StronBand_Trend_isnt_fresh = ta.barssince(StrongBand_Ema_in_Downtrend) > 50 or na(ta.barssince(StrongBand_Ema_in_Downtrend)) MiddleBand_Price_was_below_Bull_level = ta.lowest(low, 1) < MiddleBand_current_Trend_EMA MiddleBand_Price_is_above_Bull_level = close > MiddleBand_current_Trend_EMA MiddleBand_Price_Average_above_Bull_Level = ta.ema(close, 20) > MiddleBand_current_Trend_EMA MiddleBand_Low_isnt_toLow = (ta.lowest(MiddleBand_current_Trend_EMA, 10) - ta.lowest(low, 10)) < close * 0.0065 MiddleBand_Trend_isnt_fresh = ta.barssince(MiddleBand_Ema_in_Downtrend) > 50 or na(ta.barssince(MiddleBand_Ema_in_Downtrend)) SidewaysBand_Price_was_below_Bull_level = ta.lowest(low, 1) < SidewaysBand_current_Trend_EMA SidewaysBand_Price_is_above_Bull_level = close > SidewaysBand_current_Trend_EMA SidewaysBand_Price_Average_above_Bull_Level = ta.ema(low, 80) > SidewaysBand_current_Trend_EMA SidewaysBand_Low_isnt_toLow = (ta.lowest(SidewaysBand_current_Trend_EMA, 150) - ta.lowest(low, 150)) < close * 0.0065 SidewaysBand_Trend_isnt_fresh = ta.barssince(SidewaysBand_Ema_in_Downtrend) > 50 or na(ta.barssince(SidewaysBand_Ema_in_Downtrend)) StrongBand_Buy_Alert = StronBand_Trend_isnt_fresh and StrongBand_Low_isnt_toLow and StronBand_Price_Average_above_Bull_Level and StrongBand_Price_was_below_Bull_level and StrongBand_Price_is_above_Bull_level and all_Fib_Emas_Trend_or_Sideways MiddleBand_Buy_Alert = MiddleBand_Trend_isnt_fresh and MiddleBand_Low_isnt_toLow and MiddleBand_Price_Average_above_Bull_Level and MiddleBand_Price_was_below_Bull_level and MiddleBand_Price_is_above_Bull_level and Middle_and_Sideways_Fib_Emas_Trend_or_Sideways SidewaysBand_Buy_Alert = SidewaysBand_Trend_isnt_fresh and SidewaysBand_Low_isnt_toLow and SidewaysBand_Price_Average_above_Bull_Level and SidewaysBand_Price_was_below_Bull_level and SidewaysBand_Price_is_above_Bull_level and (SidewaysBand_Ema_Sideways or SidewaysBand_Ema_in_Uptrend and ( not SidewaysBand_Ema_in_Downtrend)) // Sell condition StrongBand_Price_was_above_Bear_level = ta.highest(high, 1) > StrongBand_current_Trend_EMA StrongBand_Price_is_below_Bear_level = close < StrongBand_current_Trend_EMA StronBand_Price_Average_below_Bear_Level = ta.sma(high, 10) < StrongBand_current_Trend_EMA StrongBand_High_isnt_to_High = (ta.highest(high, 15) - ta.highest(StrongBand_current_Trend_EMA, 15)) < close * 0.005 StrongBand_Bear_Trend_isnt_fresh = ta.barssince(StrongBand_Ema_in_Uptrend) > 50 MiddleBand_Price_was_above_Bear_level = ta.highest(high, 1) > MiddleBand_current_Trend_EMA MiddleBand_Price_is_below_Bear_level = close < MiddleBand_current_Trend_EMA MiddleBand_Price_Average_below_Bear_Level = ta.sma(high, 9) < MiddleBand_current_Trend_EMA MiddleBand_High_isnt_to_High = (ta.highest(high, 10) - ta.highest(MiddleBand_current_Trend_EMA, 10)) < close * 0.0065 MiddleBand_Bear_Trend_isnt_fresh = ta.barssince(MiddleBand_Ema_in_Uptrend) > 50 SidewaysBand_Price_was_above_Bear_level = ta.highest(high, 1) > SidewaysBand_current_Trend_EMA SidewaysBand_Price_is_below_Bear_level = close < SidewaysBand_current_Trend_EMA SidewaysBand_Price_Average_below_Bear_Level = ta.sma(high, 20) < SidewaysBand_current_Trend_EMA SidewaysBand_High_isnt_to_High = (ta.highest(high, 20) - ta.highest(SidewaysBand_current_Trend_EMA, 15)) < close * 0.0065 SidewaysBand_Bear_Trend_isnt_fresh = ta.barssince(SidewaysBand_Ema_in_Uptrend) > 50 StrongBand_Sell_Alert = StronBand_Price_Average_below_Bear_Level and StrongBand_High_isnt_to_High and StrongBand_Bear_Trend_isnt_fresh and StrongBand_Price_was_above_Bear_level and StrongBand_Price_is_below_Bear_level and all_Fib_Emas_Downtrend and not all_Fib_Emas_Trend_or_Sideways MiddleBand_Sell_Alert = MiddleBand_Price_Average_below_Bear_Level and MiddleBand_High_isnt_to_High and MiddleBand_Bear_Trend_isnt_fresh and MiddleBand_Price_was_above_Bear_level and MiddleBand_Price_is_below_Bear_level and Middle_and_Sideways_Fib_Emas_Downtrend and not Middle_and_Sideways_Fib_Emas_Trend_or_Sideways SidewaysBand_Sell_Alert = SidewaysBand_Price_Average_below_Bear_Level and SidewaysBand_High_isnt_to_High and SidewaysBand_Bear_Trend_isnt_fresh and SidewaysBand_Price_was_above_Bear_level and SidewaysBand_Price_is_below_Bear_level and SidewaysBand_Ema_in_Downtrend and not (SidewaysBand_Ema_Sideways or SidewaysBand_Ema_in_Uptrend and ( not SidewaysBand_Ema_in_Downtrend)) // Backtester ////////////////// Stop Loss // Stop loss enableSL = input.bool(true, title='enable Stop Loss', group='══════════ Stop Loss Settings ══════════') whichSL = input.string(defval='low/high as SL', title='SL based on static % or based on the low/high', options=['low/high as SL', 'static % as SL'], group='══════════ Stop Loss Settings ══════════') whichOffset = input.string(defval='% as offset', title='choose offset from the low/high', options=['$ as offset', '% as offset'], group='Stop Loss at the low/high') lowPBuffer = input.float(1.4, title='SL Offset from the Low/high in %', group='Stop Loss at the low/high') / 100 lowDBuffer = input.float(100, title='SL Offset from the Low/high in $', group='Stop Loss at the low/high') SlLowLookback = input.int(title='SL lookback for Low/high', defval=5, minval=1, maxval=50, group='Stop Loss at the low/high') longSlLow = float(na) shortSlLow = float(na) if whichOffset == "% as offset" and whichSL == "low/high as SL" and enableSL longSlLow := ta.lowest(low, SlLowLookback) * (1 - lowPBuffer) shortSlLow := ta.highest(high, SlLowLookback) * (1 + lowPBuffer) if whichOffset == "$ as offset" and whichSL == "low/high as SL" and enableSL longSlLow := ta.lowest(low, SlLowLookback) - lowDBuffer shortSlLow := ta.highest(high, SlLowLookback) + lowDBuffer //plot(shortSlLow, title="stoploss", color=color.new(#00bcd4, 0)) // long settings - 🔥 uncomment the 6 lines below to disable the alerts and enable the backtester longStopLoss = input.float(0.5, title='Long Stop Loss in %', group='static % Stop Loss', inline='Input 1') / 100 // short settings - 🔥 uncomment the 6 lines below to disable the alerts and enable the backtester shortStopLoss = input.float(0.5, title='Short Stop Loss in %', group='static % Stop Loss', inline='Input 1') / 100 /////// Take profit longTakeProfit1 = input.float(4, title='Long Take Profit in %', group='Take Profit', inline='Input 1') / 100 /////// Take profit shortTakeProfit1 = input.float(1.6, title='Short Take Profit in %', group='Take Profit', inline='Input 1') / 100 ////////////////// SL TP END /////////////////// alerts selectalertFreq = input.string(defval='once per bar close', title='Alert Options', options=['once per bar', 'once per bar close', 'all'], group='═══════════ alert settings ═══════════') BuyAlertMessage = input.string(defval="Bullish Divergence detected, put your SL @", title='Buy Alert Message', group='═══════════ alert settings ═══════════') enableSlMessage = input.bool(true, title='enable Stop Loss Value at the end of "buy Alert message"', group='═══════════ alert settings ═══════════') AfterSLMessage = input.string(defval="", title='Buy Alert message after SL Value', group='═══════════ alert settings ═══════════') ////////////////// Backtester // 🔥 uncomment the all lines below for the backtester and revert for alerts shortTrading = enable_MiddleBand_Bear or enable_StrongBand_Bear or enable_SidewaysBand_Bear longTrading = enable_StrongBand_Bull or enable_MiddleBand_Bull or enable_SidewaysBand_Bull longTP1 = strategy.position_size > 0 ? strategy.position_avg_price * (1 + longTakeProfit1) : strategy.position_size < 0 ? strategy.position_avg_price * (1 - longTakeProfit1) : na longSL = strategy.position_size > 0 ? strategy.position_avg_price * (1 - longStopLoss) : strategy.position_size < 0 ? strategy.position_avg_price * (1 + longStopLoss) : na shortTP = strategy.position_size > 0 ? strategy.position_avg_price * (1 + shortTakeProfit1) : strategy.position_size < 0 ? strategy.position_avg_price * (1 - shortTakeProfit1) : na shortSL = strategy.position_size > 0 ? strategy.position_avg_price * (1 - shortStopLoss) : strategy.position_size < 0 ? strategy.position_avg_price * (1 + shortStopLoss) : na strategy.risk.allow_entry_in(longTrading == true and shortTrading == true ? strategy.direction.all : longTrading == true ? strategy.direction.long : shortTrading == true ? strategy.direction.short : na) strategy.entry('Bull', strategy.long, comment='Upper Band Long', when=StrongBand_Buy_Alert) strategy.entry('Bull', strategy.long, comment='Lower Band Long', when=MiddleBand_Buy_Alert) strategy.entry('Bull', strategy.long, comment='Lower Band Long', when=SidewaysBand_Buy_Alert) strategy.entry('Bear', strategy.short, comment='Upper Band Short', when=StrongBand_Sell_Alert) strategy.entry('Bear', strategy.short, comment='Lower Band Short', when=MiddleBand_Sell_Alert) strategy.entry('Bear', strategy.short, comment='Lower Band Short', when=SidewaysBand_Sell_Alert) // check which SL to use if enableSL and whichSL == 'static % as SL' strategy.exit(id='longTP-SL', from_entry='Bull', limit=longTP1, stop=longSL) strategy.exit(id='shortTP-SL', from_entry='Bear', limit=shortTP, stop=shortSL) // get bars since last entry for the SL at low to work barsSinceLastEntry()=> strategy.opentrades > 0 ? (bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades-1)) : na if enableSL and whichSL == 'low/high as SL' and ta.barssince(StrongBand_Buy_Alert or MiddleBand_Buy_Alert or SidewaysBand_Buy_Alert) < 2 and barsSinceLastEntry() < 2 strategy.exit(id='longTP-SL', from_entry='Bull', limit=longTP1, stop=longSlLow) if enableSL and whichSL == 'low/high as SL' and ta.barssince(StrongBand_Sell_Alert or MiddleBand_Sell_Alert or SidewaysBand_Sell_Alert) < 2 and barsSinceLastEntry() < 2 strategy.exit(id='shortTP-SL', from_entry='Bear', limit=shortTP, stop=shortSlLow) if not enableSL strategy.exit(id='longTP-SL', from_entry='Bull', limit=longTP1) strategy.exit(id='shortTP-SL', from_entry='Bear', limit=shortTP)