Strategi mengikut arah aliran berdasarkan penunjuk momentum termampat


Tarikh penciptaan: 2023-11-13 17:46:01 Akhirnya diubah suai: 2023-11-13 17:46:01
Salin: 0 Bilangan klik: 883
1
fokus pada
1617
Pengikut

Strategi mengikut arah aliran berdasarkan penunjuk momentum termampat

Gambaran keseluruhan

Strategi ini adalah berdasarkan pada indikator momentum pemampatan LazyBear, yang digabungkan dengan saluran Brin dan Keltner, untuk mengenal pasti bentuk pemampatan dan pengembangan yang terbentuk dalam saluran penembusan harga, menilai arah trend yang berpotensi dalam harga saham, dan menggunakan kaedah trend tracking untuk menentukan arah pembukaan kedudukan. Keunggulan strategi ini adalah memanfaatkan sepenuhnya kemampuan indikator momentum untuk mengenal pasti trend yang berpotensi, dan menetapkan beberapa penapis syarat untuk mengawal kualiti isyarat perdagangan, yang dapat menyaring dengan berkesan isyarat perdagangan yang tidak pasti, untuk mengelakkan perdagangan yang terlalu kerap di seluruh cakera yang bergolak.

Prinsip Strategi

  1. Hitung purata bergerak sederhana untuk harga penutupan n hari di tengah-tengah, atas, dan bawah dalam jalur Brin. Perbezaan piawaian harga penutupan n hari ditambah kurang m kali ganda untuk jalur atas dan bawah.

  2. Hitung garis tengah, atas dan bawah dalam saluran Keltner. Garis tengah adalah purata bergerak sederhana untuk harga penutupan n hari, dan garis atas dan bawah adalah purata bergerak sederhana untuk gelombang sebenar n hari ditambah m kali ganda.

  3. Untuk menentukan sama ada harga menembusi Burin Belt dan Keltner Channel ke atas dan ke bawah, ia membentuk bentuk pemampatan dan pengembangan. Ia membentuk bentuk pemampatan apabila harga menembusi ke bawah dari atas, dan bentuk pengembangan apabila harga menembusi ke atas dari bawah.

  4. Hitung nilai kurva regresi linear, sebagai penunjuk momentum. Apabila garis momentum melewati 0 sebagai isyarat beli, apabila melewati 0 sebagai isyarat jual.

  5. Isyarat perdagangan akhir ditentukan oleh pelbagai syarat, seperti bentuk pengembangan pemampatan, arah indikator dinamik, penapis nilai rata-rata. Isyarat perdagangan akan dihasilkan hanya jika semua syarat dipenuhi, untuk mengelakkan perdagangan yang salah.

Kelebihan Strategik

  1. Penapisan berganda menggunakan jalur Brin dan saluran Keltner untuk mengenal pasti bentuk mampatan dan pengembangan berkualiti tinggi.

  2. Indeks momentum mampu menangkap perubahan trend harga tepat pada masanya, dan saling melengkapi dengan indikator saluran.

  3. Memungkinkan untuk memasuki lebih awal dan meningkatkan peluang untuk menjana pendapatan.

  4. Menggunakan penilaian pelbagai syarat untuk mengelakkan pembukaan dagangan yang kerap dalam keadaan gegaran.

  5. Setiap parameter penunjuk teknikal boleh disesuaikan untuk pelbagai jenis dan kombinasi parameter.

  6. Anda boleh menetapkan tempoh pengesanan semula untuk mengoptimumkan ujian untuk tempoh masa tertentu.

Risiko Strategik

  1. Strategi trend-following, yang boleh menyebabkan kerugian apabila trend berbalik.

  2. Tetapan parameter yang tidak betul boleh menyebabkan frekuensi transaksi yang terlalu tinggi atau kualiti isyarat yang buruk.

  3. Bergantung pada ujian data sejarah, tidak ada jaminan bahawa kembalinya akan kekal stabil.

  4. Tidak dapat menangani kejutan pasaran dan turun naik harga yang disebabkan oleh peristiwa mengejut.

  5. Tetapan tetingkap masa pengesanan yang tidak betul mungkin menyebabkan overfit.

Arah pengoptimuman strategi

  1. Mengoptimumkan parameter Brin Belt dan Keltner Channel untuk mencari kombinasi terbaik.

  2. Ujian penambahan stop loss bergerak untuk mengawal kerugian maksimum dalam satu transaksi.

  3. Cuba untuk mengoptimumkan lebih lanjut dalam kombinasi parameter varieti dan kitaran tertentu.

  4. Meneroka model pembelajaran mesin untuk menilai kebalikan trend.

  5. Uji urutan kemasukan yang berbeza dan strategi pengurusan kedudukan.

  6. Kajian bagaimana untuk mengenali isyarat perubahan trend dan menghentikan kerosakan pada masa yang tepat.

ringkaskan

Strategi ini menggabungkan pelbagai petunjuk teknikal untuk menentukan arah trend harga dan melakukan trend pelacakan, dengan daya serap yang lebih kuat. Melalui penyesuaian parameter dan penapisan pelbagai syarat, anda dapat mengawal frekuensi perdagangan dengan berkesan dan meningkatkan kualiti isyarat.

Kod sumber strategi
/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//Strategy based on LazyBear Squeeze Momentum Indicator
//I added some custom feature and filters
//
// @author LazyBear
// List of all my indicators:
// https://docs.google.com/document/d/15AGCufJZ8CIUvwFJ9W-IKns88gkWOKBCvByMEvm5MLo/edit?usp=sharing
// v2 - fixed a typo, where BB multipler was always stuck at 1.5. [Thanks @ucsgears]
//
strategy(shorttitle = "SQZMOM_LB", title="Strategy for Squeeze Momentum Indicator [LazyBear]", overlay=false, calc_on_every_tick=true, pyramiding=0,default_qty_type=strategy.percent_of_equity,default_qty_value=100,currency=currency.USD)

length = input(14, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(16, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
 
useTrueRange = input(true, title="Use TrueRange (KC)", type=bool)

//FILTERS
useExtremeOrders  = input(false, title="Early entry on momentum change", type=bool)
useMomAverage = input(false, title="Filter for Momenutum value", type=bool)
MomentumMin = input(20, title="Min for momentum")

// Calculate BB
src = close
basis = sma(src, length)
dev = mult * stdev(src, length)
upperBB = basis + dev
lowerBB = basis - dev
 
// Calculate KC
ma = sma(src, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC
 
sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)
 
val = linreg(src  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)
 
bcolor = iff( val > 0,            iff( val > nz(val[1]), lime, green),            iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : aqua
plot(val, color=bcolor, style=histogram, linewidth=4)
plot(0, color=scolor, style=cross, linewidth=2)

//LOGIC
//momentum filter
filterMom=useMomAverage?abs(val)>(MomentumMin/100000)?true:false:true

//standard condition
longCondition = scolor[1]!=aqua and scolor==aqua and bcolor==lime and filterMom
exitLongCondition = bcolor==green and not useExtremeOrders
shortCondition = scolor[1]!=aqua and scolor==aqua and bcolor==red and filterMom
exitShortCondition = bcolor==maroon and not useExtremeOrders

//early entry
extremeLong= useExtremeOrders and scolor==aqua and bcolor==maroon and bcolor[1]!=bcolor[0] and filterMom
exitExtLong = scolor==black or bcolor==red
extremeShort = useExtremeOrders and scolor==aqua and bcolor==green and bcolor[1]!=bcolor[0] and filterMom
exitExtShort = scolor==black or bcolor==lime

//STRATEGY

strategy.entry("SQ_Long", strategy.long, when = longCondition)
strategy.close("SQ_Long",when = exitLongCondition )

strategy.entry("SQ_Long_Ext", strategy.long, when = extremeLong)
strategy.close("SQ_Long_Ext",when = exitExtLong)
//strategy.exit("exit Long", "SQ_Long", when = exitLongCondition)

strategy.entry("SQ_Short", strategy.short, when = shortCondition)
strategy.close("SQ_Short",when = exitShortCondition)

strategy.entry("SQ_Short_Ext", strategy.short, when = extremeShort)
strategy.close("SQ_Short_Ext",when = exitExtShort)
//strategy.exit("exit Short", "SQ_Short", when = exitShortCondition)



// // === Backtesting Dates === thanks to Trost

// testPeriodSwitch = input(true, "Custom Backtesting Dates")
// testStartYear = input(2018, "Backtest Start Year")
// testStartMonth = input(1, "Backtest Start Month")
// testStartDay = input(1, "Backtest Start Day")
// testStartHour = input(0, "Backtest Start Hour")
// testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
// testStopYear = input(2018, "Backtest Stop Year")
// testStopMonth = input(12, "Backtest Stop Month")
// testStopDay = input(14, "Backtest Stop Day")
// testStopHour = input(23, "Backtest Stop Hour")
// testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
// testPeriod() =>
//     time >= testPeriodStart and time <= testPeriodStop ? true : false
// isPeriod = testPeriodSwitch == true ? testPeriod() : true
// // === /END

// if not isPeriod
//     strategy.cancel_all()
//     strategy.close_all()