Strategi Sistem Rata-rata Bergerak Padat

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

img

Gambaran umum

Strategi ini adalah sistem rata-rata bergerak berdasarkan 4 SMMA (Smoothed Moving Average) dengan periode yang berbeda dan 1 indikator EMA. Ini menggabungkan beberapa alat analisis teknis untuk membentuk strategi perdagangan melalui penilaian tren. Strategi ini terutama cocok untuk perdagangan intraday obligasi 15 menit EURUSD leverage tinggi.

Prinsip Strategi

Strategi ini menggunakan 4 SMMA dengan parameter yang berbeda (3, 6, 9, 50) dan 1 EMA (200) untuk membangun sistem rata-rata bergerak multi-level. Indikator SMMA dapat secara efektif menyaring kebisingan pasar dan menentukan arah tren. Indikator EMA mendeteksi tren jangka panjang. Logika perdagangan spesifik adalah:

Ketika rata-rata bergerak jangka pendek (seperti SMMA 3-periode) melintasi di atas rata-rata bergerak jangka panjang (seperti EMA 200-periode), sinyal beli dihasilkan. Ketika rata-rata bergerak jangka pendek melintasi di bawah rata-rata bergerak jangka panjang, sinyal jual dihasilkan. Dengan menilai susunan beberapa rata-rata bergerak, arah tren ditentukan.

Selain itu, strategi juga menetapkan titik stop profit dan stop loss untuk mengendalikan risiko.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Struktur rata-rata bergerak multi-level dapat secara efektif menentukan arah tren dan mengurangi sinyal palsu.

  2. Indikator SMMA secara efektif menyaring kebisingan pasar, dan indikator EMA mendeteksi tren jangka panjang.

  3. Ini cocok untuk akun leverage tinggi untuk memperkuat keuntungan perdagangan.

  4. Stop profit dan stop loss point diatur untuk mengontrol risiko secara efektif.

  5. Mengoptimalkan varietas perdagangan (EURUSD) dan siklus (15 menit) untuk membuatnya lebih menguntungkan.

Analisis Risiko

Strategi ini juga memiliki risiko berikut:

  1. Jumlah rata-rata bergerak yang besar dapat melewatkan peluang pembalikan jangka pendek.

  2. Leverage tinggi memperkuat kerugian sementara memperkuat keuntungan.

  3. Ketika rata-rata bergerak menghasilkan sinyal, tren jangka pendek mungkin sudah berbalik.

  4. Nilai tukar EURUSD dapat mengalami fluktuasi yang keras, membawa risiko yang lebih besar.

Menanggapi risiko ini, kita dapat menyesuaikan rasio leverage dengan tepat, mengoptimalkan parameter rata-rata bergerak, memperkenalkan indikator lain untuk menilai pembalikan tren, dll untuk optimalisasi.

Arahan Optimasi

Arah optimasi utama dari strategi ini meliputi:

  1. Evaluasi kinerja varietas dan siklus yang berbeda dan pilih parameter optimal.

  2. Uji kombinasi dan kuantitas rata-rata bergerak yang berbeda.

  3. Meningkatkan indikator volume atau volatilitas untuk menentukan titik pembalikan jangka pendek.

  4. Meningkatkan penyesuaian dinamis dari stop profit dan stop loss range.

  5. Tambahkan indikator ENU untuk menentukan titik pembalikan.

Melalui pengujian dan optimalisasi yang beragam, stabilitas dan profitabilitas strategi dapat ditingkatkan secara signifikan.

Ringkasan

Strategi rata-rata bergerak ini mengintegrasikan keuntungan dari indikator rata-rata bergerak untuk membentuk sistem penilaian tren yang kuat. Ini mengoptimalkan varietas dan siklus perdagangan dan sangat cocok untuk perdagangan intraday leverage tinggi. Melalui penyesuaian parameter dan pengujian optimalisasi, strategi ini dapat menjadi strategi perdagangan algoritma yang efisien dan andal.


/*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 banyak