アダプティブ・マルチ・タイムフレーム・フィボナッチ・リトラセメント・トレーディング・ストラテジー

作者: リン・ハーンチャオチャン, 日付: 2023-12-25 13:54:39
タグ:

img

概要

アダプティブ・マルチタイムフレームフィボナッチリトレースメント・トレーディング・ストラテジー (Adaptive Multi Timeframe Fibonacci Retracement Trading Strategy) は,アダプティブ・ムービング・平均値,ストカスティック・RSI,フィボナッチリトレースメントゾーンを含むトレンドフォロー戦略である.この戦略は,ポジションのサイズを動的に調整するために,さまざまな指標で異なるタイムフレームの市場動きを分析する.この戦略は,トレンドが形成されるときにポジションを確立するために潜在的なプルバックゾーンを正確に特定することができる.また,リスクを制御するためにストップ・ロスを設定する.

戦略の論理

アダプティブ・マルチ・タイムフレーム・フィボナッチ・リトレースメント・トレーディング・ストラテジーは,以下の技術的ツールとメカニズムを使用します.

  1. アダプティブ・ムービング・アベア (SMAとWMA): 異なる期間の (分,時間,日など) 価格の適応型移動平均を計算する.適応型移動平均の傾斜に基づいてトレンド方向を決定する.

  2. ストカスティックRSI: RSIのストカスティック値を計算して,RSIが過買いか過売れているかどうかを判断する.RSI曲線の形を使ってモメントとトレンドを分析する.

  3. フィボナッチリトレースゾーン:最近のスイングハイとスイングローを使用してフィボナッチリトレースゾーンをプロットする.これらのゾーン内のエントリーと出口点を設定し,潜在的なトレンド逆転または引き下げをマークする傾向があります.

  4. ポジションサイズ:ストック・RSIの信号強度と適応動向平均値に基づいてポジションサイズを動的に調整する.

戦略はまずトレンド方向を決定する.価格がフィボナッチゾーンに入ると,潜在的なエントリーポイントがゾーン近くにマークされる.適応型移動平均値とストックRSIが潜在的なポイントの周りにエントリー信号を発行するときに取引が実行される.ストップロスはリスクを制御するためにFibゾーンの外に設定される.

利点分析

アダプティブ・マルチ・タイムフレーム・フィボナッチ・リトレースメント・トレーディング・ストラテジーは以下の強みがあります.

  1. マルチタイムフレーム分析:より包括的なトレンド判断のために,複数のタイムフレームレベル (分,時間,日など) を同時に評価します.

  2. ダイナミック・ポジション・サイジング: 市場の状況に応じてポジション・サイジングをダイナミックに調整し,リスクをより良くコントロールする.

  3. 正確なプルバックターゲティング:フィボナッチゾーンは,トレンド中に短期的な逆転を捉えるために使用できます.

  4. ストップ・ロスはリトラセーションゾーンで ストップ・ロスは大きな損失を 効果的に防ぐことができます

  5. シグナルフィルタリング: 偽のブレイクを避けるために,マークされたエントリーポイントの周りの取引にのみ入ります.

  6. 高い最適化可能性:市場ごとに戦略パフォーマンスを最適化するために調整できる複数の調整可能な入力パラメータ.

リスク分析

この戦略に関連した主なリスクは以下のとおりです.

  1. 不正ゾーンリスク: ゾーンまたは不正ゾーンに到達できない場合,入場を逃す可能性があります. ゾーン範囲を拡大したり,より多くのゾーンを追加することによって軽減できます.

  2. ストップ損失追跡リスク: 静的ストップ損失は早急にヒットする可能性があります. 後ろのストップ損失,ゾーンストップ損失などを見ることができます.

  3. 誤った信号リスク:適応型移動平均値とストックRSIは時々誤った信号を与え,不必要な取引を引き起こす可能性があります.誤った信号率を減らすためにシグナルをフィルタリングすることができます.

  4. 高複雑性リスク:複数のパラメータと指標の組み合わせにより戦略の複雑性が高まり,最適化とテストが難しくなります.

増進 の 機会

この戦略は,次の方法でさらに最適化できます.

  1. 安定性を評価するためにより多くの株式や外為商品をテストします 市場ごとに細かなパラメータを調整します

  2. 信号フィルタリングメカニズムを追加して 偽信号率を下げ,信号対ノイズ比率を高めます

  3. 異なるタイプの移動平均値のパラメータをテストし比較する.

  4. 固定ストップ損失を後続ストップ損失またはゾーンストップ損失に置き換える改善を評価する.

  5. 長期的に利益を得るために 突破信号やトレンド追跡メカニズムを試す

結論

アダプティブマルチタイムフレームフィボナッチリトレースメント・トレーディング戦略は,トレンド条件を特定し,リトレースメント中にポジションを展開するために様々な分析ツールを使用する.厳格なリスク制御メカニズムとストップロスは,主要なトレンド内で利益を最適化するのに役立ちます.十分な調整可能なパラメータと最適化機会により,この戦略のさらなる改良により,安定かつ信頼性の高い取引システムに形作られるでしょう.


/*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)

もっと