Strategi ini menggunakan penunjuk teknikal lintas tempoh untuk mengenal pasti arah trend, digabungkan dengan penapisan trend dan penapisan turun naik, untuk mencapai perdagangan pengesanan trend berisiko rendah.
Gunakan titik terobosan tinggi-rendah untuk menentukan isyarat beli dan jual. Pergi pendek apabila harga menembusi paras tertinggi 7 tempoh, dan pergi panjang apabila ia menembusi paras rendah 7 tempoh.
Indikator Trendflex menentukan arah trend utama. Indikator ini menggabungkan teknik pelinciran berganda dan dapat mengenal pasti bahagian tengah trend dengan berkesan. Nilai di atas 1 menunjukkan trend menaik, sementara nilai di bawah -1 menunjukkan trend menurun. Di sini kita memerlukan Trendflex > 1 untuk panjang dan < -1 untuk pendek, sehingga menapis keadaan penyatuan.
Gunakan Bollinger Bands untuk mengenal pasti julat goyangan. Elakkan panjang dan pendek apabila harga dekat berada dalam band.
Gunakan stop loss bergerak dan mengambil keuntungan untuk menguruskan kedudukan.
Indikator lintas tempoh digabungkan dengan teknik penyelarasan berganda dapat mengenal pasti arah trend dengan berkesan dan mengelakkan pasaran berayun.
Mempertimbangkan kedua-dua arah trend dan corak turun naik menjadikan isyarat perdagangan lebih boleh dipercayai.
Tetapan stop loss dan mengambil keuntungan yang munasabah mengunci keuntungan dan menghalang kerugian daripada berkembang.
Strategi ini agak mudah dan mudah dilaksanakan.
Isyarat terobosan mungkin mempunyai terobosan palsu, mengakibatkan perdagangan yang salah.
Parameter kitaran tetap tidak dapat disesuaikan dengan perubahan pasaran.
Kekurangan harga berhenti gagal mencegah kerugian besar daripada keadaan pasaran yang melampau.
Titik mengambil keuntungan dan berhenti kerugian tetap tidak boleh diselaraskan dengan bijak mengikut turun naik pasaran.
Pertimbangkan untuk menambah lebih banyak penunjuk penilaian trend untuk membentuk gabungan strategi untuk meningkatkan ketepatan penilaian.
Tambah modul pengenalan goyangan untuk menghentikan perdagangan apabila goyangan teruk untuk mengurangkan risiko.
Memperkenalkan algoritma pembelajaran mesin untuk mencapai optimalisasi parameter dinamik.
Tambah modul harga stop loss untuk menghentikan kerugian apabila kerugian mencapai ambang tertentu.
Mengira nisbah mengambil keuntungan dan menghentikan kerugian berdasarkan turun naik pasaran untuk mencapai penyesuaian yang bijak mengambil keuntungan dan menghentikan kerugian.
Secara keseluruhan, strategi ini agak stabil dan boleh dipercayai, sementara juga mempunyai ruang untuk peningkatan. Idea utama adalah untuk menentukan arah trend di seluruh kitaran, dan kemudian menapis menggunakan penunjuk kekuatan trend dan penunjuk turun naik untuk menjana isyarat berkualiti tinggi. Strategi yang mudah dan praktikal ini sangat sesuai untuk mengesan trend jangka menengah dan panjang. Dengan memperkenalkan lebih banyak penilaian bersyarat dan pengoptimuman parameter dinamik, kesan strategi dapat ditingkatkan lagi.
/*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")