Strategi ini menggunakan indikator teknis lintas periode untuk mengidentifikasi arah tren, dikombinasikan dengan penyaringan tren dan penyaringan volatilitas, untuk mencapai perdagangan pelacakan tren berisiko rendah.
Gunakan terobosan titik tinggi-rendah untuk menentukan sinyal beli dan jual.
Indikator Trendflex menentukan arah tren utama. Indikator ini menggabungkan teknik perataan ganda dan dapat secara efektif mengidentifikasi bagian tengah tren. Nilai di atas 1 menunjukkan tren naik, sementara nilai di bawah -1 menunjukkan tren menurun. Di sini kita membutuhkan Trendflex > 1 untuk long dan < -1 untuk short, sehingga menyaring keadaan konsolidasi.
Gunakan Bollinger Bands untuk mengidentifikasi kisaran osilasi. Hindari long dan short ketika harga close berada dalam kisaran.
Gunakan stop loss bergerak dan mengambil keuntungan untuk mengelola posisi.
Indikator lintas periode dikombinasikan dengan teknik double smoothing dapat secara efektif mengidentifikasi arah tren dan menghindari osilasi pasar.
Mempertimbangkan arah tren dan pola volatilitas membuat sinyal perdagangan lebih dapat diandalkan.
Pengaturan stop loss dan take profit yang wajar mengunci keuntungan dan mencegah kerugian berkembang.
Strategi ini relatif sederhana dan mudah diterapkan.
Sinyal terobosan mungkin memiliki terobosan palsu, yang mengakibatkan perdagangan yang salah.
Parameter siklus tetap tidak dapat beradaptasi dengan perubahan pasar.
Kurangnya harga berhenti gagal mencegah kerugian besar dari kondisi pasar yang ekstrim.
Titik profit dan stop loss tetap tidak dapat disesuaikan secara cerdas sesuai dengan volatilitas pasar.
Pertimbangkan untuk menambahkan lebih banyak indikator penilaian tren untuk membentuk kombinasi strategi untuk meningkatkan akurasi penilaian.
Tambahkan modul identifikasi osilasi untuk menghentikan perdagangan ketika osilasi parah untuk mengurangi risiko.
Memperkenalkan algoritma pembelajaran mesin untuk mencapai optimasi parameter dinamis.
Tambahkan modul stop loss harga untuk menghentikan kerugian ketika kerugian mencapai ambang tertentu.
Menghitung mengambil keuntungan dan stop loss rasio berdasarkan volatilitas pasar untuk mencapai penyesuaian cerdas mengambil keuntungan dan stop loss.
Secara keseluruhan, strategi ini relatif stabil dan dapat diandalkan, sementara juga memiliki ruang untuk perbaikan. Ide inti adalah untuk menentukan arah tren di seluruh siklus, dan kemudian menyaring menggunakan indikator kekuatan tren dan indikator volatilitas untuk menghasilkan sinyal berkualitas tinggi. Strategi sederhana dan praktis ini sangat cocok untuk melacak tren jangka menengah dan panjang. Dengan memperkenalkan penilaian yang lebih bersyarat dan optimasi parameter dinamis, efek strategi dapat ditingkatkan lebih lanjut.
/*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")