Strategi FX harian Berdasarkan Moving Average dan Williams Indicator

Penulis:ChaoZhang, Tanggal: 2024-01-29 14:35:48
Tag:

img

Gambaran umum

Strategi ini menggabungkan rata-rata bergerak, indikator ATR dan indikator Williams untuk perdagangan FX harian. Pertama menilai tren harga dan titik pembalikan potensial melalui rata-rata bergerak, kemudian menggunakan indikator Williams untuk lebih mengkonfirmasi sinyal perdagangan, dan memanfaatkan indikator ATR untuk menghitung stop loss dan ukuran posisi.

Logika Strategi

  1. Gunakan rata-rata bergerak 20 hari (baseline) untuk menentukan tren keseluruhan. penyeberangan harga dari bawah ke atas adalah sinyal beli, sementara penyeberangan dari atas ke bawah adalah sinyal jual.
  2. Indikator Williams digunakan untuk mengkonfirmasi pembalikan harga. Indikator melintasi di atas -35 adalah konfirmasi beli, sementara melintasi di bawah -70 adalah konfirmasi jual.
  3. Indikator ATR menghitung rata-rata kisaran harga selama 2 hari terakhir.
  4. Ukuran posisi didasarkan pada 50% risiko ekuitas akun. Ukuran perdagangan dihitung berdasarkan jarak stop loss dan persentase risiko.
  5. Setelah memasuki posisi panjang, stop loss ditetapkan pada harga rendah dikurangi jarak stop loss. Take profit ditetapkan pada harga masuk ditambah 100 poin. Logika keluar selanjutnya mengkonfirmasi sinyal keluar.
  6. Demikian pula untuk posisi short, stop loss dan take profit diatur dengan cara yang sama.

Analisis Keuntungan

  1. Menggabungkan penilaian tren dengan moving average dan konfirmasi dengan indikator dapat secara efektif menghindari kerugian dari false breakout.
  2. Stop loss dinamis oleh ATR dapat menetapkan jarak stop yang wajar berdasarkan volatilitas pasar.
  3. Pengendalian risiko dan ukuran posisi dinamis dapat memaksimalkan kontrol atas kerugian perdagangan tunggal.
  4. Logika keluar dikombinasikan dengan rata-rata bergerak dapat membantu lebih lanjut mengkonfirmasi waktu keluar yang baik dan menghindari pengambilan keuntungan prematur.

Analisis Risiko

  1. Sinyal rata-rata bergerak mungkin memiliki probabilitas yang lebih tinggi untuk salah, membutuhkan konfirmasi lebih lanjut dari indikator.
  2. Indikator itu sendiri juga dapat menghasilkan sinyal yang salah, tidak dapat sepenuhnya menghindari kerugian.
  3. Strategi ini lebih cocok dengan pasangan tren, mungkin memiliki hasil yang lebih buruk untuk pasangan yang terikat rentang.
  4. Pengaturan rasio kontrol risiko yang tidak tepat juga dapat mempengaruhi profitabilitas strategi.

Metode seperti penyesuaian periode rata-rata bergerak, menggabungkan lebih banyak indikator, intervensi manual dll dapat membantu mengoptimalkan dan meningkatkan strategi lebih lanjut.

Kesimpulan

Strategi ini menggabungkan penilaian tren dan filter indikator untuk perdagangan harian. Ini juga memanfaatkan stop loss dinamis, pengendalian risiko dan cara lain untuk mengendalikan risiko perdagangan. Banyak ruang untuk optimasi ada dengan penyesuaian parameter dan kombinasi metode untuk meningkatkan kinerja strategi.


/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("GBPJPY DAILY FX",initial_capital = 1000,currency="USD", overlay=true)

UseHAcandles    = input(false, title="Use Heikin Ashi Candles in Algo Calculations")
//
// === /INPUTS ===

// === BASE FUNCTIONS ===

haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close
haOpen  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open
haHigh  = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high
haLow   = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low

//INDICATOR---------------------------------------------------------------------    
    //Average True Range (1. RISK)
atr_period = 2
atr = atr(atr_period)



    //Ichimoku Cloud - Kijun Sen (2. BASELINE)
ks_period = 20
kijun_sen = (highest(haHigh,ks_period) + lowest(haLow,ks_period))/2
base_long = haOpen < kijun_sen and haClose > kijun_sen
base_short = haOpen > kijun_sen and haClose < kijun_sen

    //Williams Percent Range (3. Confirmation#1)
use_wpr = true
wpr_len = 4
wpr = -100*(highest(haHigh,wpr_len) - haClose)/(highest(haHigh,wpr_len) - lowest(haLow,wpr_len))
wpr_up = -35
wpr_low = -70
conf1_long = wpr >= wpr_up
conf1_short = wpr <= wpr_low
if(use_wpr == false)
    conf1_long := true
    conf1_short := true
//TRADE LOGIC-------------------------------------------------------------------
    //Long Entry
    //if -> WPR crosses below -39 AND MACD line is less than signal line
l_en = base_long and conf1_long
    //Long Exit
    //if -> WPR crosses above -14
l_ex = haClose < kijun_sen
    //Short Entry
    //if -> WPR crosses above -39 AND MACD line is greater than signal line
s_en = base_short and conf1_short
    //Short Exit
    //if -> WPR crosses under -14
s_ex = haClose > kijun_sen
    
strategy.initial_capital = 50000
//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
isTwoDigit = input(true,"Is this a 2 digit pair? (JPY, XAU, XPD...")
risk = input(50,"Risk %")/100           //risk % per trade
equity_protector = input(30,"Equity Protection %")/100  //equity protection %
stop = atr*100000*input(1,"Average True Range multiplier")    //Stop level
if(isTwoDigit)
    stop := stop/100
target = input(100, "Target TP in Points")  //TP level
    //Calculate current DD and determine if stopout is necessary
equity_stopout = false
if(floating<0 and abs(floating/balance)>equity_protector)
    equity_stopout := true
    
    //Calculate the size of the next trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/stop        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1)
    size := 1            //Set min. lot size

//TRADE EXECUTION---------------------------------------------------------------
strategy.close_all(equity_stopout)      //Close all trades w/equity protector
is_open = strategy.opentrades > 0

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 = 2000, title = "From Year", minval = 1970)
 //monday and session 
// 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 = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

if(time_cond)
    strategy.entry("l_en",true,1,oca_name="a",when=l_en and not is_open)  //Long entry
    strategy.entry("s_en",false,1,oca_name="a",when=s_en and not is_open) //Short entry
    
    strategy.exit("S/L","l_en",loss=stop, profit=target)      //Long exit (stop loss)
    strategy.close("l_en",when=l_ex)            //Long exit (exit condition)
    strategy.exit("S/L","s_en",loss=stop, profit=target)      //Short exit (stop loss)
    strategy.close("s_en",when=s_ex)            //Short exit (exit condition)


Lebih banyak