Strategi perdagangan hari breakout

Penulis:ChaoZhang, Tanggal: 2023-10-09 16:56:21
Tag:

Gambaran umum

Ini adalah strategi perdagangan hari yang sederhana berdasarkan rata-rata bergerak, cocok untuk jangka waktu GBPUSD 1 jam. Ini hanya masuk di London terbuka dan keluar di London tutup, menjadikannya ideal untuk perdagangan trend breakout selama sesi London.

Logika Strategi

Strategi ini menggunakan dua rata-rata bergerak, satu sangat cepat dan satu sangat lambat.

  1. Hanya masuk di London terbuka (8 AM) ketika harga melanggar MA cepat. Pergi panjang jika dekat atau tinggi melanggar di atas MA cepat, pergi pendek jika dekat atau rendah melanggar di bawah MA cepat.

  2. Memerlukan bar sebelumnya untuk berada di atas MA lambat untuk panjang, di bawah MA lambat untuk pendek, untuk menyaring gerakan non-trending.

  3. Gunakan stop loss yang sangat kecil 50-100 poin.

  4. Tidak mengambil keuntungan, keluar tanpa syarat di London tutup (15:00).

Analisis Keuntungan

Ini adalah strategi breakout yang sangat sederhana, tetapi dengan memanfaatkan karakteristik tren sesi London dengan benar, ia memiliki keuntungan berikut:

  1. Hanya masuk dalam tren yang jelas, menghindari risiko pasar bergolak.

  2. Perdagangan keluar hanya selama periode volatilitas tinggi di London.

  3. Stop loss kecil dapat menahan beberapa retracement.

  4. Keluar tanpa syarat menghindari risiko dalam semalam.

Analisis Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Mungkin tetap flat untuk jangka waktu yang lama ketika London tidak memiliki tren yang jelas.

  2. Stop loss risiko dihentikan pada retracements.

  3. Risiko keluar lebih awal ketika tren yang kuat membutuhkan periode penahan yang diperpanjang.

Penanggulangan termasuk memperluas aturan masuk, menggunakan trailing stop untuk mengunci keuntungan, dan menyesuaikan waktu keluar secara dinamis berdasarkan kondisi pasar.

Arahan Optimasi

Strategi ini dapat ditingkatkan di beberapa bidang:

  1. Tambahkan filter lain seperti RSI, Bollinger Bands untuk lebih menghindari pasar bergolak.

  2. Mengoptimalkan kombinasi rata-rata bergerak dengan menguji parameter yang berbeda.

  3. Uji ukuran stop loss yang berbeda untuk menemukan rentang optimal.

  4. Sesuaikan waktu keluar secara dinamis berdasarkan tindakan harga daripada waktu tetap.

  5. Uji pasangan mata uang dan kerangka waktu lainnya.

  6. Tambahkan manajemen risiko seperti ukuran posisi berdasarkan ukuran akun.

Ringkasan

Secara keseluruhan ini adalah strategi breakout sesi London yang sangat sederhana dan praktis. Ini mendapat manfaat dari menghindari risiko perdagangan tertentu dengan memanfaatkan karakteristik sesi dengan benar. Ada juga area untuk pengoptimalan lebih lanjut untuk meningkatkan ketahanan dan profitabilitas. Strategi ini memberikan kerangka kerja dan templat yang berguna untuk secara efektif memperdagangkan breakout sesi London.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// strategy(title="2 ma breakout",shorttitle="2 ma breakout", initial_capital=10000,overlay=true, commission_type = strategy.commission.cash_per_contract, commission_value = 0.00008 )
timeinrange(res, sess) => time(res, sess) != 0

//Change false to false = You have to turn on, won't show up by default
//****Always use lowercase letters

doNYOpen = input(defval=false, type = input.bool, title="NY Open On")
doNYSession = input(defval=false, type = input.bool, title="NY Session On")
doNYClose = input(defval=false, type = input.bool, title="NY Close On")

doAussieOpen = input(defval=false, type = input.bool, title="Aussie Open On")
doAussieSession = input(defval=false, type = input.bool, title="Aussie Session On")
doAussieClose = input(defval=false, type = input.bool, title="Aussie Close On")

doAsiaOpen = input(defval=false, type = input.bool, title="Asia Open On")
doAsiaSession = input(defval=false, type = input.bool, title="Asia Session On")
doAsiaClose = input(defval=false, type = input.bool, title="Asia Close On")

doEurOpen = input(defval=true, type = input.bool, title="Euro Open On")
doEurSession = input(defval=true, type = input.bool, title="Euro Session On")
doEurClose = input(defval=true, type = input.bool, title="Euro Close On")

//You can copy and paste these colors. white - silver - gray - maroon - red - purple - fuchsia - green - lime
//   olive - yellow - navy - blue - teal - aqua - orange 

nySessionStart = color.olive
nySession = color.olive
nySessionEnd = color.olive
asiaSessionStart = color.blue
asiaSession = color.blue
asiaSessionEnd = color.blue
europeSessionStart = color.red
europeSession = color.red
europeSessionEnd = color.red
colorwhite = color.white

//****Note ---- Use Military Times --- So 3:00PM = 1500


bgcolor(doAsiaSession and timeinrange(timeframe.period, "1800-0400") ? asiaSession : na, transp=75)
//bgcolor(timeinrange(timeframe.period, "0000-0300") ? color.white  : na, transp=75)
bgcolor(doEurSession and timeinrange(timeframe.period, "0300-1100") ? europeSession : na, transp=75)
bgcolor(doNYSession and timeinrange(timeframe.period, "0800-1600") ? nySession : na, transp=75)

active = input(true, title="Show On Chart")
pricehigh = security(syminfo.tickerid, '60', high[0])
pricelow = security(syminfo.tickerid, '60', low[0])
//Daily Plots
offs_daily = 0 
hiHighs = 0
loLows = 0
//plot(timeinrange(timeframe.period, "0000-0300") and pricehigh ? pricehigh  : na, title="Previous Daily High", style=plot.style_line, linewidth=2, color=color.gray)
//plot(timeinrange(timeframe.period, "0000-0300") and pricelow ? pricelow : na, title="Previous Daily Low", style=plot.style_linebr, linewidth=2, color=color.gray)

if(timeinrange(timeframe.period, "0000-0300"))
    hiHighs = highest(high, 3)
    loLows = lowest(low, 3)
    

// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true


len = input(2)
src = input(close, title="Source")
out = sma(src, len)

lena = input(200, minval=1, title="Length slow")
srca = input(close, title="Source")
outa = ema(srca, lena)

//tp = input(100, title="tp")
sl = input(66, title="sl")
// if(smabool)
//     out := sma(src, len)
// else if(emabool)
//     out := ema(src, len)
// else if(hmabool)
//     out := hma(src, len)
// else if(vmabool)
//     out := wma(src, len)  
// else if(vwmabool)
//     out := vwma(src, len)   
// else if(smmabool)
//     out := sma(src, len)  
 
plot(out, color=color.white, title="MA")
plot(outa, color=color.white, title="MA")

longC = timeinrange(timeframe.period, "0300-0400") and (crossover(close,out) or crossover(high,out)) and close[1] > outa and time_cond
shortC = timeinrange(timeframe.period, "0300-0400") and (crossunder(close,out) or crossunder(low,out)) and close[1] < outa and time_cond



//inputlondon = input(false, title="london session")
//inputny = input(false, title="new york session")

//if(inputlondon==true)

strategy.initial_capital = 50000

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk % of equity ")/100           //risk % per trade

temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100      //Convert to contracts
size = temp03 - temp03%1 //Normalize to 1000s (Trade size)
if(size < 1)
    size := 1         //Set min. lot size


strategy.entry("long",1,when=longC)
//strategy.close("long", when = crossunder(close,out) or not (timeinrange(timeframe.period, "0300-1000")))
strategy.close("long", when =  not (timeinrange(timeframe.period, "0300-0945")))
strategy.exit("x_long","long", loss = sl)
     
    
strategy.entry("short",0,when=shortC)
//strategy.close("short",when = crossover(close,out) or not (timeinrange(timeframe.period, "0300-1000")))
strategy.close("short",when = not (timeinrange(timeframe.period, "0300-0945")))

strategy.exit("x_short","short", loss = sl)

//strategy.exit("closelong", "RSI_BB_LONG" , profit = close * 0.01 / syminfo.mintick, loss = close * 0.01 / syminfo.mintick, alert_message = "closelong")
//strategy.exit("closeshort", "RSI_BB_SHORT" , profit = close * 0.01 / syminfo.mintick, loss = close * 0.01 / syminfo.mintick, alert_message = "closeshort")



Lebih banyak