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.
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.
Strategi ini mempunyai kelebihan berikut:
Struktur purata bergerak pelbagai peringkat dapat menentukan arah trend dengan berkesan dan mengurangkan isyarat palsu.
Penunjuk SMMA menapis bunyi bising pasaran dengan berkesan, dan penunjuk EMA mengesan trend jangka panjang.
Ia sesuai untuk akaun leverage tinggi untuk meningkatkan keuntungan perdagangan.
Titik berhenti keuntungan dan titik berhenti kerugian ditetapkan untuk mengawal risiko dengan berkesan.
Mengoptimumkan pelbagai dagangan (EURUSD) dan kitaran (15 minit) untuk menjadikannya lebih menguntungkan.
Strategi ini juga mempunyai risiko berikut:
Jumlah besar purata bergerak mungkin terlepas peluang pembalikan jangka pendek.
Leverage yang tinggi meningkatkan kerugian sambil meningkatkan keuntungan.
Apabila purata bergerak menghasilkan isyarat, trend jangka pendek mungkin telah berbalik.
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.
Arah pengoptimuman utama strategi ini termasuk:
Menilai prestasi pelbagai jenis dan kitaran dan memilih parameter optimum.
Uji kombinasi dan kuantiti purata bergerak yang berbeza.
Meningkatkan jumlah atau penunjuk turun naik untuk menentukan titik pembalikan jangka pendek.
Meningkatkan pelarasan dinamik julat stop profit dan stop loss.
Tambah penunjuk ENU untuk menentukan titik pembalikan.
Melalui ujian dan pengoptimuman pelbagai aspek, kestabilan dan keuntungan strategi dapat ditingkatkan dengan besar.
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)