Strategi Dagangan Hari Pecahkan

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

Ringkasan

Ini adalah strategi dagangan hari yang mudah berdasarkan purata bergerak, sesuai untuk jangka masa GBPUSD 1 jam. Ia hanya memasuki pembukaan London dan keluar pada penutupan London, menjadikannya ideal untuk perdagangan trend breakout semasa sesi London.

Logika Strategi

Strategi ini menggunakan dua purata bergerak, satu sangat cepat dan satu sangat perlahan. Logikanya adalah seperti berikut:

  1. Hanya masuk di London terbuka (8 AM) apabila harga memecahkan MA pantas. Pergi panjang jika dekat atau tinggi pecah di atas MA pantas, pergi pendek jika dekat atau rendah pecah di bawah MA pantas.

  2. Memerlukan bar sebelumnya untuk berada di atas MA perlahan untuk panjang, di bawah MA perlahan untuk pendek, untuk menapis pergerakan bukan trend.

  3. Gunakan stop loss yang sangat kecil iaitu 50-100 mata.

  4. Tidak mengambil keuntungan, keluar tanpa syarat pada penutupan London (15:00).

Analisis Kelebihan

Ini adalah strategi breakout yang sangat mudah, tetapi dengan menggunakan ciri-ciri trend sesi London dengan betul, ia mempunyai kelebihan berikut:

  1. Hanya memasuki trend yang jelas, mengelakkan risiko pasaran yang bergelombang.

  2. Perdagangan pecah hanya semasa tempoh turun naik tinggi di London.

  3. Stop loss kecil boleh menahan beberapa retracement.

  4. Keluar tanpa syarat mengelakkan risiko semalam.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Mungkin kekal stabil untuk jangka masa yang lama apabila London tidak mempunyai trend yang jelas.

  2. Hentikan risiko kehilangan untuk dihentikan pada retracements.

  3. Risiko keluar awal apabila trend yang kuat memerlukan tempoh penahan yang panjang.

Pengurangan termasuk memperluaskan peraturan kemasukan, menggunakan hentian untuk mengunci keuntungan, dan menyesuaikan masa keluar secara dinamik berdasarkan keadaan pasaran.

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dalam beberapa bidang:

  1. Tambah penapis lain seperti RSI, Bollinger Bands untuk mengelakkan pasaran berbelit-belit.

  2. Mengoptimumkan gabungan purata bergerak dengan menguji parameter yang berbeza.

  3. Uji saiz stop loss yang berbeza untuk mencari julat optimum.

  4. Sesuaikan masa keluar secara dinamik berdasarkan tindakan harga dan bukannya masa tetap.

  5. Uji pasangan mata wang dan jangka masa lain.

  6. Tambah pengurusan risiko seperti saiz kedudukan berdasarkan saiz akaun.

Ringkasan

Secara keseluruhan ini adalah strategi breakout sesi London yang sangat mudah dan praktikal. Ia mendapat manfaat daripada mengelakkan risiko perdagangan tertentu dengan menggunakan ciri-ciri sesi dengan betul. Terdapat juga kawasan untuk pengoptimuman lanjut untuk meningkatkan ketahanan dan keuntungan. Strategi ini menyediakan kerangka kerja dan templat yang berguna untuk perdagangan breakout sesi London dengan berkesan.


/*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 lanjut