Strategi arah kitaran silang


Tarikh penciptaan: 2023-09-27 16:30:51 Akhirnya diubah suai: 2023-09-27 16:30:51
Salin: 0 Bilangan klik: 684
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menggunakan petunjuk teknikal lintas kitaran untuk mengenal pasti arah trend, menggabungkan penapisan trend dan penapisan turun naik, untuk mencapai perdagangan trend yang rendah risiko.

Prinsip Strategi

  1. Gunakan titik tinggi rendah untuk menilai isyarat jual beli. Apabila harga menembusi titik tinggi 7 kitaran, lihatlah lebih tinggi, apabila ia menembusi titik rendah 7 kitaran.

  2. Indikator Trendflex menilai arah trend utama. Indikator ini menggabungkan teknologi pelurus ganda, yang dapat mengenal pasti bahagian tengah trend dengan berkesan, nilai di atas 1 menunjukkan trend menaik, dan nilai di bawah -1 menunjukkan trend menurun. Di sini kita meminta Trendflex > 1 jam untuk panjang, < -1 jam untuk pendek, dan dengan itu menyaring keadaan bulat.

  3. Bollinger Bands bergelombang membawa kepada pengiktirafan kawasan gegaran. Apabila harga dekat berada di dalam kawasan, elakkan melakukan lebih banyak pengurangan.

  4. Menggunakan Stop Loss dan Stop Stop untuk menguruskan kedudukan.

Analisis kelebihan

  1. Penunjuk lintas kitaran yang digabungkan dengan teknologi penyelarasan ganda dapat mengesan arah trend dengan berkesan dan mengelakkan gangguan oleh pasaran yang bergolak.

  2. Ia juga mempertimbangkan arah trend dan peraturan turun naik untuk menjadikan isyarat perdagangan lebih dipercayai.

  3. Penetapan stop loss adalah munasabah untuk mengunci keuntungan dan mengelakkan kerugian daripada berkembang.

  4. Strategi ini lebih mudah difahami dan dilaksanakan.

Analisis risiko

  1. Isyarat penembusan mungkin berlaku penembusan palsu, yang menghasilkan perdagangan yang salah. Anda boleh mempertimbangkan untuk menambah lebih banyak syarat gelombang.

  2. Parameter kitaran tetap tidak dapat menyesuaikan diri dengan perubahan pasaran, parameter pengoptimuman dinamik boleh dipertimbangkan.

  3. Tidak ada penangguhan harga untuk mengelakkan kerugian besar yang disebabkan oleh keadaan yang melampau.

  4. Titik henti-henti dan kerugian tetap, tidak boleh disesuaikan dengan pergerakan pasaran.

Arah pengoptimuman

  1. Anda boleh mempertimbangkan untuk menambah lebih banyak indikator untuk menilai trend, membentuk gabungan strategi, dan meningkatkan ketepatan penilaian.

  2. Tambahan modul pengiktirafan gegaran, penghentian dagangan apabila gegaran teruk, mengurangkan risiko.

  3. Memperkenalkan algoritma pembelajaran mesin untuk mengoptimumkan parameter secara dinamik.

  4. Menambah modul Stop Loss, anda boleh menghentikan kerugian apabila kerugian mencapai nilai terendah tertentu.

  5. Mengambil kira peratusan stop loss berdasarkan turun naik pasaran untuk mencapai penyesuaian pintar untuk stop loss.

ringkaskan

Strategi ini secara keseluruhan agak kukuh dan boleh dipercayai, tetapi terdapat ruang untuk penambahbaikan. Idea utamanya adalah untuk menilai arah trend sepanjang kitaran, dan kemudian memfilternya dengan penunjuk kekuatan trend dan penunjuk turun naik, untuk menghasilkan isyarat berkualiti tinggi. Strategi ini mudah digunakan, sangat sesuai untuk mengesan trend garis panjang. Dengan memperkenalkan lebih banyak penilaian syarat dan pengoptimuman parameter dinamik, anda dapat meningkatkan lagi keberkesanan strategi.

Kod 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")