多期トレンド追跡戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-18 12:01:23
タグ:

img

概要

この戦略は,トレンド追跡のためのトレンド方向を特定するために,複数のタイムフレームにおける技術指標の組み合わせを使用する. 1分,5分,15分,1時間,4時間,1日タイムフレームのRSI,ストック,ストックRSI,CCIおよび他の指標を組み合わせ,基準を満たす組み合わせた信号を探し,それによって現在の全体のトレンド方向を判断する.

戦略の論理

この戦略の主な論理は,異なるタイムフレームにおける指標の組み合わせを判断することにある.各タイムフレームでは,RSI,Stock,Stock RSI,CCIなどの指標が設定範囲内であり,上昇傾向にあるかどうかをチェックする. タイムフレーム内のすべての指標が基準を満たしている場合,そのタイムフレームは"pass"信号を提供します.

1分,5分,15分,1時間,4時間,1日間の期間内,過去する任意のタイムフレームは,全体的なトレンドを追跡するためのポジティブなシグナルを提供します. 1分,5分,15分,1時間,4時間,1日を含むすべてのタイムフレームが"試験"を通過したときのみ,実際の買い信号が起動されます.

言い換えれば,一期間のすべての時間枠におけるトレンド判断が正しい場合,全体的なトレンド判断は非常に信頼性が高くなり,その時点でポジションは長期にわたって開かれます.複数の時間枠の指標からのトレンド信号を組み合わせて判断することで,誤った信号をフィルタリングし,取引頻度を減らすことで,全体的なトレンドをより正確に決定することができます.

利点分析

  1. 複数のタイムフレームにわたる指標からのシグナルを組み合わせることで,誤ったシグナルを大幅に削減し,取引頻度を下げることができます.

  2. 短期と長期間の複数の時間枠における傾向の一貫性を観察することで,全体的な傾向の方向性がより正確に決定できます.

  3. 合理的なパラメータ設定は,引き下げを一定程度制御することができます.ストップ損失と利益の設定は,部分的な利益をロックし,リスクを低減します.

  4. 指標パラメータの組み合わせをカスタマイズすることで,異なる市場への調整により適応性が向上します.

リスク分析

  1. この戦略は全体的な傾向を追跡しているため,傾向が逆転すると,適切なタイミングでポジションを退場できず,引き下げリスクが大きい可能性があります.

  2. パラメータの設定が不十分である場合,トレンドの機会を逃したり,取引頻度を増やす可能性があります. パラメータを最適化するために広範なバックテストが必要です.

  3. 複数のタイムフレームにおける判断は,短期的なトレンドの機会を見逃す可能性があります.いくつかのタイムフレームで基準が完全に満たされていない場合でも,シグナルを許可することで最適化は役立ちます.

オプティマイゼーションの方向性

  1. 最適な組み合わせを見つけるため,各時間枠における技術指標のパラメータを最適化します.

  2. 特定の時間枠からの判断に基づいて信号を許可する効果をテストする.例えば,1分と15分の調整は購入に十分である.

  3. 複数のタイムフレーム判断に使用される指標の種類を豊かにするために新しい技術指標を組み込む.MACD,KD,ボリンジャー帯などを検討することができます.

  4. ストップ損失をテストし,最適なパラメータを見つけるために利益レベルを取ります.ストップ損失範囲が小さすぎると,ストップ損失リスクが増加し,幅が大きすぎると,利益機会が逃れることがあります.

結論

この戦略の主な革新は,複数のタイムフレームにわたる技術指標からの組み合わせたシグナルを利用して全体的なトレンド方向性を決定することにある.エントリータイミングを選択する前に短期的および長期的トレンドアライナインメントを確保することで,誤ったシグナルを大幅に削減し,トレンド取引機会を把握することができます.パラメータ最適化により,優れた引き下げメトリックを得ることができます.全体として,これは長期保有に適した比較的安定した低リスクトレンド追跡戦略です.


/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Intellitrader - Buy - BACKTESTER", overlay = true)
//study("APEX - Tester - Buy/Sell Strategies - Basic ", overlay = true)
source_main             = close
/////////////////////////////////////////////////
// BUY STRATEGIES - SELECTION 
/////////////////////////////////////////////////
puppy_sep           = input(false, title="  INTELLITRADER BACKTESTER  ")
buy1_sep            = input(false, title="▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔" )

/// ******************* Percentage Change ***************************
pc_pc             = input(false, title="⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻  PC ⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻")
pc_Use            = input(false, title="Use Percent Change (On / Off)")
pc_min_1m         = input(-200, title="Perc.Change - 1m - Min")
pc_max_1m         = input(200,  title="Perc.Change - 1m - Max")
pc_min_5m         = input(-200, title="Perc.Change - 5m - Min")
pc_max_5m         = input(200,  title="Perc.Change - 5m - Max")
pc_min_15m        = input(-200, title="Perc.Change - 15m - Min")
pc_max_15m        = input(200,  title="Perc.Change - 15m - Max")
pc_min_1h         = input(-200, title="Perc.Change - 1h - Min")
pc_max_1h         = input(200,  title="Perc.Change - 1h - Max")
pc_min_4h         = input(-200, title="Perc.Change - 4h - Min")
pc_max_4h         = input(200,  title="Perc.Change - 4h - Max")
pc_min_1d         = input(-200, title="Perc.Change - 1d - Min")
pc_max_1d         = input(200,  title="Perc.Change - 1d - Max")

pc_1m  = request.security(syminfo.tickerid, "1", close-close[1]/close[1]*100 )
pc_5m  = request.security(syminfo.tickerid, "5", close-close[1]/close[1]*100 )
pc_15m = request.security(syminfo.tickerid, "15", close-close[1]/close[1]*100 )
pc_1h  = request.security(syminfo.tickerid, "60", close-close[1]/close[1]*100 )
pc_4h  = request.security(syminfo.tickerid, "240", close-close[1]/close[1]*100 )
pc_1d  = request.security(syminfo.tickerid, "1440", close-close[1]/close[1]*100 )

pc_1m_switch  = pc_min_1m <= pc_1m and pc_max_1m  >= pc_1m
pc_5m_switch  = pc_min_5m <= pc_5m and pc_max_5m  >= pc_5m
pc_15m_switch = pc_min_15m <= pc_15m and pc_max_15m >= pc_15m
pc_1h_switch  = pc_min_1h <= pc_1h and pc_max_1h  >= pc_1h
pc_4h_switch  = pc_min_4h <= pc_4h and pc_max_4h  >= pc_4h
pc_1d_switch  = pc_min_1d <= pc_1d and pc_max_1d  >= pc_1d

pc_logic = true
if pc_Use
    pc_logic := false
    if pc_1m_switch and pc_5m_switch and pc_15m_switch and pc_1h_switch and pc_4h_switch and pc_1d_switch
        pc_logic := true

/// ******************* 1m ***************************
ma_sep_1m           = input(false, title="⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻  1m ⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻")
rsi7_min_1m         = input(20, title="RSI 7 - Min")
rsi7_max_1m         = input(80, title="RSI 7 - Max")
rsi7_Use_1m         = input(false, title="RSI 7 ? (On / Off)")
rsi7_Raising_1m     = input(false, title="RSI 7 Raising? (On / Off)")

rsi14_min_1m        = input(20, title="RSI 14 - Min")
rsi14_max_1m        = input(80, title="RSI 14 - Max")
rsi14_Use_1m        = input(false, title="RSI 14 ? (On / Off)")
rsi14_Raising_1m    = input(false, title="RSI 14 Raising? (On / Off)") 

stoch_min_1m        = input(20, title="STOCH 14 3 3 - Min")
stoch_max_1m        = input(80, title="STOCH 14 3 3 - Max")
stoch_Use_1m        = input(false, title="STOCH 14 3 3 ? (On / Off)")
stoch_Raising_1m    = input(false, title="STOCH 14 3 3 Raising? (On / Off)")

stochrsi_min_1m     = input(20, title="STOCHRSI 14 14 3 3 - Min")
stochrsi_max_1m     = input(80, title="STOCHRSI 14 14 3 3 - Max")
stochrsi_Use_1m     = input(false, title="STOCHRSI 14 14 3 3 ? (On / Off)")
stochrsi_Raising_1m = input(false, title="STOCHRSI 14 14 3 3 Raising? (On / Off)") 

cci_min_1m          = input(20, title="CCI 20 - Min")
cci_max_1m          = input(80, title="CCI 20 - Max")
cci_Use_1m          = input(false, title="CCI 20 ? (On / Off)")
cci_Raising_1m      = input(false, title="CCII 20 Raising? (On / Off)")

rsi14_1m            = request.security(syminfo.tickerid, "1", rsi(close,14) )
rsi7_1m             = request.security(syminfo.tickerid, "1", rsi(close,7) )
stoch_1m            = request.security(syminfo.tickerid, "1", sma(sma(stoch(close, high, low, 14), 3), 3))
stochrsi_1m         = request.security(syminfo.tickerid, "1", sma(sma(stoch(rsi(close,14), rsi(close,14), rsi(close,14), 14), 3), 3))
cci_1m              = request.security(syminfo.tickerid, "1", cci(close,20) )

rsi7_1m_logic        = true
rsi7_1m_raisinglogic = true
if rsi7_Use_1m
    rsi7_1m_logic = false
    rsi7_1m_raisinglogic = rsi7_Raising_1m?rising(rsi7_1m,1):true
    if rsi7_1m>rsi7_min_1m and rsi7_1m<rsi7_max_1m and rsi7_1m_raisinglogic
        rsi7_1m_logic = true

rsi14_1m_logic        = true
rsi14_1m_raisinglogic = true
if rsi14_Use_1m
    rsi14_1m_logic = false
    rsi14_1m_raisinglogic = rsi14_Raising_1m?rising(rsi14_1m,1):true
    if rsi14_1m>rsi14_min_1m and rsi14_1m<rsi14_max_1m and rsi14_1m_raisinglogic
        rsi14_1m_logic = true

stoch_1m_logic        = true
stoch_1m_raisinglogic = true
if stoch_Use_1m
    stoch_1m_logic = false
    stoch_1m_raisinglogic = stoch_Raising_1m?rising(stoch_1m,1):true
    if stoch_1m>stoch_min_1m and stoch_1m<stoch_max_1m and stoch_1m_raisinglogic
        stoch_1m_logic = true

stochrsi_1m_logic        = true
stochrsi_1m_raisinglogic = true
if stochrsi_Use_1m
    stochrsi_1m_logic = false
    stochrsi_1m_raisinglogic = stochrsi_Raising_1m?rising(stochrsi_1m,1):true
    if stochrsi_1m>stochrsi_min_1m and stochrsi_1m<stochrsi_max_1m and stochrsi_1m_raisinglogic
        stochrsi_1m_logic = true

cci_1m_logic        = true
cci_1m_raisinglogic = true
if cci_Use_1m
    cci_1m_logic = false
    cci_1m_raisinglogic = cci_Raising_1m?rising(cci_1m,1):true
    if cci_1m>cci_min_1m and cci_1m<cci_max_1m and cci_1m_raisinglogic
        cci_1m_logic = true

bool_1m = false
bool_1m := rsi7_1m_logic and rsi7_1m_raisinglogic and
 rsi14_1m_logic and rsi14_1m_raisinglogic and
 stoch_1m_logic and stoch_1m_raisinglogic and
 stochrsi_1m_logic and stochrsi_1m_raisinglogic and
 cci_1m_logic and cci_1m_raisinglogic

if not rsi7_Use_1m and not rsi14_Use_1m and not stoch_Use_1m and not stochrsi_Use_1m and not cci_Use_1m
    bool_1m = false

/// ******************* 5m ***************************
ma_sep_5m           = input(false, title="⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻  5m ⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻")
rsi7_min_5m         = input(20, title="RSI 7 - Min")
rsi7_max_5m         = input(80, title="RSI 7 - Max")
rsi7_Use_5m         = input(false, title="RSI 7 ? (On / Off)")
rsi7_Raising_5m     = input(false, title="RSI 7 Raising? (On / Off)")

rsi14_min_5m        = input(20, title="RSI 14 - Min")
rsi14_max_5m        = input(80, title="RSI 14 - Max")
rsi14_Use_5m        = input(false, title="RSI 14 ? (On / Off)")
rsi14_Raising_5m    = input(false, title="RSI 14 Raising? (On / Off)") 

stoch_min_5m        = input(20, title="STOCH 14 3 3 - Min")
stoch_max_5m        = input(80, title="STOCH 14 3 3 - Max")
stoch_Use_5m        = input(false, title="STOCH 14 3 3 ? (On / Off)")
stoch_Raising_5m    = input(false, title="STOCH 14 3 3 Raising? (On / Off)")

stochrsi_min_5m     = input(20, title="STOCHRSI 14 14 3 3 - Min")
stochrsi_max_5m     = input(80, title="STOCHRSI 14 14 3 3 - Max")
stochrsi_Use_5m     = input(false, title="STOCHRSI 14 14 3 3 ? (On / Off)")
stochrsi_Raising_5m = input(false, title="STOCHRSI 14 14 3 3 Raising? (On / Off)") 

cci_min_5m          = input(20, title="CCI 20 - Min")
cci_max_5m          = input(80, title="CCI 20 - Max")
cci_Use_5m          = input(false, title="CCI 20 ? (On / Off)")
cci_Raising_5m      = input(false, title="CCII 20 Raising? (On / Off)")

rsi14_5m            = request.security(syminfo.tickerid, "5", rsi(close,14) )
rsi7_5m             = request.security(syminfo.tickerid, "5", rsi(close,7) )
stoch_5m            = request.security(syminfo.tickerid, "5", sma(sma(stoch(close, high, low, 14), 3), 3))
stochrsi_5m         = request.security(syminfo.tickerid, "5", sma(sma(stoch(rsi(close,14), rsi(close,14), rsi(close,14), 14), 3), 3))
cci_5m              = request.security(syminfo.tickerid, "5", cci(close,20) )

rsi7_5m_logic        = true
rsi7_5m_raisinglogic = true
if rsi7_Use_5m
    rsi7_5m_logic = false
    rsi7_5m_raisinglogic = rsi7_Raising_5m?rising(rsi7_5m,1):true
    if rsi7_5m>rsi7_min_5m and rsi7_5m<rsi7_max_5m and rsi7_5m_raisinglogic
        rsi7_5m_logic = true

rsi14_5m_logic        = true
rsi14_5m_raisinglogic = true
if rsi14_Use_5m
    rsi14_5m_logic = false
    rsi14_5m_raisinglogic = rsi14_Raising_5m?rising(rsi14_5m,1):true
    if rsi14_5m>rsi14_min_5m and rsi14_5m<rsi14_max_5m and rsi14_5m_raisinglogic
        rsi14_5m_logic = true

stoch_5m_logic        = true
stoch_5m_raisinglogic = true
if stoch_Use_5m
    stoch_5m_logic = false
    stoch_5m_raisinglogic = stoch_Raising_5m?rising(stoch_5m,1):true
    if stoch_5m>stoch_min_5m and stoch_5m<stoch_max_5m and stoch_5m_raisinglogic
        stoch_5m_logic = true

stochrsi_5m_logic        = true
stochrsi_5m_raisinglogic = true
if stochrsi_Use_5m
    stochrsi_5m_logic = false
    stochrsi_5m_raisinglogic = stochrsi_Raising_5m?rising(stochrsi_5m,1):true
    if stochrsi_5m>stochrsi_min_5m and stochrsi_5m<stochrsi_max_5m and stochrsi_5m_raisinglogic
        stochrsi_5m_logic = true

cci_5m_logic        = true
cci_5m_raisinglogic = true
if cci_Use_5m
    cci_5m_logic = false
    cci_5m_raisinglogic = cci_Raising_5m?rising(cci_5m,1):true
    if cci_5m>cci_min_5m and cci_5m<cci_max_5m and cci_5m_raisinglogic
        cci_5m_logic = true

bool_5m = false
bool_5m := rsi7_5m_logic and rsi7_5m_raisinglogic and
 rsi14_5m_logic and rsi14_5m_raisinglogic and
 stoch_5m_logic and stoch_5m_raisinglogic and
 stochrsi_5m_logic and stochrsi_5m_raisinglogic and
 cci_5m_logic and cci_5m_raisinglogic

if not rsi7_Use_5m and not rsi14_Use_5m and not stoch_Use_5m and not stochrsi_Use_5m and not cci_Use_5m
    bool_5m = false

/// ******************* 15m ***************************
ma_sep_15m           = input(false, title="⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻  15m ⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻")
rsi7_min_15m         = input(20, title="RSI 7 - Min")
rsi7_max_15m         = input(80, title="RSI 7 - Max")
rsi7_Use_15m         = input(false, title="RSI 7 ? (On / Off)")
rsi7_Raising_15m     = input(false, title="RSI 7 Raising? (On / Off)")

rsi14_min_15m        = input(20, title="RSI 14 - Min")
rsi14_max_15m        = input(80, title="RSI 14 - Max")
rsi14_Use_15m        = input(false, title="RSI 14 ? (On / Off)")
rsi14_Raising_15m    = input(false, title="RSI 14 Raising? (On / Off)") 

stoch_min_15m        = input(20, title="STOCH 14 3 3 - Min")
stoch_max_15m        = input(80, title="STOCH 14 3 3 - Max")
stoch_Use_15m        = input(false, title="STOCH 14 3 3 ? (On / Off)")
stoch_Raising_15m    = input(false, title="STOCH 14 3 3 Raising? (On / Off)")

stochrsi_min_15m     = input(20, title="STOCHRSI 14 14 3 3 - Min")
stochrsi_max_15m     = input(80, title="STOCHRSI 14 14 3 3 - Max")
stochrsi_Use_15m     = input(false, title="STOCHRSI 14 14 3 3 ? (On / Off)")
stochrsi_Raising_15m = input(false, title="STOCHRSI 14 14 3 3 Raising? (On / Off)") 

cci_min_15m          = input(20, title="CCI 20 - Min")
cci_max_15m          = input(80, title="CCI 20 - Max")
cci_Use_15m          = input(false, title="CCI 20 ? (On / Off)")
cci_Raising_15m      = input(false, title="CCII 20 Raising? (On / Off)")

rsi14_15m            = request.security(syminfo.tickerid, "15", rsi(close,14) )
rsi7_15m             = request.security(syminfo.tickerid, "15", rsi(close,7) )
stoch_15m            = request.security(syminfo.tickerid, "15", sma(sma(stoch(close, high, low, 14), 3), 3))
stochrsi_15m         = request.security(syminfo.tickerid, "15", sma(sma(stoch(rsi(close,14), rsi(close,14), rsi(close,14), 14), 3), 3))
cci_15m              = request.security(syminfo.tickerid, "15", cci(close,20) )

rsi7_15m_logic        = true
rsi7_15m_raisinglogic = true
if rsi7_Use_15m
    rsi7_15m_logic = false
    rsi7_15m_raisinglogic = rsi7_Raising_15m?rising(rsi7_15m,1):true
    if rsi7_15m>rsi7_min_15m and rsi7_15m<rsi7_max_15m and rsi7_15m_raisinglogic
        rsi7_15m_logic = true

rsi14_15m_logic        = true
rsi14_15m_raisinglogic = true
if rsi14_Use_15m
    rsi14_15m_logic = false
    rsi14_15m_raisinglogic = rsi14_Raising_15m?rising(rsi14_15m,1):true
    if rsi14_15m>rsi14_min_15m and rsi14_15m<rsi14_max_15m and rsi14_15m_raisinglogic
        rsi14_15m_logic = true

stoch_15m_logic        = true
stoch_15m_raisinglogic = true
if stoch_Use_15m
    stoch_15m_logic = false
    stoch_15m_raisinglogic = stoch_Raising_15m?rising(stoch_15m,1):true
    if stoch_15m>stoch_min_15m and stoch_15m<stoch_max_15m and stoch_15m_raisinglogic
        stoch_15m_logic = true

stochrsi_15m_logic        = true
stochrsi_15m_raisinglogic = true
if stochrsi_Use_15m
    stochrsi_15m_logic = false
    stochrsi_15m_raisinglogic = stochrsi_Raising_15m?rising(stochrsi_15m,1):true
    if stochrsi_15m>stochrsi_min_15m and stochrsi_15m<stochrsi_max_15m and stochrsi_15m_raisinglogic
        stochrsi_15m_logic = true

cci_15m_logic        = true
cci_15m_raisinglogic = true
if cci_Use_15m
    cci_15m_logic = false
    cci_15m_raisinglogic = cci_Raising_15m?rising(cci_15m,1):true
    if cci_15m>cci_min_15m and cci_15m<cci_max_15m and cci_15m_raisinglogic
        cci_15m_logic = true

bool_15m = false
bool_15m := rsi7_15m_logic and rsi7_15m_raisinglogic and
 rsi14_15m_logic and rsi14_15m_raisinglogic and
 stoch_15m_logic and stoch_15m_raisinglogic and
 stochrsi_15m_logic and stochrsi_15m_raisinglogic and
 cci_15m_logic and cci_15m_raisinglogic

if not rsi7_Use_15m and not rsi14_Use_15m and not stoch_Use_15m and not stochrsi_Use_15m and not cci_Use_15m
    bool_15m = false

/// ******************* 1h ***************************
ma_sep_1h           = input(false, title="⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻  1h ⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻")
rsi7_min_1h         = input(20, title="RSI 7 - Min")
rsi7_max_1h         = input(80, title="RSI 7 - Max")
rsi7_Use_1h         = input(false, title="RSI 7 ? (On / Off)")
rsi7_Raising_1h     = input(false, title="RSI 7 Raising? (On / Off)")

rsi14_min_1h        = input(20, title="RSI 14 - Min")
rsi14_max_1h        = input(80, title="RSI 14 - Max")
rsi14_Use_1h        = input(false, title="RSI 14 ? (On / Off)")
rsi14_Raising_1h    = input(false, title="RSI 14 Raising? (On / Off)") 

stoch_min_1h        = input(20, title="STOCH 14 3 3 - Min")
stoch_max_1h        = input(80, title="STOCH 14 3 3 - Max")
stoch_Use_1h        = input(false, title="STOCH 14 3 3 ? (On / Off)")
stoch_Raising_1h    = input(false, title="STOCH 14 3 3 Raising? (On / Off)")

stochrsi_min_1h     = input(20, title="STOCHRSI 14 14 3 3 - Min")
stochrsi_max_1h     = input(80, title="STOCHRSI 14 14 3 3 - Max")
stochrsi_Use_1h     = input(false, title="STOCHRSI 14 14 3 3 ? (On / Off)")
stochrsi_Raising_1h = input(false, title="STOCHRSI 14 14 3 3 Raising? (On / Off)") 

cci_min_1h          = input(20, title="CCI 20 - Min")
cci_max_1h          = input(80, title="CCI 20 - Max")
cci_Use_1h          = input(false, title="CCI 20 ? (On / Off)")
cci_Raising_1h      = input(false, title="CCII 20 Raising? (On / Off)")

rsi14_1h            = request.security(syminfo.tickerid, "60", rsi(close,14) )
rsi7_1h             = request.security(syminfo.tickerid, "60", rsi(close,7) )
stoch_1h            = request.security(syminfo.tickerid, "60", sma(sma(stoch(close, high, low, 14), 3), 3))
stochrsi_1h         = request.security(syminfo.tickerid, "60", sma(sma(stoch(rsi(close,14), rsi(close,14), rsi(close,14), 14), 3), 3))
cci_1h              = request.security(syminfo.tickerid, "60", cci(close,20) )

rsi7_1h_logic        = true
rsi7_1h_raisinglogic = true
if rsi7_Use_1h
    rsi7_1h_logic = false
    rsi7_1h_raisinglogic = rsi7_Raising_1h?rising(rsi7_1h,1):true
    if rsi7_1h>rsi7_min_1h and rsi7_1h<rsi7_max_1h and rsi7_1h_raisinglogic
        rsi7_1h_logic = true

rsi14_1h_logic        = true
rsi14_1h_raisinglogic = true
if rsi14_Use_1h
    rsi14_1h_logic = false
    rsi14_1h_raisinglogic = rsi14_Raising_1h?rising(rsi14_1h,1):true
    if rsi14_1h>rsi14_min_1h and rsi14_1h<rsi14_max_1h and rsi14_1h_raisinglogic
        rsi14_1h_logic = true

stoch_1h_logic        = true
stoch_1h_raisinglogic = true
if stoch_Use_1h
    stoch_1h_logic = false
    stoch_1h_raisinglogic = stoch_Raising_1h?rising(stoch_1h,1):true
    if stoch_1h>stoch_min_1h and stoch_1h<stoch_max_1h and stoch_1h_raisinglogic
        stoch_1h_logic = true

stochrsi_1h_logic        = true
stochrsi_1h_raisinglogic = true
if stochrsi_Use_1h
    stochrsi_1h_logic = false
    stochrsi_1h_raisinglogic = stochrsi_Raising_1h?rising(stochrsi_1h,1):true
    if stochrsi_1h>stochrsi_min_1h and stochrsi_1h<stochrsi_max_1h and stochrsi_1h_raisinglogic
        stochrsi_1h_logic = true

cci_1h_logic        = true
cci_1h_raisinglogic = true
if cci_Use_1h
    cci_1h_logic = false
    cci_1h_raisinglogic = cci_Raising_1h?rising(cci_1h,1):true
    if cci_1h>cci_min_1h and cci_1h<cci_max_1h and cci_1h_raisinglogic
        cci_1h_logic = true

bool_1h = false
bool_1h := rsi7_1h_logic and rsi7_1h_raisinglogic and
 rsi14_1h_logic and rsi14_1h_raisinglogic and
 stoch_1h_logic and stoch_1h_raisinglogic and
 stochrsi_1h_logic and stochrsi_1h_raisinglogic and
 cci_1h_logic and cci_1h_raisinglogic

if not rsi7_Use_1h and not rsi14_Use_1h and not stoch_Use_1h and not stochrsi_Use_1h and not cci_Use_1h
    bool_1h = false

/// ******************* 4h ***************************
ma_sep_4h           = input(false, title="⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻  4h ⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻")
rsi7_min_4h         = input(20, title="RSI 7 - Min")
rsi7_max_4h         = input(80, title="RSI 7 - Max")
rsi7_Use_4h         = input(false, title="RSI 7 ? (On / Off)")
rsi7_Raising_4h     = input(false, title="RSI 7 Raising? (On / Off)")

rsi14_min_4h        = input(20, title="RSI 14 - Min")
rsi14_max_4h        = input(80, title="RSI 14 - Max")
rsi14_Use_4h        = input(false, title="RSI 14 ? (On / Off)")
rsi14_Raising_4h    = input(false, title="RSI 14 Raising? (On / Off)") 

stoch_min_4h        = input(20, title="STOCH 14 3 3 - Min")
stoch_max_4h        = input(80, title="STOCH 14 3 3 - Max")
stoch_Use_4h        = input(false, title="STOCH 14 3 3 ? (On / Off)")
stoch_Raising_4h    = input(false, title="STOCH 14 3 3 Raising? (On / Off)")

stochrsi_min_4h     = input(20, title="STOCHRSI 14 14 3 3 - Min")
stochrsi_max_4h     = input(80, title="STOCHRSI 14 14 3 3 - Max")
stochrsi_Use_4h     = input(false, title="STOCHRSI 14 14 3 3 ? (On / Off)")
stochrsi_Raising_4h = input(false, title="STOCHRSI 14 14 3 3 Raising? (On / Off)") 

cci_min_4h          = input(20, title="CCI 20 - Min")
cci_max_4h          = input(80, title="CCI 20 - Max")
cci_Use_4h          = input(false, title="CCI 20 ? (On / Off)")
cci_Raising_4h      = input(false, title="CCII 20 Raising? (On / Off)")

rsi14_4h            = request.security(syminfo.tickerid, "240", rsi(close,14) )
rsi7_4h             = request.security(syminfo.tickerid, "240", rsi(close,7) )
stoch_4h            = request.security(syminfo.tickerid, "240", sma(sma(stoch(close, high, low, 14), 3), 3))
stochrsi_4h         = request.security(syminfo.tickerid, "240", sma(sma(stoch(rsi(close,14), rsi(close,14), rsi(close,14), 14), 3), 3))
cci_4h              = request.security(syminfo.tickerid, "240", cci(close,20) )

rsi7_4h_logic        = true
rsi7_4h_raisinglogic = true
if rsi7_Use_4h
    rsi7_4h_logic = false
    rsi7_4h_raisinglogic = rsi7_Raising_4h?rising(rsi7_4h,1):true
    if rsi7_4h>rsi7_min_4h and rsi7_4h<rsi7_max_4h and rsi7_4h_raisinglogic
        rsi7_4h_logic = true

rsi14_4h_logic        = true
rsi14_4h_raisinglogic = true
if rsi14_Use_4h
    rsi14_4h_logic = false
    rsi14_4h_raisinglogic = rsi14_Raising_4h?rising(rsi14_4h,1):true
    if rsi14_4h>rsi14_min_4h and rsi14_4h<rsi14_max_4h and rsi14_4h_raisinglogic
        rsi14_4h_logic = true

stoch_4h_logic        = true
stoch_4h_raisinglogic = true
if stoch_Use_4h
    stoch_4h_logic = false
    stoch_4h_raisinglogic = stoch_Raising_4h?rising(stoch_4h,1):true
    if stoch_4h>stoch_min_4h and stoch_4h<stoch_max_4h and stoch_4h_raisinglogic
        stoch_4h_logic = true

stochrsi_4h_logic        = true
stochrsi_4h_raisinglogic = true
if stochrsi_Use_4h
    stochrsi_4h_logic = false
    stochrsi_4h_raisinglogic = stochrsi_Raising_4h?rising(stochrsi_4h,1):true
    if stochrsi_4h>stochrsi_min_4h and stochrsi_4h<stochrsi_max_4h and stochrsi_4h_raisinglogic
        stochrsi_4h_logic = true

cci_4h_logic        = true
cci_4h_raisinglogic = true
if cci_Use_4h
    cci_4h_logic = false
    cci_4h_raisinglogic = cci_Raising_4h?rising(cci_4h,1):true
    if cci_4h>cci_min_4h and cci_4h<cci_max_4h and cci_4h_raisinglogic
        cci_4h_logic = true

bool_4h = false
bool_4h := rsi7_4h_logic and rsi7_4h_raisinglogic and
 rsi14_4h_logic and rsi14_4h_raisinglogic and
 stoch_4h_logic and stoch_4h_raisinglogic and
 stochrsi_4h_logic and stochrsi_4h_raisinglogic and
 cci_4h_logic and cci_4h_raisinglogic

if not rsi7_Use_4h and not rsi14_Use_4h and not stoch_Use_4h and not stochrsi_Use_4h and not cci_Use_4h
    bool_4h = false

/// ******************* 1d ***************************
ma_sep_1d           = input(false, title="⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻  1d ⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻")
rsi7_min_1d         = input(20, title="RSI 7 - Min")
rsi7_max_1d         = input(80, title="RSI 7 - Max")
rsi7_Use_1d         = input(false, title="RSI 7 ? (On / Off)")
rsi7_Raising_1d     = input(false, title="RSI 7 Raising? (On / Off)")

rsi14_min_1d        = input(20, title="RSI 14 - Min")
rsi14_max_1d        = input(80, title="RSI 14 - Max")
rsi14_Use_1d        = input(false, title="RSI 14 ? (On / Off)")
rsi14_Raising_1d    = input(false, title="RSI 14 Raising? (On / Off)") 

stoch_min_1d        = input(20, title="STOCH 14 3 3 - Min")
stoch_max_1d        = input(80, title="STOCH 14 3 3 - Max")
stoch_Use_1d        = input(false, title="STOCH 14 3 3 ? (On / Off)")
stoch_Raising_1d    = input(false, title="STOCH 14 3 3 Raising? (On / Off)")

stochrsi_min_1d     = input(20, title="STOCHRSI 14 14 3 3 - Min")
stochrsi_max_1d     = input(80, title="STOCHRSI 14 14 3 3 - Max")
stochrsi_Use_1d     = input(false, title="STOCHRSI 14 14 3 3 ? (On / Off)")
stochrsi_Raising_1d = input(false, title="STOCHRSI 14 14 3 3 Raising? (On / Off)") 

cci_min_1d          = input(20, title="CCI 20 - Min")
cci_max_1d          = input(80, title="CCI 20 - Max")
cci_Use_1d          = input(false, title="CCI 20 ? (On / Off)")
cci_Raising_1d      = input(false, title="CCII 20 Raising? (On / Off)")

rsi14_1d            = request.security(syminfo.tickerid, "1440", rsi(close,14) )
rsi7_1d             = request.security(syminfo.tickerid, "1440", rsi(close,7) )
stoch_1d            = request.security(syminfo.tickerid, "1440", sma(sma(stoch(close, high, low, 14), 3), 3))
stochrsi_1d         = request.security(syminfo.tickerid, "1440", sma(sma(stoch(rsi(close,14), rsi(close,14), rsi(close,14), 14), 3), 3))
cci_1d              = request.security(syminfo.tickerid, "1440", cci(close,20) )

rsi7_1d_logic        = true
rsi7_1d_raisinglogic = true
if rsi7_Use_1d
    rsi7_1d_logic = false
    rsi7_1d_raisinglogic = rsi7_Raising_1d?rising(rsi7_1d,1):true
    if rsi7_1d>rsi7_min_1d and rsi7_1d<rsi7_max_1d and rsi7_1d_raisinglogic
        rsi7_1d_logic = true

rsi14_1d_logic        = true
rsi14_1d_raisinglogic = true
if rsi14_Use_1d
    rsi14_1d_logic = false
    rsi14_1d_raisinglogic = rsi14_Raising_1d?rising(rsi14_1d,1):true
    if rsi14_1d>rsi14_min_1d and rsi14_1d<rsi14_max_1d and rsi14_1d_raisinglogic
        rsi14_1d_logic = true

stoch_1d_logic        = true
stoch_1d_raisinglogic = true
if stoch_Use_1d
    stoch_1d_logic = false
    stoch_1d_raisinglogic = stoch_Raising_1d?rising(stoch_1d,1):true
    if stoch_1d>stoch_min_1d and stoch_1d<stoch_max_1d and stoch_1d_raisinglogic
        stoch_1d_logic = true

stochrsi_1d_logic        = true
stochrsi_1d_raisinglogic = true
if stochrsi_Use_1d
    stochrsi_1d_logic = false
    stochrsi_1d_raisinglogic = stochrsi_Raising_1d?rising(stochrsi_1d,1):true
    if stochrsi_1d>stochrsi_min_1d and stochrsi_1d<stochrsi_max_1d and stochrsi_1d_raisinglogic
        stochrsi_1d_logic = true

cci_1d_logic        = true
cci_1d_raisinglogic = true
if cci_Use_1d
    cci_1d_logic = false
    cci_1d_raisinglogic = cci_Raising_1d?rising(cci_1d,1):true
    if cci_1d>cci_min_1d and cci_1d<cci_max_1d and cci_1d_raisinglogic
        cci_1d_logic = true

bool_1d = false
bool_1d := rsi7_1d_logic and rsi7_1d_raisinglogic and
 rsi14_1d_logic and rsi14_1d_raisinglogic and
 stoch_1d_logic and stoch_1d_raisinglogic and
 stochrsi_1d_logic and stochrsi_1d_raisinglogic and
 cci_1d_logic and cci_1d_raisinglogic

if not rsi7_Use_1d and not rsi14_Use_1d and not stoch_Use_1d and not stochrsi_Use_1d and not cci_Use_1d
    bool_1d = false

//// Big old logic
buy  = bool_1m and bool_5m and bool_15m and bool_1h and bool_4h and bool_1d and pc_logic
sell = false

//////////////////////////////////////////////////////////////////////////////////////////
//*** This Trade Management Section of code is a modified version of that found in   ***//
//*** "How to automate this strategy for free using a chrome extension" by CryptoRox ***//
//*** Modifications and tradeState engine by JustUncleL.                             ***// 
//////////////////////////////////////////////////////////////////////////////////////////
//

///////////////////////////////////////////////
//* Backtesting Period Selector | Component *//
///////////////////////////////////////////////

//* https://www.tradingview.com/script/eCC1cvxQ-Backtesting-Period-Selector-Component *//
//* https://www.tradingview.com/u/pbergden/ *//
//* Modifications made by JustUncleL*//

testStartYear   = input(2018, "Backtest Start Year",minval=1980)
testStartMonth  = input(9, "Backtest Start Month",minval=1,maxval=12)
testStartDay    = input(15, "Backtest Start Day",minval=1,maxval=31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear    = input(9999, "Backtest Stop Year",minval=1980)
testStopMonth   = input(12, "Backtest Stop Month",minval=1,maxval=12)
testStopDay     = input(31, "Backtest Stop Day",minval=1,maxval=31)
testPeriodStop  = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

//////////////////////////
//* Strategy Component *//
//////////////////////////
high_ = high
low_  = low

AQUA = #00FFFFFF
BLUE = #0000FFFF
RED  = #FF0000FF
LIME = #00FF00FF
GRAY = #808080FF
DARKRED   = #8B0000FF
DARKGREEN = #006400FF
//
//fastExit  = input(false,title="Use Opposite Trade as a Close Signal")
//clrBars   = input(true,title="Colour Candles to Trade Order state")

fastExit = true
clrBars  = false
 
//orderType = input("LongsOnly",title="What type of Orders", options=["Longs+Shorts","LongsOnly","ShortsOnly","Flip"])
orderType = "LongsOnly"
//
isLong   = (orderType != "ShortsOnly")
isShort  = (orderType != "LongsOnly")

//////////////////////////////////////////////////
//* Put Entry and special Exit conditions here *//
//////////////////////////////////////////////////

//////////////////////////
//* tradeState Engine  *//
INACTIVE    = 0   // No trades open
ACTIVELONG  = 1   // Long Trade Started
ACTIVESHORT = -1  // Short Trade Started
//
//////////////////////////

// Keep track of current trade state
longClose = false, longClose := nz(longClose[1],false)
shortClose = false, shortClose := nz(shortClose[1],false)
tradeState = INACTIVE, tradeState := nz(tradeState[1])
tradeState := tradeState==INACTIVE ?   buy==1 and (barstate.isconfirmed or barstate.ishistory) and isLong and not longClose and not shortClose? ACTIVELONG :
                               sell==1  and (barstate.isconfirmed or barstate.ishistory) and isShort and not longClose and not shortClose? ACTIVESHORT : 
                          tradeState : tradeState

//Entry Triggers, this happens when tradeState changes from neutral to active
longCondition  = false
shortCondition = false
longCondition  := change(tradeState) and tradeState==ACTIVELONG
shortCondition := change(tradeState) and tradeState==ACTIVESHORT
if orderType=="Flip"
    temp = longCondition
    longCondition  := shortCondition
    shortCondition := temp
//end if

//SPECIAL Exit Condition.
// Exit on Average Fast/Slow MA cross over, force no repaint
longExitC  =  sell ? 1 : 0
shortExitC = 0

// Exit Trigger without SL set and trade Actine
longExit = change(longExitC) and longExitC==1 and tradeState==1
shortExit = change(shortExitC) and shortExitC==1 and tradeState==-1

// -- debugs
//plotchar(tradeState,"tradeState at Event",location=location.bottom, color=na)
//plotchar(longCondition, title="longCondition",color=na)
//plotchar(shortCondition, title="shortCondition",color=na)
//plotchar(tradeState, title="tradeState",color=na)
// -- /debugs

/////////////////////////////////////
//======[ Deal Entry Prices ]======//
/////////////////////////////////////

last_open_longCondition = na
last_open_shortCondition = na
last_open_longCondition := longCondition ? close : nz(last_open_longCondition[1])
last_open_shortCondition := shortCondition ? close : nz(last_open_shortCondition[1])

//////////////////////////////////
//======[ Position State ]======//
//////////////////////////////////

in_longCondition  = tradeState == ACTIVELONG
in_shortCondition = tradeState == ACTIVESHORT

/////////////////////////////////
//======[ Trailing Stop ]======//
/////////////////////////////////

// This Trailing Stop Starts as soon as trade is Started
isTS = input(false, "Trailing Stop")
ts   = input(3.0, "Trailing Stop (%)", minval=0,step=0.1, type=float) /100

// Initialise and track highs and lows
short_ts = false, long_ts = false
last_high = 0.0, last_high := nz(last_high[1],na)
last_low = 0.0, last_low := nz(last_low[1],na)
last_high_short = 0.0, last_high_short := nz(last_high_short[1],na)
last_low_long = 0.0, last_low_long := nz(last_low_long[1],na)

// LONGS TSL
if in_longCondition == true
    last_high :=  (na(last_high) or high_ > last_high) ? high_ : last_high
    last_low_long :=  (na(last_low_long) or low_ < last_low_long) ? low_ : last_low_long
    long_ts :=  isTS and (low_ <= last_high - last_high * ts)
//else
if in_longCondition == false
    long_ts := false
    last_high := na
    last_low_long := na
//end if

//SHORTS TSL
if in_shortCondition == true
    last_low := (na(last_low) or low_ < last_low) ? low_ : last_low
    last_high_short := (na(last_high_short) or high_ > last_high_short) ? high_ : last_high_short
    short_ts := isTS and (high_ >= last_low + last_low * ts)
if in_shortCondition == false
    short_ts := false
    last_low := na
    last_high_short := na
//end if

///////////////////////////////
//======[ Take Profit ]======//
///////////////////////////////

isTP = input(true, "Take Profit")
tp   = input(1.0, "Take Profit (%)",minval=0,step=0.1,type=float) / 100
ttp  = input(0.0, "Trailing Profit (%)",minval=0,step=0.1,type=float) / 100
ttp := ttp>tp ? tp : ttp

long_tp  = isTP and in_longCondition  and (last_high >= last_open_longCondition + last_open_longCondition * tp)  and (low_ <= last_high - last_high * ttp)
short_tp = isTP and in_shortCondition and (last_low <= last_open_shortCondition - last_open_shortCondition * tp) and (high_ >= last_low + last_low * ttp)

/////////////////////////////
//======[ Stop Loss ]======//
/////////////////////////////

isSL     = input(true, "Stop Loss")
sl       = input(3.0, "Stop Loss (%)", minval=0,step=0.1, type=float) / 100
long_sl  =  isSL and in_longCondition and (low_ <= last_open_longCondition - last_open_longCondition * sl)
short_sl = isSL and in_shortCondition and (high_ >= last_open_shortCondition + last_open_shortCondition * sl)

////////////////////////////////////
//======[ Stop on Opposite ]======//
////////////////////////////////////

//NOTE Short exit signal is non-repainting, no need to force it, if Pyramiding keep going
long_sos = (fastExit or (not isTS and not isSL)) and longExit and in_longCondition
short_sos = (fastExit or (not isTS and not isSL)) and shortExit and in_shortCondition 

/////////////////////////////////
//======[ Close Signals ]======//
/////////////////////////////////

// Create a single close for all the different closing conditions, all conditions here are non-repainting
longClose  := isLong and (long_tp or long_sl or long_ts or long_sos) and not longCondition
shortClose := isShort and (short_tp or short_sl or short_ts or short_sos) and not shortCondition

///////////////////////////////
//======[ Plot Colors ]======//
///////////////////////////////

longCloseCol = na
shortCloseCol = na
longCloseCol := long_tp ? green : long_sl ? maroon : long_ts ? purple : long_sos ? orange :longCloseCol[1]
shortCloseCol := short_tp ? green : short_sl ? maroon : short_ts ? purple : short_sos ? orange : shortCloseCol[1]
//
tpColor = isTP and in_longCondition ? lime : isTP and in_shortCondition ? lime : na
slColor = isSL and in_longCondition ? red : isSL and in_shortCondition ? red : na

//////////////////////////////////
//======[ Strategy Plots ]======//
//////////////////////////////////

//LONGS
plot(isTS and in_longCondition?
     last_high - last_high * ts : na, "Buy Trailing", fuchsia, style=2, linewidth=1,offset=1)
plot(isTP and in_longCondition and last_high < last_open_longCondition + last_open_longCondition * tp ? 
     last_open_longCondition + last_open_longCondition * tp : na, "Long TP Active", tpColor, style=3,join=false, linewidth=1,offset=1)
plot(isTP and in_longCondition and last_high >= last_open_longCondition +  last_open_longCondition * tp ? 
     last_high - last_high * ttp : na, "Buy Trailing", black, style=2, linewidth=1,offset=1)
plot(isSL and in_longCondition and last_low_long > last_open_longCondition - last_open_longCondition * sl ? 
     last_open_longCondition - last_open_longCondition * sl : na, "Long SL", slColor, style=3,join=false, linewidth=1,offset=1)

//SHORTS
plot(isTS and in_shortCondition?
     last_low + last_low * ts : na, "Short Trailing", fuchsia, style=2, linewidth=1,offset=1)
plot(isTP and in_shortCondition and last_low > last_open_shortCondition - last_open_shortCondition * tp ? 
     last_open_shortCondition - last_open_shortCondition * tp : na, "Short TP Active", tpColor, style=3,join=false, linewidth=1,offset=1)
plot(isTP and in_shortCondition and last_low <= last_open_shortCondition -  last_open_shortCondition * tp ? 
     last_low + last_low * ttp : na, "Short Trailing", black, style=2, linewidth=1,offset=1)
plot(isSL and in_shortCondition and last_high_short < last_open_shortCondition + last_open_shortCondition * sl ? 
     last_open_shortCondition + last_open_shortCondition * sl : na, "Short SL", slColor, style=3,join=false, linewidth=1,offset=1)

// Colour code the candles for Profit/Loss: Profit=LIGHT colour,  Loss=DARK colour 
bclr = not clrBars ? na : tradeState==INACTIVE ? GRAY : 
                          in_longCondition ? close<last_open_longCondition? DARKGREEN : LIME :
                          in_shortCondition ? close>last_open_shortCondition? DARKRED : RED : GRAY
barcolor(bclr,title="Trade State Bar Colouring")

///////////////////////////////
//======[ Alert Plots ]======//
///////////////////////////////

//BUY SELL APEX
//plotshape(longCondition?close:na, title="Buy", color=green, textcolor=green, transp=0, 
//         style=shape.triangleup, location=location.belowbar, size=size.small,text="Buy",offset=0)
//plotshape(longClose?close:na,    title="Sell", color=longCloseCol, textcolor=white, transp=0, 
//          style=shape.labeldown, location=location.abovebar, size=size.small,text="Sell",offset=0)
          
// //SHORTS
// plotshape(shortCondition?close:na, title="Short", color=red, textcolor=red, transp=0, 
//           style=shape.triangledown, location=location.abovebar, size=size.small,text="SHORT",offset=0)
// plotshape(shortClose?close:na, title="Short Close", color=shortCloseCol, textcolor=white, transp=0, 
//           style=shape.labelup, location=location.belowbar, size=size.small,text="Short",offset=0)

// Autoview alert syntax - This assumes you are trading coins BUY and SELL on Binance Exchange
// WARNING*** Only use Autoview to automate a strategy after you've sufficiently backtested and forward tested the strategy.
// You can learn more about the syntax here:
//      http://autoview.with.pink/#syntax and you can watch this video here: https://www.youtube.com/watch?v=epN5Tjinuxw

// For the opens you will want to trigger BUY orders on LONGS (eg ETHBTC) with alert option "Once Per Bar Close"
// and SELL orders on SHORTS (eg BTCUSDT)
//      b=buy q=0.001 e=binance s=ethbtc  u=currency t=market  ( LONG )
// or   b=sell q=0.001 e=binance s=btcusdt t=market ( SHORT )
alerts = input(false,  title="Turn ON Tradingview Alerts ? ")
alertcondition(alerts?longCondition:na, "Buy", "BUY")
//alertcondition(shortCondition, "Open Short", "SHORT")

// For the closes you will want to trigger these alerts on condition with alert option "Once Per Bar"
// (NOTE: with Renko you can only use "Once Per Bar Close" option)
//      b=sell q=99% e=binance s=ethbtc t=market  ( CLOSE LONGS )
// or   b=buy q=99% e=binance s=btcusdt  u=currency t=market  ( CLOSE SHORTS )
// This gets it as it happens and typically results in a better exit live than in the backtest. 
// It works really well for counteracting some market slippage
alertcondition(alerts?longClose:na, "Sell", "SELL")
//alertcondition(shortClose, "Close Shorts", "CLOSE SHORTS")

////////////////////////////////////////////
//======[ Strategy Entry and Exits ]======//
////////////////////////////////////////////

if testPeriod() and isLong
    strategy.entry("Long", 1, when=longCondition)
    strategy.close("Long", when=longClose )

//if testPeriod() and isShort
//    strategy.entry("Short", 0,  when=shortCondition)
//    strategy.close("Short", when=shortClose )
    
// --- Debugs
//plotchar(longExit,title="longExit",location=location.bottom,color=na)
//plotchar(longCondition,title="longCondition",location=location.bottom,color=na)
//plotchar(in_longCondition,title="in_longCondition",location=location.bottom,color=na)
//plotchar(longClose,title="longClose",location=location.bottom,color=na,color=na)
//plotchar(buy,title="buy",location=location.bottom,color=na)
// --- /Debugs

///////////////////////////////////
//======[ Reset Variables ]======//
///////////////////////////////////

if longClose or shortClose
    tradeState := INACTIVE
    in_longCondition := false
    in_shortCondition := false
    last_low := na
    last_low_long := na
    last_high := na
    last_high_short := na

// EOF


//-- SUPPORT/RESISTANCE LINES    by:ByDipsOnly and Allcoast ----------------------------------------------------------------------------- 
sr_sep             = input(false, title="⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻ S/R Lines  ⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻⎻")
show_SPlines_input = input(false, "Show S/R Lines")
tf = timeframe.period

vamp = input(title="VolumeMA", defval=6)
vam = sma(volume, vamp)

upside = high[3]>high[4] and high[4]>high[5] and high[2]<high[3] and high[1]<high[2] and volume[3]>vam[3]
downside = low[3]<low[4] and low[4]<low[5] and low[2]>low[3] and low[1]>low[2] and volume[3]>vam[3]


calcup() =>
    fractalup = na
    fractalup := upside ? high[3] : fractalup[1]

calcdown() =>
    fractaldown = na
    fractaldown := downside ? low[3] : fractaldown[1]

fuptf = request.security(syminfo.tickerid,tf == "current" ? period : tf, calcup())
fdowntf = request.security(syminfo.tickerid,tf == "current" ? period : tf, calcdown())

plotup = show_SPlines_input==true?fuptf:na
plotdown = show_SPlines_input==true?fdowntf:na
plot(plotup, "FractalUp", color=yellow, linewidth=1, style=cross, transp=0, offset =-3, join=false)
plot(plotdown, "FractalDown", color=blue, linewidth=1, style=cross, transp=0, offset=-3, join=false)

fractalupalert = na
fractalup = na
fractalup := upside ? high[3] : fractalup[1]
fractalupalert := high[3] > open or fractalup[1] > open
alertcondition(show_SPlines_input?fractalupalert:na, title="R Line", message='R Line')
//-- END SUPPORT/RESISTANCE LINES -------------------------------------------------------------------------------------------


もっと