Strategi perdagangan kuantitatif dengan beberapa indikator


Tanggal Pembuatan: 2023-10-25 18:06:44 Akhirnya memodifikasi: 2023-10-25 18:06:44
menyalin: 0 Jumlah klik: 645
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif dengan beberapa indikator

Ringkasan

Strategi ini menggunakan kombinasi berbagai indikator teknis untuk membuat keputusan perdagangan jangka pendek dan bilateral. Terutama termasuk indikator seperti Bollinger Bands, RSI, ADX, dan lain-lain.

Prinsip Strategi

Strategi ini terutama digunakan untuk menilai situasi harga yang bergoyang melalui Bollinger Bands, yang mempersempit Bollinger Bands menunjukkan penurunan fluktuasi harga, dan kemungkinan terobosan; dan juga digabungkan dengan RSI untuk menilai fenomena overbought dan oversold, RSI di atas 70 adalah zona overbought dan di bawah 30 adalah zona oversold. Ketika Bollinger Bands menyempit, RSI mendekati zona overbought dan oversold.

Selain itu, strategi ini juga menggunakan ADX untuk menentukan kekuatan pergerakan harga. Ketika ADX tinggi, yang mewakili tren yang kuat, maka dapat dipilih untuk perdagangan berlanjut; Ketika ADX rendah, yang mewakili tidak ada tren yang jelas, maka dapat dipertimbangkan untuk melakukan perdagangan berbalik. Akhirnya, dalam kombinasi dengan garis rata untuk menentukan arah tren jangka panjang, jika harga berada dalam tren naik, dapat dipertimbangkan untuk membeli; Jika harga berada dalam tren turun, dapat dipertimbangkan untuk menjual.

Secara khusus, ketika Brin berkurang, indikator RSI mendekati zona overbought dan oversold, dan harga turun ke bawah, berpikir bahwa pasar mungkin rebound, saat ini pertimbangkan lebih banyak; ketika Brin berkurang, indikator RSI mendekati zona oversold, dan harga menerobos ke atas, berpikir bahwa pasar mungkin turun, saat ini pertimbangkan kosong. Selain itu, jika ADX lebih tinggi, harga dalam tren naik, Anda dapat mengambil lebih banyak posisi; jika ADX lebih rendah, harga dalam tren turun, Anda dapat mengambil posisi kosong.

Analisis Keunggulan

Strategi kombinasi multi-indikator ini memiliki keuntungan sebagai berikut:

  1. Dengan mempertimbangkan berbagai indikator teknis secara komprehensif, ini meningkatkan akurasi dan stabilitas sinyal perdagangan. Indikator tunggal rentan terhadap penipuan palsu, kombinasi indikator ganda dapat memverifikasi sinyal, dan menghindari perdagangan yang salah.

  2. Perdagangan tren mengejar tren besar, perdagangan goyah menargetkan keuntungan kecil.

  3. Pada saat yang sama, melakukan lebih banyak shorting dapat mengurangi risiko posisi di pasar sepihak dan mencegah situasi ekstrem.

  4. Mengatur Stop Loss, Anda bisa mendapatkan beberapa keuntungan dan membatasi kerugian ketika posisi salah.

  5. Dengan optimasi parameter, Anda dapat terus meningkatkan efektivitas strategi dan beradaptasi dengan perubahan pasar.

Analisis risiko

Strategi ini juga memiliki beberapa risiko yang perlu diperhatikan:

  1. Kombinasi multi-indikator meningkatkan kompleksitas strategi, dan pengaturan parameter yang tidak tepat dapat mengurangi efektivitas. Perlu pengujian dan pengoptimalan yang cukup.

  2. Terlalu mengandalkan indikator teknis, mengabaikan informasi dasar, dapat menyebabkan sinyal perdagangan tidak akurat.

  3. Ketika indikator menghasilkan sinyal, mungkin telah terjadi beberapa perubahan, ada risiko mengejar naik atau turun. Perlu menunggu dengan tepat untuk kembali.

  4. Multi-Local Binary Options meningkatkan frekuensi transaksi, meningkatkan biaya dan tekanan keuangan. Perlu mengontrol ukuran posisi.

  5. Ada beberapa risiko dari penyesuaian kurva, dan sebaiknya tes strategi kebugaran di beberapa pasar.

Risiko dapat dikendalikan dengan metode seperti stop loss yang ketat, penambahan posisi yang hati-hati, dan kontrol posisi yang masuk akal. Secara keseluruhan, strategi ini memiliki kepraktisan yang kuat.

Arah optimasi

Strategi ini dapat dipertimbangkan untuk dioptimalkan dari beberapa aspek:

  1. Uji kombinasi parameter yang berbeda untuk mencari parameter yang optimal. Pengoptimalan parameter dapat dilakukan dengan metode langkah-langkah, pencarian acak, dan algoritma genetik.

  2. Menambahkan lebih banyak indikator, seperti KDJ, William, dan lain-lain, untuk membentuk kelompok indikator, meningkatkan kehandalan strategi.

  3. Mengoptimalkan manajemen posisi, mengendalikan risiko melalui penyesuaian posisi yang dinamis.

  4. Dengan algoritma pembelajaran mesin, model kuantitatif digunakan untuk menilai tren harga dan pergerakan masa depan.

  5. Uji coba dalam berbagai varietas, periode waktu, dan pasar untuk meningkatkan adaptasi strategi.

  6. Optimalkan waktu masuk dan waktu keluar untuk menangkap tren pada tahap awal dan keluar sebelum pembalikan.

  7. Menggunakan Stop Loss Tracking, Move Stop dan lain-lain untuk mengunci keuntungan dan mengendalikan risiko.

  8. Menambahkan faktor-faktor fundamental, penilaian struktur pasar untuk memfilter sinyal yang dihasilkan oleh indikator teknis.

Meringkaskan

Strategi ini menggunakan berbagai indikator untuk menilai tren harga dan melakukan perdagangan otomatis. Strategi ini memiliki beberapa keunggulan seperti verifikasi kelompok indikator, perdagangan dua arah, dan stop loss, yang dapat meningkatkan efisiensi perdagangan. Tetapi juga perlu memperhatikan masalah optimasi, sinyal palsu, dan lain-lain.

Kode Sumber Strategi
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 00:00:00
period: 2h
basePeriod: 15m
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/
// © The_Bigger_Bull
//@version=5
strategy("Best TradingView Strategy", overlay=true, margin_long=0, margin_short=0)
//Bollinger Bands
source1 = close
length1 = input.int(15, minval=1)
mult1 = input.float(2.0, minval=0.001, maxval=50)
basis1 = ta.sma(source1, length1)
dev1 = mult1 * ta.stdev(source1, length1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
//buyEntry = ta.crossover(source1, lower1)
//sellEntry = ta.crossunder(source1, upper1)

//RSI
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

//plot(rsi, "RSI", color=#7E57C2)
//plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill")

//ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
	up1 = ta.change(high)
	down1 = -ta.change(low)
	plusDM = na(up1) ? na : (up1 > down1 and up1 > 0 ? up1 : 0)
	minusDM = na(down1) ? na : (down1 > up1 and down1 > 0 ? down1 : 0)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)




out = ta.sma(close, 14)

sma1=ta.sma(close,55)

ema200=ta.ema(close,200)



longCondition = (out>sma1) and ta.crossover(source1, lower1)

if (longCondition )
    strategy.entry("long", strategy.long)
    
shortCondition = (out<sma1) and ta.crossunder(source1, lower1)

if (shortCondition )
    strategy.entry("short", strategy.short)
    
    
stopl=strategy.position_avg_price-50
tptgt=strategy.position_avg_price+100
stopshort=strategy.position_avg_price+50
tptgtshort=strategy.position_avg_price-100

strategy.exit("longclose","long",trail_offset=5,trail_points=45,when=ta.crossover(sma1,out))
strategy.exit("shortclose","short",trail_offset=5,trail_points=45,when=ta.crossover(out,sma1))

    
//if strategy.position_avg_price<0
    
    
plot(sma1 , color=color.blue)
plot(out, color=color.green)
//plot(ema200,color=color.red)