Strategi ini dinamakan sebagai Strategi Perdagangan Pantai Berasaskan Saluran Donchian. Strategi ini mengambil idea utama dari Falsafah Perdagangan Pantai Beras yang terkenal, menilai trend pasaran melalui Saluran Donchian, memfilternya dengan purata bergerak, dan mewujudkan strategi pemantauan trend yang lebih mudah.
Penunjuk penghakiman utama strategi ini adalah saluran Donchian. Saluran Donchian terdiri daripada harga tertinggi dan harga terendah dalam jangka masa N hari, jika harga menembusi saluran atas, maka ia adalah isyarat panjang; jika ia menembusi saluran bawah, maka ia adalah isyarat pendek.
Selain itu, strategi ini juga memperkenalkan dua purata bergerak ((50 hari dan 125 hari) untuk menyaring isyarat. Perdagangan multihead dilakukan hanya apabila bergerak perlahan melintasi rata-rata bergerak cepat di atas rata-rata bergerak cepat; perdagangan kosong dilakukan apabila bergerak perlahan melintasi rata-rata bergerak cepat di bawah rata-rata bergerak cepat. Ini dapat menyaring beberapa isyarat palsu dengan berkesan.
Syarat pembukaan untuk strategi ini adalah: harga naik melalui saluran Donchian, dan rata-rata bergerak cepat melalui rata-rata bergerak perlahan, memenuhi kedua-dua syarat untuk membuka banyak pesanan; harga turun melalui saluran Donchian, dan rata-rata bergerak perlahan melalui rata-rata bergerak perlahan, membuka pesanan kosong. Syarat kedudukan rendah adalah untuk harga menyentuh sempadan saluran Donchian perlahan ke arah yang bertentangan.
Strategi ini mempunyai kelebihan berikut:
Menggunakan saluran Donchian untuk menentukan arah trend, mengukur semula dengan lebih baik dan berjaya menangkap trend besar;
Menambah penapis untuk purata bergerak, yang boleh menapis beberapa isyarat palsu dan mengelakkan kerugian;
Menggunakan gabungan saluran Donchian yang pantas dan rata-rata bergerak yang pantas untuk menyeimbangkan frekuensi dagangan dan ketepatan hentikan kerugian;
Terdapat kawalan risiko, dan terdapat mekanisme penangguhan kerugian untuk mengawal kerugian tunggal.
Strategi ini mempunyai beberapa risiko:
Dalam keadaan yang tidak menentu, mungkin terdapat lebih banyak unit yang kurang menguntungkan;
Apabila trend bertukar, penapisan purata bergerak akan meningkatkan kos pembinaan gudang;
Dalam kes-kes seperti ini, mungkin terdapat kes-kes di mana kerugian yang terhenti akan dituntut.
Kaedah pencegahan dan penyelesaian:
Parameter boleh disesuaikan dengan baik, memendekkan kitaran Donchian, mengurangkan kitaran purata bergerak untuk menyesuaikan diri dengan pasaran yang berbeza.
Meningkatkan penilaian terhadap trend peringkat besar dan mengelakkan berurusan dengan trend besar.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Peningkatan penghakiman terhadap kekuatan penembusan. Sebagai contoh, memperkenalkan jumlah transaksi, dan hanya membuka kedudukan jika jumlah transaksi meningkat;
Meningkatkan penghakiman terhadap kawasan panas. Menghukum kawasan panas harga dengan menggabungkan tekanan sokongan, gelombang, dan corak, dan mengelakkan pembinaan gudang di kawasan panas;
Optimumkan strategi hentikan kerugian. Anda boleh memperkenalkan hentikan pengesanan, hentikan amplitudo, hentikan masa, dan sebagainya, untuk membuat hentikan kerugian lebih pintar.
Strategi ini secara keseluruhannya adalah strategi pengesanan trend yang sangat tipikal dan mudah. Dengan arah penilaian saluran Donchian, isyarat penapis purata bergerak, kesan pengukuran yang lebih baik dicapai. Strategi ini sesuai untuk pelabur yang mengejar trend besar, kawalan risiko di tempat, mudah untuk beroperasi di lapangan. Dengan beberapa parameter dan peraturan yang dioptimumkan, anda dapat meningkatkan lagi peluang kemenangan dan keuntungan strategi.
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
// Coded by Vladkos
strategy("Donchian strategy with filter", overlay=true,default_qty_type = strategy.percent_of_equity, default_qty_value = 4,pyramiding=5)
fromyear = input(2017, defval = 2018, minval = 1800, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(21, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
term = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))
ATR=input(20,minval=1)
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
needstoploss= input(true,defval=true,title="Stop LOSS")
///////////ATR
tra=atr(ATR)
////////////Переменные
Donchian_slow=input(20,minval=1)
Donchian_fast=input(10,minval=1)
Slow_EMA=input(125,minval=1)
Fast_EMA=input(50,minval=1)
/////////// Медленный Дончан
lower = lowest(Donchian_slow)
upper = highest(Donchian_slow)
basis = avg(upper, lower)
plot(lower,color=blue)
plot(upper,color=blue)
/////////// быстрый Дончан
lowerF = lowest(Donchian_fast)
upperF = highest(Donchian_fast)
basisF = avg(upperF, lowerF)
plot(lowerF,color=red)
plot(upperF,color=red)
////////// Скользящие средние
ema_S=ema(close,Slow_EMA)
ema_F=ema(close,Fast_EMA)
plot(ema_S,color=red)
plot(ema_F,color=green)
///////// Условия сделок
long_condition= close>=upper[1] and ema_F>ema_S
long_exit= close<lowerF[1]
short_condition=close<=lower[1] and ema_F<ema_S
short_exit=close>upperF[1]
////////// Отправка ордеров
strategy.entry("Long",strategy.long,when=long_condition and term and needlong==true)
strategy.exit("stop loss","Long",stop=strategy.position_avg_price-(tra*2),when= (needstoploss==true))
strategy.close("Long",when=long_exit and (time < timestamp(toyear, tomonth, today, 23, 59)))
strategy.entry("Short",strategy.short,when=short_condition and term and (needshort==true))
strategy.exit("stoploss","Short",stop=strategy.position_avg_price+(tra*2),when= (needstoploss==true))
strategy.close("Short",when=short_exit and (time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()