Strategi sistem purata bergerak yang kukuh dan mantap


Tarikh penciptaan: 2023-11-24 15:11:18 Akhirnya diubah suai: 2023-11-24 15:11:18
Salin: 0 Bilangan klik: 587
1
fokus pada
1617
Pengikut

Strategi sistem purata bergerak yang kukuh dan mantap

Gambaran keseluruhan

Strategi ini adalah sistem purata bergerak berdasarkan 4 kitaran yang berbeza SMMA (rata-rata bergerak lancar) dan satu indikator EMA. Ia menggabungkan beberapa alat analisis teknikal sekuriti untuk membentuk strategi perdagangan melalui penilaian trend.

Prinsip Strategi

Strategi ini menggunakan 4 parameter yang berbeza SMMA ((3, 6, 9, 50)) dan 1 EMA ((200) untuk membina sistem purata bergerak bertingkat. Indeks SMMA dapat menyaring bunyi pasaran dengan berkesan dan menentukan arah trend. Indeks EMA mengesan trend jangka panjang.

Apabila purata bergerak jangka pendek ((seperti SMMA 3 kitaran) melintasi purata bergerak jangka panjang ((seperti EMA 200 kitaran) menghasilkan isyarat beli. Apabila purata bergerak jangka pendek melintasi purata bergerak jangka panjang (PMA 200 kitaran) menghasilkan isyarat jual. Dengan cara ini, arah trend ditentukan dengan menilai hubungan susunan beberapa purata bergerak.

Selain itu, strategi ini juga menetapkan titik berhenti untuk mengawal risiko.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

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

  2. Indeks SMMA menapis bunyi pasaran dengan berkesan, dan EMA mengesan trend garis panjang.

  3. Ia sesuai untuk akaun leverage tinggi, yang dapat meningkatkan keuntungan perdagangan.

  4. Penetapan titik hentian yang berkesan untuk mengawal risiko.

  5. Optimumkan jenis dagangan ((EURUSD) dan kitaran ((15 minit)), menjadikannya lebih unggul.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Banyak menggunakan purata bergerak, mungkin terlepas peluang untuk berpatah balik dalam jangka pendek.

  2. Leverage yang tinggi meningkatkan kerugian dan juga keuntungan.

  3. Apabila purata bergerak memberi isyarat, mungkin keadaan dalam jangka pendek telah bertukar.

  4. EURUSD boleh berubah-ubah dengan ketara, membawa risiko yang lebih besar.

Untuk menghadapi risiko ini, anda boleh menyesuaikan kelipatan leverage, mengoptimumkan parameter purata bergerak, memperkenalkan indikator lain untuk menilai perubahan harga dan sebagainya.

Arah pengoptimuman

Kaedah utama untuk mengoptimumkan strategi ini ialah:

  1. Penilaian prestasi pelbagai jenis dan kitaran, memilih parameter yang optimum.

  2. Uji gabungan parameter yang berbeza dan jumlah purata bergerak.

  3. Meningkatkan jumlah transaksi atau turun naik untuk menentukan titik balik jangka pendek.

  4. Penyesuaian dinamik untuk meningkatkan stop loss amplitud.

  5. Menyertai Indeks ENU, titik balik.

Dengan pelbagai ujian dan pengoptimuman, anda boleh meningkatkan kestabilan dan keuntungan strategi anda.

ringkaskan

Strategi purata bergerak ini mengintegrasikan kelebihan penunjuk garis rata untuk membentuk sistem penghakiman trend yang mantap. Ia mengoptimumkan jenis dan kitaran perdagangan, sangat sesuai untuk perdagangan hari yang tinggi. Dengan penyesuaian parameter dan ujian pengoptimuman, strategi ini boleh menjadi strategi perdagangan algoritma yang cekap dan dipercayai.

Kod sumber strategi
/*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)