Strategi laser ganda pencari tren panjang dan pendek


Tanggal Pembuatan: 2023-11-06 10:01:42 Akhirnya memodifikasi: 2023-11-06 10:01:42
menyalin: 0 Jumlah klik: 587
1
fokus pada
1617
Pengikut

Strategi laser ganda pencari tren panjang dan pendek

Ringkasan

Strategi ini menggunakan tiga indikator teknis yang digunakan untuk menentukan arah tren saat ini, yaitu Brin Belt, Kentner Channel, dan Adaptive Relative Weakness Indicator. Strategi ini digunakan untuk masuk ke pasar dengan menggunakan indikator SAR paralel.

Prinsip

Strategi ini menggunakan tiga kombinasi indikator teknis untuk menilai tren saat ini:

  1. SQUEEZE MOMENTUM INDICATOR: Menghitung Brin Belt dan Kentner Corridor, yang menghasilkan kompresi ketika keduanya saling tumpang tindih, menandakan perubahan tren yang akan datang. Indikator ini mengembalikan keadaan kompresi dan kemiringan kurva pengembalian linier.

  2. RSI VOLUME WEIGHTED: Menghitung RSI dengan bobot volume, dengan garis tengah untuk menilai overbought dan oversold. Indikator ini menekankan perubahan volume.

  3. Stop loss parallax ((SAR): menilai hubungan posisi harga saat ini dengan SAR parallax, SAR turun di atas harga, SAR naik di bawah harga.

Strategi menggunakan Brin band untuk menentukan arah tren, Kenter channel refine, RSI menilai overbought overbought mencari peluang reversal, SAR menunjukkan waktu masuk. Logika spesifiknya adalah sebagai berikut:

  1. Perhitungan Brin Belt, Kentner Channel, Squeeze Indicator. Squeeze Compression memasuki tahap persiapan.

  2. RSI diperhitungkan dengan volume transaksi yang ditimbang. RSI lebih tinggi dari garis tengah bullish dan lebih rendah dari garis tengah bearish.

  3. Perhitungan garis parallax SAR. SAR naik di bawah harga dan turun di atas harga.

  4. Kombinasi dari tiga indikator di atas: Ketika squeeze kompresi, RSI lebih tinggi dari garis tengah, SAR menghasilkan sinyal multihead ketika harga di bawah; Ketika squeeze kompresi, RSI lebih rendah dari garis tengah, SAR menghasilkan sinyal overhead ketika harga di atas.

  5. Ketika sinyal dihasilkan, dinilai hasil dari tiga indikator dari garis K sebelumnya, dan jika sebaliknya dari penilaian sinyal saat ini, maka dihasilkan sinyal masuk.

  6. Setelah masuk, atur stop loss, dan ikuti stop loss.

Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Indikator multi-portfolio melihat turun naik, penilaian akurat. Indikator Squizes mengidentifikasi perubahan tren dengan akurat, RSI menilai overbought dan oversold dengan jelas, SAR menunjukkan waktu masuk ke pasar dengan tepat.

  2. Logika indikatornya sederhana dan jelas, mudah dipahami implementasinya.

  3. Dengan menggunakan multi-indikator konfirmasi, dapat disaring penembusan palsu.

  4. Ada mekanisme stop loss yang dapat mengunci keuntungan dan mengontrol risiko.

  5. Data deteksi cukup dan dapat diandalkan.

Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Logika masuk multihead dan headless mirip, mungkin akan mengeluarkan sinyal mundur pada saat bersamaan, dan memerlukan filter.

  2. Ketiga indikator ini menggunakan optimasi parameter, dan mungkin terlalu cocok.

  3. Perdagangan mungkin terlalu sering, dan Anda harus mengontrol jumlah posisi secara wajar.

  4. Pengaturan Stop Loss mungkin terlalu dekat dan mudah diretas.

Solusi yang sesuai:

  1. Meningkatkan hasil indikator untuk menentukan siklus yang berkelanjutan dan menghindari sinyal yang bergoyang.

  2. Menggunakan analisis berjalan maju, menyesuaikan parameter, mencegah overfit.

  3. Setel ukuran piramida untuk mengontrol jumlah kepemilikan.

  4. Uji berbagai rentang kerusakan, optimalkan posisi kerusakan.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Optimalkan parameter indikator, meningkatkan stabilitas parameter. Anda dapat mempertimbangkan parameter optimalisasi dinamis.

  2. Menambahkan logika pengendalian posisi, seperti besar, kecil, rata dan lain-lain.

  3. Uji berbagai cara stop loss, seperti stop oscillating, stop linear, dan reset.

  4. Menambahkan fungsi manajemen uang, seperti posisi tetap, tingkat pemanfaatan dana tetap, dll.

  5. Dengan menggunakan algoritma pembelajaran mesin, para pemain bisa masuk dan keluar secara dinamis.

  6. Meningkatkan mekanisme hedging, melakukan lebih banyak shorting, dan mengurangi risiko sistemik di pasar terkait.

  7. Pertimbangan untuk menambahkan lebih banyak indikator, membangun mekanisme voting, dan meningkatkan akurasi penilaian.

Meringkaskan

Strategi ini secara keseluruhan memiliki ide yang jelas, menggunakan beberapa indikator untuk menilai arah tren, masuk ke dalam waktu yang tepat saat kompresi saluran Brin, menghentikan risiko pengendalian mekanisme penghentian, dan merupakan strategi pelacakan tren yang lebih stabil. Dengan pengoptimalan parameter, perbaikan mekanisme pengendalian risiko, dapat diperoleh indikator pengembalian dan efek disk yang lebih baik. Strategi ini berlaku untuk varietas dengan tren yang lebih jelas, dan dapat dipertimbangkan untuk beroperasi dalam siklus besar seperti garis matahari yang relatif stabil.

Kode Sumber Strategi
/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
basePeriod: 15m
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/
// © XaviZ

//#####©ÉÉÉɶN###############################################
//####*..´´´´´´,,,»ëN########################################
//###ë..´´´´´´,,,,,,''%©#####################################
//###'´´´´´´,,,,,,,'''''?¶###################################
//##o´´´´´´,,,,,,,''''''''*©#################################
//##'´´´´´,,,,,,,'''''''^^^~±################################
//#±´´´´´,,,,,,,''''''''^í/;~*©####æ%;í»~~~~;==I±N###########
//#»´´´´,,,,,,'''''''''^;////;»¶X/í~~/~~~;=~~~~~~~~*¶########
//#'´´´,,,,,,''''''''^^;////;%I^~/~~/~~~=~~~;=?;~~~~;?ë######
//©´´,,,,,,,''''''''^^~/////X~/~~/~~/~~»í~~=~~~~~~~~~~^;É####
//¶´,,,,,,,''''''''^^^;///;%;~/~~;í~~»~í?~?~~~?I/~~~~?*=íÑ###
//N,,,,,,,'''''''^^^^^///;;o/~~;;~~;£=»í»;IX/=~~~~~~^^^^'*æ##
//#í,,,,,''''''''^^^^^;;;;;o~»~~~~íX//~/»~;í?IíI»~~^/*?'''=N#
//#%,,,'''''''''^^^^^^í;;;;£;~~~//»I»/£X/X/»í*&~~~^^^^'^*~'É#
//#©,,''''''''^^^^^^^^~;;;;&/~/////*X;í;o*í»~=*?*===^'''''*£#
//##&''''''''^^^^^^^^^^~;;;;X=í~~~»;;;/~;í»~»±;^^^^^';=''''É#
//##N^''''''^^^^^^^^^^~~~;;;;/£;~~/»~~»~~///o~~^^^^''''?^',æ#
//###Ñ''''^^^^^^^^^^^~~~~~;;;;;í*X*í»;~~IX?~~^^^^/?'''''=,=##
//####X'''^^^^^^^^^^~~~~~~~~;;íííííí~~í*=~~~~Ií^'''=''''^»©##
//#####£^^^^^^^^^^^~~~~~~~~~~~íííííí~~~~~*~^^^;/''''='',,N###
//######æ~^^^^^^^^~~~~~~~~~~~~~~íííí~~~~~^*^^^'=''''?',,§####
//########&^^^^^^~~~~~~~~~~~~~~~~~~~~~~~^^=^^''=''''?,íN#####
//#########N?^^~~~~~~~~~~~~~~~~~~~~~~~~^^^=^''^?''';í@#######
//###########N*~~~~~~~~~~~~~~~~~~~~~~~^^^*'''^='''/É#########
//##############@;~~~~~~~~~~~~~~~~~~~^^~='''~?'';É###########
//#################É=~~~~~~~~~~~~~~^^^*~'''*~?§##############
//#####################N§£I/~~~~~~»*?~»o§æN##################

//@version=4
strategy(title="M-SQUEEZE", overlay = true)

//study(title="M-SQUEEZE", overlay = true)

src = input(close, "SOURCE", type = input.source)

// ███▓▒░░ VARIABLES ░░▒▓███

var bool longCond = na, var bool shortCond = na
var int CondIni_long0 = 0, var int CondIni_short0 = 0
var int CondIni_long = 0, var int CondIni_short = 0
var float last_open_longCondition = na, var float last_open_shortCondition = na
var int last_longCondition0 = na, var int last_shortCondition0 = na
var int last_longCondition = na, var int last_shortCondition = na
var bool long_tp = na, var bool short_tp = na
var int last_long_tp = na, var int last_short_tp = na
var bool Final_Long_tp = na, var bool Final_Short_tp = na
var bool SMI_longCond = na, var bool SMI_shortCond = na
var bool RSI_longCond = na, var bool RSI_shortCond = na
var bool ADX_longCond = na, var bool ADX_shortCond = na
var bool SAR_longCond = na, var bool SAR_shortCond = na
var bool Final_longCondition0 = na, var bool Final_shortCondition0 = na
var bool Final_longCondition = na, var bool Final_shortCondition = na

// ███▓▒░░ SQUEEZE MOMENTUM INDICATOR ░░▒▓███

Act_SMI = input(true, "SQUEEZE MOMENTUM INDICATOR")
BB_length = input(85, title="BOLLINGER BANDS LENGTH", minval = 1)
BB_mult = input(2.1, title="BOLLINGER BANDS MULTI-FACTOR", minval = 0.1, step = 0.1)
KC_length = input(38, title="KELTNER CHANNEL LENGTH", minval = 1)
KC_mult = input(2.0, title="KELTNER CHANNEL MULTI-FACTOR", minval = 0.1, step = 0.1)

SQUEEZE_M(_src,_BB_length,_BB_mult,_KC_length,_KC_mult)=>

    // Calculate BB
    basis = sma(_src, _BB_length)
    dev = _BB_mult * stdev(_src, _BB_length)
    upperBB = basis + dev
    lowerBB = basis - dev
    // Calculate KC
    ma = sma(src, _KC_length)
    rangema = sma(tr, _KC_length)
    upperKC = ma + rangema * _KC_mult
    lowerKC = ma - rangema * _KC_mult
    // Squeeze
    sqzOn = lowerBB > lowerKC and upperBB < upperKC
    sqzOff = lowerBB < lowerKC and upperBB > upperKC
    nosqz = sqzOn == false and sqzOff == false
    // Linear Regression curve
    val = linreg(_src - avg(avg(highest(high, _KC_length), lowest(low, _KC_length)), sma(close, _KC_length)), _KC_length, 0)
    [nosqz,val]
    
[NOSQZ,VAL] = SQUEEZE_M(src,BB_length,BB_mult,KC_length,KC_mult)

barcolor(iff(VAL > 0, iff(VAL > nz(VAL[1]), color.lime, color.green), iff(VAL < nz(VAL[1]), color.red, color.maroon)))

// ███▓▒░░ SAR ░░▒▓███

Act_SAR = input(true, "PARABOLIC SAR")
Sst = input (0.73, "SAR STAR", step=0.01, minval = 0.01)
Sinc = input (0.5, "SAR INC", step=0.01, minval = 0.01)
Smax = input (0.06, "SAR MAX", step=0.01, minval = 0.01)

SAR = sar(Sst, Sinc, Smax)
plot(SAR, style = plot.style_cross, title = "SAR")

// ███▓▒░░ RSI VOLUME WEIGHTED ░░▒▓███

Act_RSI = input(true, "RSI VOLUME WEIGHTED")
RSI_len = input(22, "RSI LENGHT", minval = 1)
RSI_obos = input(45,title="RSI CENTER LINE", type=input.integer, minval = 1)

WiMA(_src, _length)=> 
    var float MA_s=0.0
    MA_s:=(_src + nz(MA_s[1] * (_length-1)))/_length
    MA_s

RSI_Volume(fv, length)=>	
	up=iff(fv>fv[1],abs(fv-fv[1])*volume,0)
	dn=iff(fv<fv[1],abs(fv-fv[1])*volume,0)
	upt=WiMA(up,length)
	dnt=WiMA(dn,length)
	100*(upt/(upt+dnt))

RSI_V = RSI_Volume(src, RSI_len)

// ███▓▒░░ STRATEGY ░░▒▓███

SMI_longCond := (Act_SMI ? (VAL > 0 and (VAL > nz(VAL[1])) and not NOSQZ) : RSI_longCond) 
RSI_longCond := (Act_RSI ? (RSI_V > RSI_obos) : SAR_longCond)
SAR_longCond := (Act_SAR ? (SAR < close) : SMI_longCond)

SMI_shortCond := (Act_SMI ? (VAL < 0 and (VAL < nz(VAL[1])) and not NOSQZ) : RSI_shortCond) 
RSI_shortCond := (Act_RSI ? (RSI_V < RSI_obos) : SAR_shortCond)
SAR_shortCond := (Act_SAR ? (SAR > close) : SMI_shortCond)

longCond := SMI_longCond and RSI_longCond and SAR_longCond
shortCond := SMI_shortCond and RSI_shortCond and SAR_shortCond

CondIni_long0 := longCond ? 1 : shortCond ? -1 : CondIni_long0[1]
CondIni_short0 := longCond ? 1 : shortCond ? -1 : CondIni_short0[1]

longCondition0 = (longCond and CondIni_long0[1] == -1)
shortCondition0 = (shortCond and CondIni_short0[1] == 1)

CondIni_long := longCond[1] ? 1 : shortCond[1] ? -1 : CondIni_long[1]
CondIni_short := longCond[1] ? 1 : shortCond[1] ? -1 : CondIni_short[1]

longCondition = (longCond[1] and CondIni_long[1] == -1)
shortCondition = (shortCond[1] and CondIni_short[1] == 1)

// ███▓▒░░ ALERTS & SIGNALS ░░▒▓███

plotshape(longCondition, title = "Long Signal", style = shape.triangleup, location = location.belowbar, color = color.blue, transp = 0, size = size.tiny)
plotshape(shortCondition, title = "Short Signal", style = shape.triangledown, location = location.abovebar, color = #FF0000, transp = 0, size = size.tiny)

//alertcondition(longCondition, title="Long Alert", message = "LONG") 
//alertcondition(shortCondition, title="Short Alert", message = "SHORT")

// ███▓▒░░ BACKTESTING ░░▒▓███

testStartYear = input(2018, "BACKTEST START YEAR", minval = 1980, maxval = 2222) 
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2222, "BACKTEST STOP YEAR", minval=1980, maxval = 2222)
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 = time >= testPeriodStart and time <= testPeriodStop ? true : false

strategy.entry("Long", strategy.long, when = longCondition0 and testPeriod)
strategy.entry("Short", strategy.short, when = shortCondition0 and testPeriod)