
Idea teras strategi ini adalah untuk melakukan operasi jual beli berdasarkan penembusan harga di saluran Dongxian, yang merupakan strategi kuantitatif jenis trend-tracking. Ia dapat mengenal pasti saluran harga secara automatik, membuka lebih banyak kedudukan apabila harga menembusi saluran di atas, dan menutup posisi apabila harga kembali ke bawah saluran di dekat atau titik henti.
Strategi ini adalah berdasarkan pada indikator saluran Dongxian, saluran Dongxian adalah kawasan saluran yang digambar melalui harga tertinggi dan terendah dalam tempoh yang diberikan. Kaedah pengiraan adalah:
Naik ke atas = harga tertinggi dalam hampir n kitaran Jarak bawah = harga terendah dalam hampir n kitaran
Apabila harga menembusi ke atas, ia dianggap memasuki tren multihead, dan apabila harga jatuh ke bawah, ia dianggap memasuki tren kosong. Strategi ini hanya mempertimbangkan keadaan yang melanggar ke atas.
Logik urus niaga adalah seperti berikut:
Strategi ini mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Penyelesaian:
Strategi ini juga boleh dioptimumkan dengan:
Strategi ini secara keseluruhannya jelas, mudah difahami dan dilaksanakan, menggunakan petunjuk saluran Tongan yang matang untuk mengenal pasti arah trend secara automatik. Pada masa yang sama, konfigurasi yang lebih fleksibel, boleh disesuaikan dengan keperluan sebenar. Dengan menghentikan kerugian dan pengoptimuman parameter, kesan yang lebih baik dapat dicapai. Secara keseluruhan, strategi ini mudah digunakan, tetapi mempunyai kecekapan tertentu, sesuai sebagai salah satu strategi permulaan perdagangan kuantitatif.
/*backtest
start: 2022-12-07 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © Giovanni_Trombetta
// Strategy to capture price channel breakouts
//@version=4
strategy("ChannelsBreakout", max_bars_back=50, overlay=true)
instrument = input(1, title = "Select 1: Stock/Forex, 2: Future")
money = input(10000, title = "Money for each trade")
backtest_start = input(2000, "Insert first year to backtest")
period = input(50, title = "Period in bars of Donchian Channel")
monetary_stoploss = input(1000, title = "Monetary Stop Loss")
quantity = if instrument != 1
1
else
int(money / close)
upBarrier = highest(high,period)
downBarrier = lowest(low,period)
up = highest(high,period / 4)
down = lowest(low,period / 4)
plot(upBarrier, color=color.green, linewidth=2)
plot(downBarrier, color=color.red, linewidth=2)
plot(up, color=color.lime, linewidth=1)
plot(down, color=color.orange, linewidth=2)
longCondition = crossover(close, upBarrier[1]) and year >= backtest_start
if (longCondition)
strategy.entry("Long", strategy.long, quantity, when = strategy.position_size == 0)
closeCondition = crossunder(close, down[1]) or down < down[1]
if (closeCondition)
strategy.close("Long", comment = "Trailing")
stop_level = strategy.position_avg_price - monetary_stoploss / strategy.position_size
strategy.exit("StopLoss", from_entry = "Long", stop = stop_level)
plot(stop_level, color=color.yellow, linewidth=2)
// l = label.new(bar_index, na,
// text="PineScript Code", color= color.lime, textcolor = color.white,
// style=label.style_labelup, yloc=yloc.belowbar, size=size.normal)
// label.delete(l[1])