Momentum Breakout Strategi

Penulis:ChaoZhang, Tanggal: 2023-11-07 17:13:20
Tag:

img

Gambaran umum

Ini adalah strategi yang menggunakan indikator MACD, RSI dan Stochastic untuk menentukan arah momentum harga dan membuat entri panjang atau pendek pada titik pecah momentum. Dengan menggabungkan beberapa indikator untuk menilai tren, ini mengurangi tingkat sinyal palsu dari indikator tunggal dan dapat secara efektif menangkap tren harga jangka menengah.

Prinsip

Strategi ini menggunakan indikator MACD, RSI dan Stochastic untuk menentukan arah tren harga. Ketika garis DIFF MACD melintasi di atas garis DEAL, RSI lebih besar dari 50, dan garis cepat STOCH juga lebih besar dari 50, ini dinilai sebagai pembentukan tren bullish, sehingga akan panjang pada harga pembukaan hari berikutnya dengan semua modal pada harga tertinggi hari itu; Sebaliknya, ketika garis DIFF MACD melintasi di bawah garis DEAL, RSI kurang dari 50, dan garis cepat STOCH juga kurang dari 50, ini dinilai sebagai pembentukan tren bearish, sehingga akan mengambil harga pendek pada hari berikutnya dengan semua harga pembukaan pada kisaran harga terendah hari itu. Keuntungan dan stop loss dihitung berdasarkan fluktuasi harga 7 hari yang lalu, dan rasio profit/loss dapat disesuaikan.

Setelah memasuki posisi, jika salah satu dari tiga indikator menghasilkan sinyal terbalik, itu berarti tren telah berbalik dan harus keluar dari posisi saat ini.

Keuntungan

  • Menggabungkan beberapa indikator untuk menilai tren dapat secara efektif menyaring sinyal palsu
  • Mengambil keuntungan dari breakout dapat menangkap tahap awal tren
  • Menggunakan mengambil keuntungan dinamis dan stop loss dapat mengunci keuntungan yang wajar
  • Melewatkan periode dapat mencegah gangguan dari pasar ekstrim
  • Menggabungkan mekanisme mengikuti tren dan membalikkan dapat mengurangi perdagangan yang tidak perlu

Risiko

  • Kombinasi beberapa indikator dapat menyebabkan keterlambatan, kehilangan waktu masuk terbaik
  • Sinyal breakout cenderung terperangkap
  • Dinamis berhenti mungkin terlalu agresif dan dihentikan oleh Preis
  • Melewatkan periode khusus dapat kehilangan kesempatan jika dikonfigurasi dengan tidak benar
  • Sinyal pembalikan mungkin terlalu sensitif yang menyebabkan over-trading

Arah perbaikan:

  • Sesuaikan parameter indikator untuk mengurangi lag
  • Tambahkan filter seperti volume untuk menghindari perangkap
  • Gunakan tracker berhenti untuk mencegah Preis berhenti
  • Mengoptimalkan dan menguji kisaran tanggal yang dilewatkan
  • Parameter sinyal pembalikan untuk mengurangi frekuensi

Ringkasan

Secara keseluruhan ini adalah strategi trend following yang khas. Ini menggunakan beberapa indikator untuk menentukan tren untuk entri, dan sinyal pembalikan untuk menilai akhir tren untuk keluar, menggabungkan kedua mekanisme trend following dan pembalikan. Tetapi strategi itu sendiri juga memiliki beberapa pengaturan parameter yang tidak tepat dan masalah lag yang membutuhkan banyak backtesting untuk mengoptimalkan dan meningkatkan, untuk menyesuaikan semua parameter strategi ke keadaan optimal mereka.

Dalam kesimpulan, logika strategi ini jelas, dan indikator yang digunakan juga khas. Ini melakukan dengan baik dalam beberapa detail pengoptimalan dan pengendalian risiko, dan dapat menjadi strategi kuantum yang dapat diterapkan di dunia nyata. Tetapi masih ada beberapa kesenjangan dari kesempurnaan, yang membutuhkan pengujian dan pengoptimalan lebih lanjut, untuk mendapatkan rasio pengembalian / penarikan strategi hingga tingkat profesional. Dengan pengoptimalan dan pembaruan terus-menerus, strategi ini dapat menjadi strategi yang layak dilacak jangka panjang.


/*backtest
start: 2023-10-07 00:00:00
end: 2023-11-06 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Backtest the power x strategy. The power x strategy is develop by Markus Heitkoetter and Rockwell Trading.
// This script shows the return for a given stock for with the defined date range with a fixed captial of $10,000
strategy("PowerX Test", overlay=true, initial_capital=10000)

// ####################### Start of User Inputs #######################
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 7, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

// Risk/Reward Inputs
riskFactor = input(defval = 1.5, title = "risk", minval = 1)
rewardFactor = input(defval = 3.0, title = "reward", minval = 1)

// Days to ignore due to specail market conditon (ie. covid-19 market crash)
// Calculate start/end skip date and time condition
startSkipDate = timestamp(2020, 3, 1, 00, 00)
finishSkipDate = timestamp(2020, 3, 31, 00, 00)
time_cond_skip = time >= startSkipDate and time <= finishSkipDate

// Long and Short Inputs
hasLong = input(defval = true, title = "test long")
hasShort = input(defval = true, title = "test short")
// ####################### End of User Inputs #######################

// ####################### Start of Indicators #######################
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
rsiLine = rsi(close, 7)
stochLine = sma(sma(stoch(close, high, low, 14),3),3)
signal = macdLine > signalLine and rsiLine > 50 and stochLine > 50 ? "buy" : macdLine <= signalLine and rsiLine <= 50 and stochLine <= 50 ? "sell" : "none"

// Average daily range for 7 days
thishigh = security(syminfo.tickerid, 'D', high)
thislow  = security(syminfo.tickerid, 'D', low)
length = 7
adr = (sma(thishigh,length)-sma(thislow,length))
plotchar(adr, "ADR", "")
// ####################### End of Indicators #######################
strategy.initial_capital = 50000
// First day the stock changed momentum.
long = signal == "buy" and signal[1] != "buy" and hasLong
short = signal == "sell" and signal[1] != "sell" and hasShort
sideway = signal == "none" and signal[1] != "none"

if (time_cond and not time_cond_skip)
    // ####################### Start of Long Entry #######################
    // Calculate how many shares to buy based on captial
    qty = round(strategy.initial_capital / high)
    // Note: TradingView uses a broker emulator when running strategies. Order are only filled on the next bar.
    // Enter long on the day after first green bar
    strategy.entry("Long entry", strategy.long, qty = qty, stop = high, when = long)
    strategy.cancel("Long entry", when = not long)
    
    // TODO: Improve the crazy if statments...
    // Handle the case where first green hgih is reached after 2nd green, up to 11 days after
    if (not long and signal == "buy" and strategy.opentrades == 0)
        // reach first green high 11 days after first green
        if (signal[11] != "buy" and signal[10] == "buy" and signal[9] == "buy" and signal[8] == "buy" and signal[7] == "buy" and signal[6] == "buy" and signal[5] == "buy" and signal[4] == "buy" and signal[3] == "buy" and signal[2] == "buy" and signal[1] == "buy" and high[1] < high[9] and high[2] < high[9] and high [3] < high[9] and high [4] < high[9] and high [5] < high[9] and high[6] < high[9] and high[7] < high[9] and high[8] < high[9])
            strategy.entry("Long entry", strategy.long, qty = strategy.initial_capital / high[10], stop = high[10])
        // reach first green high 10 days after first green
        if (signal[10] != "buy" and signal[9] == "buy" and signal[8] == "buy" and signal[7] == "buy" and signal[6] == "buy" and signal[5] == "buy" and signal[4] == "buy" and signal[3] == "buy" and signal[2] == "buy" and signal[1] == "buy" and high[1] < high[8] and high[2] < high[8] and high [3] < high[8] and high [4] < high[8] and high [5] < high[8] and high[6] < high[8] and high[7] < high[8])
            strategy.entry("Long entry", strategy.long, qty = strategy.initial_capital / high[9], stop = high[9])
        // reach first green high 9 days after first green
        if (signal[9] != "buy" and signal[8] == "buy" and signal[7] == "buy" and signal[6] == "buy" and signal[5] == "buy" and signal[4] == "buy" and signal[3] == "buy" and signal[2] == "buy" and signal[1] == "buy" and high[1] < high[7] and high[2] < high[7] and high [3] < high[7] and high [4] < high[7] and high [5] < high[7] and high[6] < high[7])
            strategy.entry("Long entry", strategy.long, qty = strategy.initial_capital / high[8], stop = high[8])
        // reach first green high 8 days after first green
        if (signal[8] != "buy" and signal[7] == "buy" and signal[6] == "buy" and signal[5] == "buy" and signal[4] == "buy" and signal[3] == "buy" and signal[2] == "buy" and signal[1] == "buy" and high[1] < high[6] and high[2] < high[6] and high [3] < high[6] and high [4] < high[6] and high [5] < high[6])
            strategy.entry("Long entry", strategy.long, qty = strategy.initial_capital / high[7], stop = high[7])
        // reach first green high 7 days after first green
        if (signal[7] != "buy" and signal[6] == "buy" and signal[5] == "buy" and signal[4] == "buy" and signal[3] == "buy" and signal[2] == "buy" and signal[1] == "buy" and high[1] < high[6] and high[2] < high[6] and high [3] < high[6] and high [4] < high[6] and high [5] < high[6])
            strategy.entry("Long entry", strategy.long, qty = strategy.initial_capital / high[6], stop = high[6])
        // reach first green high 6 days after first green
        if (signal[6] != "buy" and signal[5] == "buy" and signal[4] == "buy" and signal[3] == "buy" and signal[2] == "buy" and signal[1] == "buy" and high[1] < high[5] and high[2] < high[5] and high [3] < high[5] and high [4] < high[5])
            strategy.entry("Long entry", strategy.long, qty = strategy.initial_capital / high[5], stop = high[5])
        // reach first green high 5 days after first green
        if (signal[5] != "buy" and signal[4] == "buy" and signal[3] == "buy" and signal[2] == "buy" and signal[1] == "buy" and high[1] < high[4] and high[2] < high[4] and high [3] < high[4])
            strategy.entry("Long entry", strategy.long, qty = strategy.initial_capital / high[4], stop = high[4])
        // reach first green high 4 days after first green
        if (signal[4] != "buy" and signal[3] == "buy" and signal[2] == "buy" and signal[1] == "buy" and high[1] < high[3] and high[2] < high[3])
            strategy.entry("Long entry", strategy.long, qty = strategy.initial_capital / high[3], stop = high[3])
        // reach first green high 3 days after first green
        if (signal[3] != "buy" and signal[2] == "buy" and signal[1] == "buy" and high[1] < high[2])
            strategy.entry("Long entry", strategy.long, qty = strategy.initial_capital / high[2], stop = high[2])
        // reach first green high 2 days after first green
        if (signal[2] != "buy" and signal[1] == "buy")
            strategy.entry("Long entry", strategy.long, qty = strategy.initial_capital / high[1], stop = high[1])
            
    // Exit when stopped out or hitted profit target
    // Bracket order for entry 1 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[1] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[1] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 2 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] == "buy" and signal[3] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[2] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[2] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 3 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] == "buy" and signal[3] == "buy" and signal[4] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[3] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[3] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 4 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] == "buy" and signal[3] == "buy" and signal[4] == "buy" and signal[5] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[4] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[4] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 5 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] == "buy" and signal[3] == "buy" and signal[4] == "buy" and signal[5] == "buy" and signal[6] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[5] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[5] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 6 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] == "buy" and signal[3] == "buy" and signal[4] == "buy" and signal[5] == "buy" and signal[6] == "buy" and signal[7] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[6] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[6] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 7 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] == "buy" and signal[3] == "buy" and signal[4] == "buy" and signal[5] == "buy" and signal[6] == "buy" and signal[7] == "buy" and signal[8] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[7] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[7] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 8 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] == "buy" and signal[3] == "buy" and signal[4] == "buy" and signal[5] == "buy" and signal[6] == "buy" and signal[7] == "buy" and signal[8] == "buy" and signal[9] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[8] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[8] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 9 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] == "buy" and signal[3] == "buy" and signal[4] == "buy" and signal[5] == "buy" and signal[6] == "buy" and signal[7] == "buy" and signal[8] == "buy" and signal[9] == "buy" and signal[10] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[9] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[9] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 10 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] == "buy" and signal[3] == "buy" and signal[4] == "buy" and signal[5] == "buy" and signal[6] == "buy" and signal[7] == "buy" and signal[8] == "buy" and signal[9] == "buy" and signal[10] == "buy" and signal[11] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[10] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[10] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 11 day after 1st green
    if (signal == "buy" and signal[1] == "buy" and signal[2] == "buy" and signal[3] == "buy" and signal[4] == "buy" and signal[5] == "buy" and signal[6] == "buy" and signal[7] == "buy" and signal[8] == "buy" and signal[9] == "buy" and signal[10] == "buy" and signal[11] == "buy" and signal[12] != "buy")
        long_stop_level = strategy.position_avg_price - (adr[11] * riskFactor)
        long_profit_level = strategy.position_avg_price + (adr[11] * rewardFactor)
        strategy.exit("TP/SL", "Long entry", stop=long_stop_level, limit=long_profit_level)
    // ####################### End of Long Entry #######################

    // ####################### Start of Short Entry #######################
    // Enter short on the day after first red bar
    qty_short = strategy.initial_capital / low
    strategy.entry("Short entry", strategy.short, qty = qty_short, stop = low, when = short)
    strategy.cancel("Short entry", when = not short)
    
    // TODO: Improve the crazy if statments...
    // Handle the case where first red low is reached after 2nd red, up to 11 days after
    if (not short and signal == "sell" and strategy.opentrades == 0)
        // reach first red low 11 days after
        if (signal[11] != "sell" and signal[10] == "sell" and signal[9] == "sell" and signal[8] == "sell" and signal[7] == "sell" and signal[6] == "sell" and signal[5] == "sell" and signal[4] == "sell" and signal[3] == "sell" and signal[2] == "sell" and signal[1] == "sell" and low[1] > low[10] and low[2] > low[10] and low[3] > low[10] and low[4] > low[10] and low[5] > low[10] and low[6] > low[10] and low[7] > low[10] and low[8] > low[10] and low[9] > low[10])
            strategy.entry("Short entry", strategy.short, qty = strategy.initial_capital / low[10], stop = low[10])
        // reach first red low 10 days after
        if (signal[10] != "sell" and signal[9] == "sell" and signal[8] == "sell" and signal[7] == "sell" and signal[6] == "sell" and signal[5] == "sell" and signal[4] == "sell" and signal[3] == "sell" and signal[2] == "sell" and signal[1] == "sell" and low[1] > low[9] and low[2] > low[9] and low[3] > low[9] and low[4] > low[9] and low[5] > low[9] and low[6] > low[9] and low[7] > low[9] and low[8] > low[9])
            strategy.entry("Short entry", strategy.short, qty = strategy.initial_capital / low[9], stop = low[9])
        // reach first red low 9 days after
        if (signal[9] != "sell" and signal[8] == "sell" and signal[7] == "sell" and signal[6] == "sell" and signal[5] == "sell" and signal[4] == "sell" and signal[3] == "sell" and signal[2] == "sell" and signal[1] == "sell" and low[1] > low[8] and low[2] > low[8] and low[3] > low[8] and low[4] > low[8] and low[5] > low[8] and low[6] > low[8] and low[7] > low[8])
            strategy.entry("Short entry", strategy.short, qty = strategy.initial_capital / low[8], stop = low[8])
        // reach first red low 8 days after
        if (signal[8] != "sell" and signal[7] == "sell" and signal[6] == "sell" and signal[5] == "sell" and signal[4] == "sell" and signal[3] == "sell" and signal[2] == "sell" and signal[1] == "sell" and low[1] > low[7] and low[2] > low[7] and low[3] > low[7] and low[4] > low[7] and low[5] > low[7] and low[6] > low[7])
            strategy.entry("Short entry", strategy.short, qty = strategy.initial_capital / low[7], stop = low[7])
        // reach first red low 7 days after
        if (signal[7] != "sell" and signal[6] == "sell" and signal[5] == "sell" and signal[4] == "sell" and signal[3] == "sell" and signal[2] == "sell" and signal[1] == "sell" and low[1] > low[6] and low[2] > low[6] and low[3] > low[6] and low[4] > low[6] and low[5] > low[6])
            strategy.entry("Short entry", strategy.short, qty = strategy.initial_capital / low[6], stop = low[6])
        // reach first red low 6 days after
        if (signal[6] != "sell" and signal[5] == "sell" and signal[4] == "sell" and signal[3] == "sell" and signal[2] == "sell" and signal[1] == "sell" and low[1] > low[5] and low[2] > low[5] and low[3] > low[5] and low[4] > low[5])
            strategy.entry("Short entry", strategy.short, qty = strategy.initial_capital / low[5], stop = low[5])
        // reach first red low 5 days after
        if (signal[5] != "sell" and signal[4] == "sell" and signal[3] == "sell" and signal[2] == "sell" and signal[1] == "sell" and low[1] > low[4] and low[2] > low[4] and low[3] > low[4])
            strategy.entry("Short entry", strategy.short, qty = strategy.initial_capital / low[4], stop = low[4])
        // reach first red low 4 days after
        if (signal[4] != "sell" and signal[3] == "sell" and signal[2] == "sell" and signal[1] == "sell" and low[1] > low[3] and low[2] > low[3])
            strategy.entry("Short entry", strategy.short, qty = strategy.initial_capital / low[3], stop = low[3])
        // reach first red low 3 days after
        if (signal[3] != "sell" and signal[2] == "sell" and signal[1] == "sell" and low[1] > low[2])
            strategy.entry("Short entry", strategy.short, qty = strategy.initial_capital / low[2], stop = low[2])
        // reach first red low 2 days after
        if (signal[2] != "sell" and signal[1] == "sell")
            strategy.entry("Short entry", strategy.short, qty = strategy.initial_capital / low[1], stop = low[1])
            
    // Exit when stop out or profit target is hit
    // Bracket order for entry 1 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[1] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[1] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 2 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] == "sell" and signal[3] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[2] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[2] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 3 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] == "sell" and signal[3] == "sell" and signal[4] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[3] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[3] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 4 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] == "sell" and signal[3] == "sell" and signal[4] == "sell" and signal[5] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[4] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[4] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 5 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] == "sell" and signal[3] == "sell" and signal[4] == "sell" and signal[5] == "sell" and signal[6] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[5] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[5] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 6 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] == "sell" and signal[3] == "sell" and signal[4] == "sell" and signal[5] == "sell" and signal[6] == "sell" and signal[7] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[6] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[6] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 7 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] == "sell" and signal[3] == "sell" and signal[4] == "sell" and signal[5] == "sell" and signal[6] == "sell" and signal[7] == "sell" and signal[8] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[7] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[7] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 8 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] == "sell" and signal[3] == "sell" and signal[4] == "sell" and signal[5] == "sell" and signal[6] == "sell" and signal[7] == "sell" and signal[8] == "sell" and signal[9] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[8] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[8] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 9 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] == "sell" and signal[3] == "sell" and signal[4] == "sell" and signal[5] == "sell" and signal[6] == "sell" and signal[7] == "sell" and signal[8] == "sell" and signal[9] == "sell" and signal[10] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[9] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[9] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 10 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] == "sell" and signal[3] == "sell" and signal[4] == "sell" and signal[5] == "sell" and signal[6] == "sell" and signal[7] == "sell" and signal[8] == "sell" and signal[9] == "sell" and signal[10] == "sell" and signal[11] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[10] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[10] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // Bracket order for entry 11 day after 1st red
    if (signal == "sell" and signal[1] == "sell" and signal[2] == "sell" and signal[3] == "sell" and signal[4] == "sell" and signal[5] == "sell" and signal[6] == "sell" and signal[7] == "sell" and signal[8] == "sell" and signal[9] == "sell" and signal[10] == "sell" and signal[11] == "sell" and signal[12] != "sell")
        long_stop_level = strategy.position_avg_price + (adr[11] * riskFactor)
        long_profit_level = strategy.position_avg_price - (adr[11] * rewardFactor)
        strategy.exit("TP/SL", "Short entry", stop=long_stop_level, limit=long_profit_level)
    // ####################### End of Short Entry #######################

// Enxit the day after the trend is lost
if (time_cond and sideway)
    strategy.close("Long entry")
    strategy.close("Short entry")

// Close any open order out side of date range
if (not time_cond)
    strategy.close_all()
if (time_cond_skip)
    strategy.close_all()


Lebih banyak