Range Filter Strategi sinyal Beli Jual

Penulis:ChaoZhang, Tanggal: 2024-03-08 17:06:50
Tag:

img

Gambaran umum

Range Filter Buy Sell Signals Strategy adalah strategi perdagangan kuantitatif yang sangat praktis. Strategi ini menggunakan rentang fluktuasi harga untuk menyaring sinyal beli dan jual, mengurangi sinyal palsu di pasar volatilitas rendah dan meningkatkan kualitas sinyal di pasar volatilitas tinggi.

Logika Strategi

Strategi ini pertama-tama menghitung rentang fluktuasi harga aset selama periode tertentu. Secara khusus, strategi ini menghitung perbedaan antara harga tertinggi dan harga terendah dalam periode yang ditentukan untuk menentukan amplitudo fluktuasi harga.

Setelah itu, akan menghasilkan sinyal beli dan jual. Namun, tidak semua sinyal akan memicu masuk, tetapi perlu memenuhi kondisi penyaringan rentang fluktuasi harga. Misalnya, sinyal beli dikeluarkan hanya ketika harga menembus rentang fluktuasi.

Dengan cara ini, strategi ini menyaring sebagian besar sinyal palsu di lingkungan pasar volatilitas rendah, menghindari masuk yang tidak perlu.

Keuntungan

Keuntungan terbesar dari strategi ini adalah bahwa ia dapat secara dinamis menyesuaikan kekuatan penyaringan sinyal. Dalam volatilitas rendah, ia hanya memilih sinyal berkualitas tinggi; sementara dalam volatilitas tinggi, ia dapat merebut lebih banyak peluang yang disediakan oleh pasar.

Dibandingkan dengan filter parameter tetap, strategi ini lebih cerdas dan adaptif. Tidak peduli apa keadaan pasar, ia memberikan risiko yang lebih baik imbalan.

Selain itu, dibandingkan dengan kondisi operasi tunggal, strategi ini menggabungkan penilaian arah tren untuk memberikan sinyal perdagangan yang lebih dapat diandalkan. Pada saat yang sama, ia juga memiliki fungsi stop loss dan take profit untuk secara efektif mengendalikan risiko perdagangan individu.

Risiko

Risiko utama dari strategi ini terletak pada pengaturan parameter rentang volatilitas. Jika rentang yang ditetapkan terlalu besar atau terlalu kecil, itu akan berdampak negatif pada kualitas sinyal dan peluang keuntungan.

Selain itu, strategi ini memiliki peluang keuntungan yang relatif lebih sedikit di pasar dengan tren osilasi jangka pendek yang kuat.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Menggunakan algoritma parameter adaptif untuk secara otomatis mengoptimalkan parameter rentang volatilitas untuk membuatnya lebih cerdas dan dinamis.

  2. Meningkatkan aturan penyaringan berdasarkan tren siklus besar untuk menghindari perangkap konsolidasi.

  3. Menggabungkan siklus strategi yang berbeda untuk membentuk sistem dan meningkatkan stabilitas keseluruhan.

  4. Tambahkan algoritma pembelajaran mesin untuk meningkatkan efek pengaturan parameter dan aturan penyaringan.

Kesimpulan

Range Filter Buy Sell Signals Strategy adalah strategi perdagangan kuantitatif yang sangat praktis dan efektif. Ini dapat secara dinamis menyesuaikan intensitas penyaringan dan memberikan imbalan risiko yang unggul di lingkungan pasar yang berbeda. Pada saat yang sama, masih ada potensi besar dalam mengoptimalkan strategi ini, terutama dalam optimasi parameter dan optimasi aturan. Secara keseluruhan, strategi ini memberikan solusi dasar yang sangat baik bagi pedagang kuantitatif yang mengejar keuntungan berlebih yang stabil.


/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
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/

// Credits to the original Script - Range Filter DonovanWall https://www.tradingview.com/script/lut7sBgG-Range-Filter-DW/
// This version is the old version of the Range Filter with less settings to tinker with

//@version=5
strategy(title='Range Filter - B&S Signals', shorttitle='[Doan]_RF-B&S Signals', overlay=true)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
longLossPerc = input.float(title='Long Stop Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01
shortLossPerc = input.float(title='Short Stop Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01

longTakePerc = input.float(title='Long Take(%)', minval=0.0, step=0.1, defval=1) * 0.01
shortTakePerc = input.float(title='Short Take (%)', minval=0.0, step=0.1, defval=1) * 0.01

emaLength = input.int(200, title="EMA Length")

// Determine stop loss price

//Range Size Function
rng_size(x, qty, n) =>
    wper = n * 2 - 1
    avrng = ta.ema(math.abs(x - x[1]), n)
    AC = ta.ema(avrng, wper) * qty
    rng_size = AC

//Range Filter Function
rng_filt(x, rng_, n) =>
    r = rng_
    var rfilt = array.new_float(2, x)
    array.set(rfilt, 1, array.get(rfilt, 0))
    if x - r > array.get(rfilt, 1)
        array.set(rfilt, 0, x - r)
    if x + r < array.get(rfilt, 1)
        array.set(rfilt, 0, x + r)
    rng_filt1 = array.get(rfilt, 0)

    hi_band = rng_filt1 + r
    lo_band = rng_filt1 - r
    rng_filt = rng_filt1
    [hi_band, lo_band, rng_filt]

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Source
rng_src = input(defval=close, title='Swing Source')

//Range Period
rng_per = input.int(defval=20, minval=1, title='Swing Period')

//Range Size Inputs
rng_qty = input.float(defval=3.5, minval=0.0000001, title='Swing Multiplier')

//Bar Colors
use_barcolor = input(defval=false, title='Bar Colors On/Off')

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------

//Range Filter Values
[h_band, l_band, filt] = rng_filt(rng_src, rng_size(rng_src, rng_qty, rng_per), rng_per)

//Direction Conditions
var fdir = 0.0
fdir := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward = fdir == 1 ? 1 : 0
downward = fdir == -1 ? 1 : 0

//Trading Condition
longCond = rng_src > filt and rng_src > rng_src[1] and upward > 0 or rng_src > filt and rng_src < rng_src[1] and upward > 0
shortCond = rng_src < filt and rng_src < rng_src[1] and downward > 0 or rng_src < filt and rng_src > rng_src[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1

//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color = upward and rng_src > filt ? rng_src > rng_src[1] ? #05ff9b : #00b36b : downward and rng_src < filt ? rng_src < rng_src[1] ? #ff0583 : #b8005d : #cccccc


ema = ta.ema(close, emaLength)

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)

longTakePrice = strategy.position_avg_price * (1 + longTakePerc)
shortTakePrice = strategy.position_avg_price * (1 - shortTakePerc)

//Filter Plot
filt_plot = plot(filt, color=filt_color, linewidth=3, title='Filter', transp=67)

//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title='High Band')
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title='Low Band')

//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 92), title='High Band Fill')
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 92), title='Low Band Fill')

//Bar Color
barcolor(use_barcolor ? bar_color : na)
// Entry
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

plot(ema)

//Plot Buy and Sell Labels
plotshape(longCondition, title='Buy Signal', text='BUY', textcolor=color.white, style=shape.labelup, size=size.normal, location=location.belowbar, color=color.new(color.green, 0))
plotshape(shortCondition, title='Sell Signal', text='SELL', textcolor=color.white, style=shape.labeldown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0))

//Alerts
alertcondition(longCondition, title='Buy Alert', message='BUY')
alertcondition(shortCondition, title='Sell Alert', message='SELL')





Lebih banyak