Strategi arah lintas siklus


Tanggal Pembuatan: 2023-09-27 16:30:51 Akhirnya memodifikasi: 2023-09-27 16:30:51
menyalin: 0 Jumlah klik: 684
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini menggunakan indikator teknis lintas-siklus untuk mengidentifikasi arah tren, yang dikombinasikan dengan penyaringan tren dan penyaringan fluktuasi, untuk mencapai perdagangan pelacakan tren berisiko rendah.

Prinsip Strategi

  1. Gunakan titik tinggi rendah untuk menilai sinyal jual beli. Lihatlah ketika harga melewati 7 siklus tinggi, dan lihat lebih banyak saat melewati 7 siklus rendah.

  2. Indikator Trendflex menentukan arah tren utama. Indikator ini menggabungkan teknologi ganda smoothing, yang dapat secara efektif mengidentifikasi bagian tengah tren, nilai di atas 1 menunjukkan tren naik, dan nilai di bawah -1 menunjukkan tren menurun. Di sini kita meminta Trendflex > 1 jam untuk panjang, < -1 jam untuk pendek, sehingga menyaring keadaan set.

  3. Bollinger Bands berfluktuasi untuk mengidentifikasi zona getaran.

  4. Menggunakan Stop Loss Mobile dan Stop Stop Mobile untuk mengelola posisi.

Analisis Keunggulan

  1. Indikator lintas-siklus yang menggabungkan teknologi dual smoothing dapat secara efektif mengidentifikasi arah tren dan menghindari gangguan dari pasar yang bergoyang.

  2. Selain itu, Anda juga harus mempertimbangkan arah tren dan aturan fluktuasi untuk membuat sinyal perdagangan lebih andal.

  3. Stop loss stop setting yang masuk akal, dapat mengunci keuntungan dan mencegah kerugian berkembang.

  4. Strategi ini sederhana, mudah dipahami, dan mudah diterapkan.

Analisis risiko

  1. Sinyal penembusan dapat terjadi penembusan palsu, sehingga menghasilkan perdagangan yang salah. Anda dapat mempertimbangkan untuk menambahkan lebih banyak kondisi gelombang.

  2. Parameter siklus tetap tidak dapat beradaptasi dengan perubahan pasar, parameter optimasi dinamis dapat dipertimbangkan.

  3. Tidak adanya penghentian harga, tidak dapat mencegah kerugian besar yang disebabkan oleh situasi ekstrem.

  4. Stop loss dan stop loss tetap, tidak dapat disesuaikan dengan pergerakan pasar.

Arah optimasi

  1. Selain itu, ada beberapa indikator yang dapat digunakan untuk menilai tren, membentuk portofolio strategi, dan meningkatkan akurasi penilaian.

  2. Menambahkan modul identifikasi gempa, menghentikan perdagangan saat gempa terjadi, mengurangi risiko.

  3. Memperkenalkan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara dinamis.

  4. Modul Stop Loss ini dapat digunakan untuk menghentikan kerugian jika terjadi penurunan harga.

  5. Stop Loss Ratio yang dihitung berdasarkan fluktuasi pasar untuk melakukan penyesuaian cerdas dari Stop Loss.

Meringkaskan

Strategi ini secara keseluruhan relatif stabil dan dapat diandalkan, tetapi ada juga ruang untuk perbaikan. Gagasan utamanya adalah menentukan arah tren selama periode, lalu memfilternya dengan indikator kekuatan tren dan indikator fluktuasi, sehingga menghasilkan sinyal berkualitas tinggi. Strategi ini sederhana dan praktis, sangat cocok untuk melacak tren garis panjang. Dengan memperkenalkan lebih banyak penilaian kondisional dan pengoptimalan parameter dinamis, efektivitas strategi dapat ditingkatkan.

Kode Sumber Strategi
/*backtest
start: 2023-08-27 00:00:00
end: 2023-09-26 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Eltrut", shorttitle="Eltrut Strat", overlay=true, pyramiding=0, default_qty_type= strategy.percent_of_equity,calc_on_order_fills=false, slippage=25,commission_type=strategy.commission.percent,commission_value=0.075)

testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


// R E F L E X / T R E N D F L E X

f_supersmoother(_src,_len)=>
    pi = 2 * asin(1)
    _a = exp(-sqrt(2) * pi / _len)
    _c2 = 2 * _a * cos(sqrt(2) * pi / _len)
    _c3 = -_a * _a
    _c1 = 1 - _c2 - _c3
    _out = 0.0
    _out := _c1 * _src + _c2 * nz(_out[1],nz(_src[1],_src)) + _c3 * nz(_out[2],nz(_src[2],nz(_src[1],_src)))

f_IQIFM(_src1,_max)=>
    _src = _src1 < 0.001 ? _src1 * 10000 : _src1
    _imult = 0.635, _qmult = 0.338 , _inphase = 0.0, _quad = 0.0
    _re = 0.0, _im = 0.0, _deltaphase = 0.0, _instper = 0.0, _per = 0.0, _v4 = 0.0
    _v1 = _src - nz(_src[7])
    _inphase := 1.25 * (nz(_v1[4]) - _imult * _v1[2]) + _imult * nz(_inphase[3])
    _quad := _v1[2] - _qmult * _v1 + _qmult * nz(_quad[2])
    _re := 0.2 * (_inphase * _inphase[1] + _quad * _quad[1]) + 0.8 * nz(_re[1])
    _im := 0.2 * (_inphase * _quad[1] - _inphase[1] * _quad) + 0.8 * nz(_im[1])
    if _re != 0.0
        _deltaphase := atan(_im / _re)
    for i = 0 to _max
        _v4 := _v4 + _deltaphase[i]
        if _v4 > 4 * asin(1) and _instper == 0.0
            _instper := i
    if _instper == 0.0
        _instper := nz(_instper[1])
    _per := 0.25 * _instper + 0.75 * nz(_per[1])
    _per

f_flex(_src1, _fixed_len, _reflex) =>
    _src = _src1
    _len = _fixed_len 
    _ss1 = f_supersmoother(_src, _len)
    _ss = _ss1
    _slope = (_ss[_len] - _ss) / _len
    _sum = 0.0
    for _i = 1 to _len
        _c1 = _reflex ? _ss + _i * _slope - _ss[_i] : _ss - _ss[_i]
        _sum := _sum + _c1
    _sum := _sum / _len
    _ms = 0.0
    _ms := 0.04 * pow(_sum,2) + 0.96 * nz(_ms[1])
    _flex1 = _ms != 0 ? _sum / sqrt(nz(_ms)) : 0.0
    _flex = _flex1
    _flex

rflx = f_flex(close, 20, true)  
trndflx = f_flex(close, 20, false)   

// S I G N A L
hi7 = highest(7)
lo7 = lowest(7)
long_cond = crossunder(close, lo7[1])
short_cond = crossover(close, hi7[1])

// F I L T E R S

long_filter1 = trndflx < 1
short_filter1 = trndflx > -1

basis = sma(close, 35)
dev = 3 * stdev(close, 35)
long_filter2 = close > basis - dev
short_filter2 = close < basis + dev

// S T R A T E G Y

long = long_cond and long_filter1 and long_filter2
short = short_cond and short_filter1 and short_filter2

if( true)
    strategy.entry("Long", strategy.long, when = long)
    strategy.entry("Long", strategy.long, when = short)


// User Options to Change Inputs (%)
stopPer = input(3, title='Stop Loss %', type=input.float) / 100
takePer = input(9, title='Take Profit %', type=input.float) / 100

// Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)

if strategy.position_size > 0 
    strategy.exit(id="Exit Long", stop=longStop, limit=longTake)
if strategy.position_size < 0 
    strategy.exit(id="Exit Short", stop=shortStop, limit=shortTake)


// P L O T 

plotshape(long, color = #1e90ff, text = "", style=shape.triangleup, location=location.belowbar, size=size.tiny)
plotshape(short, color = #ff69b4, text = "", style=shape.triangledown, location=location.abovebar, size=size.tiny)

alertcondition(long, "Long", "Enter Long")
alertcondition(short, "Short", "Enter S")