Strategi perdagangan berdasarkan histogram break


Tanggal Pembuatan: 2023-11-15 15:25:57 Akhirnya memodifikasi: 2023-11-15 15:25:57
menyalin: 0 Jumlah klik: 700
1
fokus pada
1617
Pengikut

Strategi perdagangan berdasarkan histogram break

Ringkasan

Strategi ini menggunakan prinsip retracement, yang digabungkan dengan penilaian tren dari moving averages, untuk mencapai perdagangan yang pecah di arah tren. Sinyal perdagangan dihasilkan ketika harga menembus batas retracement.

Prinsip Strategi

  1. Hitung rata-rata bergerak cepat ((20 siklus) dan rata-rata bergerak lambat ((50 siklus)

  2. Berdasarkan garis K dihitung apakah terbentuk persegi panjang yang naik ((close>open) atau persegi panjang yang turun ((close

  3. Untuk menentukan apakah sebuah bujur telah menembus harga tertinggi atau harga terendah dari garis K sebelumnya. Jika bujur naik dan menembus harga tertinggi dari garis K sebelumnya, maka akan dihasilkan sinyal penembus multi-head; jika bujur turun dan menembus harga terendah dari garis K sebelumnya, maka akan dihasilkan sinyal penembus kosong.

  4. Pada saat yang sama, pertimbangkan apakah rata-rata bergerak cepat berada di atas rata-rata bergerak lambat, jika demikian, pertimbangkan sebagai tren multihead; sebaliknya, pertimbangkan sebagai tren kosong.

  5. Sinyal breakout multihead hanya berlaku jika garis rata-rata cepat lambat dinilai sebagai tren head; sinyal breakout head hanya berlaku jika garis rata-rata cepat lambat dinilai sebagai tren head kosong. Ini menghindari kesalahan sinyal dalam penjumlahan.

  6. Ketika menghasilkan sinyal multihead yang efektif, bukalah multihead dengan standar stop loss dan stop. Ketika menghasilkan sinyal head break yang efektif, bukalah kartu kosong dengan standar stop loss dan stop.

  7. Jika ada perpotongan antara rata-rata bergerak cepat dan rata-rata bergerak lambat, maka posisi saat ini akan diimbangi.

Analisis Keunggulan

  • Menggunakan garis lurus sebagai pintu untuk menerobos, ini menandakan sinyal yang lebih kuat.

  • Pada saat yang sama, pertimbangkan arah tren, hindari sinyal yang salah dalam penjumlahan, dan tingkatkan akurasi.

  • Mengambil alih tren dan terobosan, membuat strategi bekerja dengan baik dalam situasi tren.

  • Dengan optimasi parameter, dapat disesuaikan dengan varietas dan periode waktu yang berbeda.

Risiko dan Solusi

  • Risiko kegagalan penembusan. Solusinya adalah dengan memilih lubang penembusan yang lebih besar, memastikan kekuatan gerak penembusan yang lebih kuat.

  • Risiko ketidakakuratan penilaian tren. Solusinya adalah dengan menyesuaikan parameter garis rata-rata, atau dengan menambahkan indikator tambahan untuk menilai tren.

  • Setelan stop loss yang terlalu kecil menimbulkan risiko stop loss yang terlalu sering. Solusinya adalah menyesuaikan stop loss sesuai dengan variasi dan dinamika periode waktu.

  • Resiko ruang keuntungan terlalu kecil. Solusinya adalah dengan mengatur rasio keuntungan dan kerugian yang berbeda sesuai dengan variasi dan dinamika siklus waktu.

Arah optimasi

  • Secara keseluruhan, parameter moving average, parameter breakout, stop loss, dan margin loss harus diuji dan dioptimalkan untuk varietas dan periode waktu yang berbeda, sehingga parameter strategi dapat disesuaikan.

  • Anda dapat menguji berbagai jenis rata-rata bergerak (seperti EMA, SMA, dan lain-lain) untuk mencari rata-rata yang lebih sesuai.

  • Indikator penilaian tambahan lainnya, seperti Momentum, dapat ditambahkan untuk meningkatkan akurasi penilaian tren.

  • Parameter dapat dioptimalkan secara dinamis melalui metode seperti pembelajaran mesin.

  • Hal ini dapat digunakan untuk mempelajari statistik tentang tingkat keberhasilan penembusan dan menyesuaikan parameter penembusan.

Meringkaskan

Strategi ini mengintegrasikan fitur tren dan fitur terobosan, yang secara teoritis dapat menyaring sejumlah besar sinyal yang tidak efektif. Kuncinya adalah untuk memperhatikan pengujian dan pengoptimalan parameter, sehingga strategi disesuaikan untuk berbagai varietas dan periode waktu, sehingga mendapatkan efek yang lebih baik dalam perdagangan nyata. Selain itu, indikator bantu dan teknologi pembelajaran mesin juga memberikan arah untuk perbaikan strategi. Dengan terus mengoptimalkan, strategi ini dapat menjadi strategi perdagangan terobosan tren yang stabil dan andal.

Kode Sumber Strategi
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Backtested Time Frame: H1
//Default Settings: Are meant to run successfully on all currency pairs to reduce over-fitting.
//Risk Warning: This is a forex trading robot, backtest performance will not equal future performance, USE AT YOUR OWN RISK.
//Code Warning: Although every effort has been made for robustness, this code has not been vetted by independent 3rd parties.
strategy("Pin Bar Strategy v1", overlay=true)

// User Input
usr_risk = input(title="Equity Risk (%)",type=input.integer,minval=1,maxval=100,step=1,defval=3,confirm=false)
atr_mult = input(title="Stop Loss (x*ATR, Float)",type=input.float,minval=0.1,maxval=100,step=0.1,defval=1.9,confirm=false)
trd_rewd = input(title="Risk : Reward (1 : x*SL, Float)",type=input.float,minval=0.1,maxval=100,step=0.1,defval=3.1,confirm=false)
sma_fast = input(title="Fast MA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=20,confirm=false)
sma_slow = input(title="Slow MA (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=50,confirm=false)
atr_valu = input(title="ATR (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=14,confirm=false)
use_slpe = input(title="Use MA Slope (Boolean)",type=input.bool,defval=true,confirm=false)
slp_long = input(title="Bull Slope Angle (Deg)",type=input.integer,minval=-90,maxval=90,step=1,defval=1,confirm=false)
slp_shrt = input(title="Bear Slope Angle (Deg)",type=input.integer,minval=-90,maxval=90,step=1,defval=-1,confirm=false)
emg_exit = input(title="Exit When MA Re-Cross (Boolean)",type=input.bool,defval=true,confirm=false)
ent_canc = input(title="Cancel Entry After X Bars (Period)",type=input.integer,minval=1,maxval=500,step=1,defval=3,confirm=false)

// Create Indicators
fastSMA = sma(close, sma_fast)
slowSMA = sma(close, sma_slow)
bullishPinBar = ((close > open) and ((open - low) > 0.66 * (high - low))) or ((close < open) and ((close - low) > 0.66 * (high - low)))
bearishPinBar = ((close > open) and ((high - close) > 0.66 * (high - low))) or ((close < open) and ((high - open) > 0.66 * (high - low)))
atr = atr(atr_valu)

// Specify Trend Conditions
smaUpTrend = (fastSMA > slowSMA) and (fastSMA[1] > slowSMA[1]) and (fastSMA[2] > slowSMA[2]) and (fastSMA[3] > slowSMA[3]) and (fastSMA[4] > slowSMA[4])
smaDnTrend = (fastSMA < slowSMA) and (fastSMA[1] < slowSMA[1]) and (fastSMA[2] < slowSMA[2]) and (fastSMA[3] < slowSMA[3]) and (fastSMA[4] < slowSMA[4])
candleUpTrend = (close[5] > fastSMA[5]) and (open[5] > fastSMA[5]) and (close[6] > fastSMA[6]) and (open[6] > fastSMA[6]) and (close[7] > fastSMA[7]) and (open[7] > fastSMA[7]) and (close[8] > fastSMA[8]) and (open[8] > fastSMA[8]) and (close[9] > fastSMA[9]) and (open[9] > fastSMA[9]) and (close[10] > fastSMA[10]) and (open[10] > fastSMA[10])
candleDnTrend = (close[5] < fastSMA[5]) and (open[5] < fastSMA[5]) and (close[6] < fastSMA[6]) and (open[6] < fastSMA[6]) and (close[7] < fastSMA[7]) and (open[7] < fastSMA[7]) and (close[8] < fastSMA[8]) and (open[8] < fastSMA[8]) and (close[9] < fastSMA[9]) and (open[9] < fastSMA[9]) and (close[10] < fastSMA[10]) and (open[10] < fastSMA[10])

// Specify Piercing Conditions
bullPierce = ((low < fastSMA) and (open > fastSMA) and (close > fastSMA)) or ((low < slowSMA) and (open > slowSMA) and (close > slowSMA))
bearPierce = ((high > fastSMA) and (open < fastSMA) and (close < fastSMA)) or ((high > slowSMA) and (open < slowSMA) and (close < slowSMA))

// MA Slope Function
angle(_source) =>
    rad2degree=180/3.14159265359
    ang=rad2degree*atan((_source[0] - _source[1])/atr(atr_valu)) 

// Calculate MA Slope
fastSlope=angle(fastSMA)
slowSlope=angle(slowSMA)
slopingUp = fastSlope > slp_long
slopingDn = fastSlope < slp_shrt
    
// Specify Entry Conditions
longEntry = smaUpTrend and bullishPinBar and bullPierce
shortEntry = smaDnTrend and bearishPinBar and bearPierce
longEntryWithSlope = smaUpTrend and bullishPinBar and bullPierce and slopingUp
shortEntryWithSlope = smaDnTrend and bearishPinBar and bearPierce and slopingDn

// Specify Secondary Exit Conditions
longExit = crossunder(fastSMA, slowSMA)
shortExit = crossover(fastSMA, slowSMA)

// Long Entry Function
enterlong() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = low[1] - atr[1] * atr_mult
    entryPrice = high[1]
    units = risk / (entryPrice - stopLoss)
    takeProfit = entryPrice + trd_rewd * (entryPrice - stopLoss)
    strategy.entry("long", strategy.long, units, stop=entryPrice)
    strategy.exit("exit long", "long", stop=stopLoss, limit=takeProfit)
    
// Short Entry Function
entershort() =>
    risk = usr_risk * 0.01 * strategy.equity
    stopLoss = high[1] + atr[1] * atr_mult
    entryPrice = low[1]
    units = risk / (stopLoss - entryPrice)
    takeProfit = entryPrice - trd_rewd * (stopLoss - entryPrice)
    strategy.entry("short", strategy.short, units, stop=entryPrice)
    strategy.exit("exit short", "short", stop=stopLoss, limit=takeProfit)
    
// Execute Long Entry w/o Slope
if (longEntry and use_slpe == false)
    enterlong()
    
// Execute Long Entry w/ Slope
if (longEntryWithSlope and use_slpe == true)
    enterlong()

// Exit Long Due to Re-Cross
if(longExit and strategy.position_size > 0 and emg_exit)    
    strategy.order("exit long, re-cross", strategy.short, abs(strategy.position_size))

// Cancel the Long Entry
strategy.cancel("long", barssince(longEntry) > ent_canc)

// Execute Short Entry w/o Slope
if (shortEntry and use_slpe == false)
    entershort() 
    
// Execute Short Entry w/ Slope
if (shortEntryWithSlope and use_slpe == true)
    entershort() 

// Exit Short Due to Re-Cross
if(shortExit and strategy.position_size < 0 and emg_exit)    
    strategy.order("exit short, re-cross", strategy.long, abs(strategy.position_size))

// Cancel the Short Entry
strategy.cancel("short", barssince(shortEntry) > ent_canc)

// Plot Moving Averages to Chart
plot(fastSMA, color=color.red)
plot(slowSMA, color=color.blue)

// Plot Pin Bars to Chart
plotshape(bullishPinBar, style=shape.arrowup, location=location.abovebar, color=#FF0000, text='')
plotshape(bearishPinBar, style=shape.arrowdown, location=location.belowbar, color=#0000FF, text='')