Strategi sistem purata bergerak yang kukuh

Penulis:ChaoZhang, Tarikh: 2023-11-24 15:11:18
Tag:

img

Ringkasan

Strategi ini adalah sistem purata bergerak berdasarkan 4 SMMA (Smoothed Moving Average) dengan tempoh yang berbeza dan 1 penunjuk EMA. Ia menggabungkan pelbagai alat analisis teknikal untuk membentuk strategi dagangan melalui penghakiman trend. Strategi ini terutamanya sesuai untuk dagangan intraday bon 15 minit EURUSD leverage tinggi.

Prinsip Strategi

Strategi ini menggunakan 4 SMMA dengan parameter yang berbeza (3, 6, 9, 50) dan 1 EMA (200) untuk membina sistem purata bergerak pelbagai peringkat. Penunjuk SMMA dapat menapis bunyi pasaran dengan berkesan dan menentukan arah trend. Penunjuk EMA mengesan trend jangka panjang. Logik perdagangan khusus adalah:

Apabila purata bergerak jangka pendek (seperti SMMA 3 tempoh) melintasi di atas purata bergerak jangka panjang (seperti EMA 200 tempoh), isyarat beli dihasilkan. Apabila purata bergerak jangka pendek melintasi di bawah purata bergerak jangka panjang, isyarat jual dihasilkan. Dengan menilai susunan pelbagai purata bergerak, arah trend ditentukan.

Di samping itu, strategi juga menetapkan titik berhenti keuntungan dan berhenti kerugian untuk mengawal risiko.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Struktur purata bergerak pelbagai peringkat dapat menentukan arah trend dengan berkesan dan mengurangkan isyarat palsu.

  2. Penunjuk SMMA menapis bunyi bising pasaran dengan berkesan, dan penunjuk EMA mengesan trend jangka panjang.

  3. Ia sesuai untuk akaun leverage tinggi untuk meningkatkan keuntungan perdagangan.

  4. Titik berhenti keuntungan dan titik berhenti kerugian ditetapkan untuk mengawal risiko dengan berkesan.

  5. Mengoptimumkan pelbagai dagangan (EURUSD) dan kitaran (15 minit) untuk menjadikannya lebih menguntungkan.

Analisis Risiko

Strategi ini juga mempunyai risiko berikut:

  1. Jumlah besar purata bergerak mungkin terlepas peluang pembalikan jangka pendek.

  2. Leverage yang tinggi meningkatkan kerugian sambil meningkatkan keuntungan.

  3. Apabila purata bergerak menghasilkan isyarat, trend jangka pendek mungkin telah berbalik.

  4. Kadar pertukaran EURUSD mungkin mengalami turun naik yang ganas, membawa risiko yang lebih besar.

Sebagai tindak balas kepada risiko ini, kita boleh menyesuaikan nisbah leverage dengan sewajarnya, mengoptimumkan parameter purata bergerak, memperkenalkan penunjuk lain untuk menilai pembalikan trend, dll untuk pengoptimuman.

Arahan pengoptimuman

Arah pengoptimuman utama strategi ini termasuk:

  1. Menilai prestasi pelbagai jenis dan kitaran dan memilih parameter optimum.

  2. Uji kombinasi dan kuantiti purata bergerak yang berbeza.

  3. Meningkatkan jumlah atau penunjuk turun naik untuk menentukan titik pembalikan jangka pendek.

  4. Meningkatkan pelarasan dinamik julat stop profit dan stop loss.

  5. Tambah penunjuk ENU untuk menentukan titik pembalikan.

Melalui ujian dan pengoptimuman pelbagai aspek, kestabilan dan keuntungan strategi dapat ditingkatkan dengan besar.

Ringkasan

Strategi purata bergerak ini mengintegrasikan kelebihan penunjuk purata bergerak untuk membentuk sistem penghakiman trend yang kukuh. Ia mengoptimumkan jenis perdagangan dan kitaran dan sangat sesuai untuk perdagangan intraday leverage yang tinggi. Melalui penyesuaian parameter dan ujian pengoptimuman, strategi ini boleh menjadi strategi perdagangan algoritma yang cekap dan boleh dipercayai.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SoftKill21

//@version=4
strategy("Money maker EURUSD 15min" )
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)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 8, 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)




len = input(3, minval=1, title="Length")
src = input(hl2, title="Source")
smma = 0.0
sma1 = sma(src, len)
smma := na(smma[1]) ? sma1 : (smma[1] * (len - 1) + src) / len

len2 = input(6, minval=1, title="Length")
src2 = input(hl2, title="Source")
smma2 = 0.0
sma2 = sma(src2, len2)
smma2 := na(smma2[1]) ? sma2 : (smma2[1] * (len2 - 1) + src2) / len2

len3 = input(9, minval=1, title="Length")
src3 = input(hl2, title="Source")
smma3 = 0.0
sma3 = sma(src3, len3)
smma3 := na(smma3[1]) ? sma3 : (smma3[1] * (len3 - 1) + src3) / len3

len4 = input(50, minval=1, title="Length")
src4 = input(close, title="Source")
smma4 = 0.0
sma4 = sma(src4, len4)
smma4 := na(smma4[1]) ? sma4  : (smma4[1] * (len4 - 1) + src4) / len4

len5 = input(200, minval=1, title="Length")
src5 = input(close, title="Source")
out5 = ema(src5, len5)

timeinrange(res, sess) => time(res, sess) != 0
london=timeinrange(timeframe.period, "0300-1045")
londonEntry=timeinrange(timeframe.period, "0300-0845")

extraEntry =timeinrange(timeframe.period, "0745-1030")

time_cond = true
//time_cond2 = time >= startDate and time <= finishDate and extraEntry

//

longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma  and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond
shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma  and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond


//longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma  and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond2
//shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma  and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond2

//longCond2 = crossover(close,out5) and crossover(close,smma4) and crossover(close,smma3) and crossover(close,smma2) and crossover(close,smma) and time_cond
//shortCond2 = crossunder(close,out5) and crossunder(close,smma4) and crossunder(close,smma3) and crossunder(close,smma2) and crossunder(close,smma) and time_cond



tp=input(300,title="tp")
sl=input(300,title="sl")

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 %")/100           //risk % per trade


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

dataL = (close-out5)*100000
dataS = (out5-close)*100000

minDistanceL = (smma4 - out5)*100000
minDistanceS= (out5 - smma4)*100000


strategy.entry("long",1,1,when=longCond )
strategy.exit("closelong","long", profit=tp,loss=sl)
    
strategy.entry("short",0,1,when=shortCond )
strategy.exit("closeshort","short", profit=tp,loss=sl)



strategy.close_all(when = not london, comment="london finish")
//strategy.close_all(when = not extraEntry, comment="london finish")



// maxEntry=input(2,title="max entries")
// strategy.risk.max_intraday_filled_orders(maxEntry)



Lebih lanjut