Strategi harian berdasarkan purata bergerak dan penunjuk Williams


Tarikh penciptaan: 2024-01-29 14:35:48 Akhirnya diubah suai: 2024-01-29 14:35:48
Salin: 1 Bilangan klik: 639
1
fokus pada
1617
Pengikut

Strategi harian berdasarkan purata bergerak dan penunjuk Williams

Gambaran keseluruhan

Strategi ini menggabungkan penggunaan garis rata-rata, penunjuk ATR dan penunjuk William untuk perdagangan di peringkat garis harian untuk varian mata wang GBP / JPY. Strategi ini terlebih dahulu menilai trend harga dan titik pembalikan yang mungkin melalui garis rata-rata, dan kemudian menggunakan penunjuk William untuk mengesahkan isyarat perdagangan lebih lanjut, sambil menggunakan penunjuk ATR untuk mengira titik berhenti dan jumlah perdagangan.

Prinsip Strategi

  1. Menggunakan garis rata-rata 20 hari (baseline) untuk menilai trend harga secara keseluruhan, harga menyapu sebagai isyarat beli dari bawah garis rata-rata, dan pecah sebagai isyarat jual dari atas garis rata-rata
  2. Indeks William digunakan untuk mengesahkan harga berbalik. Indeks di atas 35 adalah pengesahan pembelian, di bawah 70 adalah pengesahan penjualan
  3. Indeks ATR mengira julat rata-rata turun naik selama 2 hari yang lalu. Nilai ini dikalikan dengan faktor yang ditetapkan sebagai jarak berhenti
  4. Pengendalian risiko mengikut 50% daripada kepentingan akaun. Jumlah dagangan dikira mengikut jarak berhenti dan nisbah risiko
  5. Selepas memasuki kedudukan panjang, titik hentian dikurangkan dari jarak hentian untuk harga rendah. Titik hentian ditambah 100 untuk titik masuk. Logik keluar digunakan untuk mengesahkan isyarat keluar lebih lanjut
  6. Selepas memasuki kedudukan pendek, hentikan dan hentikan pada masa yang sama. Logik keluar digunakan untuk mengesahkan lebih lanjut isyarat keluar

Analisis kelebihan

  1. Penggunaan trend penilaian garis rata-rata yang komprehensif dan pengesahan masuk ke dalam permainan yang berkesan boleh menyaring kerugian yang disebabkan oleh penembusan palsu
  2. Hentian dinamik ATR boleh menetapkan jarak hentian yang munasabah berdasarkan turun naik pasaran
  3. Kawalan risiko dan pengiraan jumlah dagangan dinamik dapat meminimumkan kerugian tunggal
  4. Logik keluar yang digabungkan dengan penilaian garis rata dapat mengesahkan masa keluar dan mengelakkan penangguhan awal

Analisis risiko

  1. Penghakiman rata-rata mempunyai kebarangkalian yang lebih besar untuk menghasilkan isyarat yang salah dan memerlukan pengesahan lebih lanjut
  2. Indeks itu sendiri boleh menyebabkan isyarat yang salah dan tidak dapat mengelakkan kerugian sepenuhnya.
  3. Strategi ini lebih sesuai untuk varieti trend dan mungkin kurang berkesan untuk varieti turun naik
  4. Pengaturan peratusan yang tidak betul dalam kawalan risiko juga boleh menjejaskan hasil strategi

Anda boleh mengoptimumkan dan memperbaiki lebih lanjut dengan cara seperti menyesuaikan kitaran garis rata, menggabungkan lebih banyak petunjuk, atau perdagangan campur tangan buatan.

ringkaskan

Strategi ini menggabungkan penilaian trend dan penapisan penunjuk, merancang kaedah untuk perdagangan di peringkat GBP / JPY. Ia juga menggunakan cara-cara untuk mengawal risiko perdagangan seperti berhenti dinamik, kawalan risiko.

Kod 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)