Strategi harian berdasarkan moving average dan indikator Williams


Tanggal Pembuatan: 2024-01-29 14:35:48 Akhirnya memodifikasi: 2024-01-29 14:35:48
menyalin: 1 Jumlah klik: 639
1
fokus pada
1617
Pengikut

Strategi harian berdasarkan moving average dan indikator Williams

Ringkasan

Strategi ini menggabungkan penggunaan garis rata-rata, indikator ATR dan indikator William untuk melakukan perdagangan di tingkat garis siang untuk varian mata uang GBP / JPY. Strategi ini terlebih dahulu menilai tren harga dan kemungkinan titik balik melalui garis rata-rata, kemudian menggunakan indikator William untuk mengkonfirmasi sinyal perdagangan lebih lanjut, sekaligus menghitung stop loss dan volume perdagangan dengan indikator ATR.

Prinsip Strategi

  1. Menggunakan garis rata-rata 20 hari (bahasa Inggris: baseline) untuk menilai tren harga secara keseluruhan, harga menyapu di bawah garis rata-rata sebagai sinyal beli, dan di bawah garis rata-rata di atas sebagai sinyal jual
  2. Indikator William digunakan untuk mengkonfirmasi harga berbalik. Indikator di atas 35 untuk konfirmasi pembelian, di bawah 70 untuk konfirmasi penjualan
  3. Indikator ATR menghitung rentang rata-rata fluktuasi selama 2 hari terakhir. Nilai ini dikalikan dengan faktor yang ditetapkan sebagai jarak stop loss
  4. Mengontrol risiko dengan 50% dari ekuitas akun. Volume transaksi dihitung berdasarkan stop loss distance dan proporsi risiko
  5. Setelah memasuki posisi panjang, titik stop loss dikurangi jarak stop loss dari titik harga rendah. titik stop plus 100 poin dari titik entry. Logika Exiting digunakan untuk mengkonfirmasi lebih lanjut sinyal keluar
  6. Setelah memasuki posisi pendek, stop loss dan stop loss disamakan. Logika Exiting digunakan untuk lebih mengkonfirmasi sinyal keluar

Analisis Keunggulan

  1. Penggunaan komprehensif tren penilaian garis rata-rata dan indikator konfirmasi masuk, dapat secara efektif menyaring kerugian yang disebabkan oleh terobosan palsu
  2. Stop loss ATR dinamis dapat diatur dengan jarak stop loss yang masuk akal berdasarkan volatilitas pasar
  3. Pengendalian risiko dan penghitungan volume transaksi dinamis dapat meminimalkan kerugian tunggal
  4. Logika Exiting yang digabungkan dengan penilaian garis rata dapat lebih mengkonfirmasi waktu keluar, menghindari penghentian awal

Analisis risiko

  1. Pengadilan rata-rata memiliki probabilitas yang lebih besar untuk menghasilkan sinyal yang salah, dan indikator perlu dikonfirmasi lebih lanjut
  2. Indikator itu sendiri juga dapat menghasilkan sinyal yang salah, yang tidak dapat sepenuhnya menghindari kerugian.
  3. Strategi ini lebih cocok untuk varietas tren dan mungkin kurang efektif untuk varietas berfluktuasi
  4. Pengaturan rasio yang tidak tepat untuk pengendalian risiko juga dapat mempengaruhi hasil strategi

Hal ini dapat dioptimalkan dan ditingkatkan lebih lanjut dengan metode seperti penyesuaian siklus rata-rata, kombinasi lebih banyak indikator, atau perdagangan intervensi buatan.

Meringkaskan

Strategi ini menggabungkan penilaian tren dan penyaringan indikator, merancang metode untuk perdagangan di tingkat GBP / JPY. Selain itu, menggunakan stop loss dinamis, pengendalian risiko, dan lain-lain untuk mengendalikan risiko perdagangan. Ada banyak ruang untuk optimasi, dan efek strategi dapat ditingkatkan lebih lanjut melalui penyesuaian parameter dan kombinasi metode.

Kode Sumber 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)