Sistem terobosan dua hala garis masa silang


Tarikh penciptaan: 2023-11-22 15:22:49 Akhirnya diubah suai: 2023-11-22 15:22:49
Salin: 0 Bilangan klik: 566
1
fokus pada
1617
Pengikut

Sistem terobosan dua hala garis masa silang

Gambaran keseluruhan

Ini adalah strategi perdagangan kuantitatif yang menggunakan purata bergerak dan penunjuk MACD untuk melakukan operasi terobosan dua hala. Ia mempunyai ciri operasi sepanjang waktu, iaitu menentukan arah trend dalam jangka masa yang lebih lama dan mencari peluang masuk dalam jangka masa yang lebih pendek.

Prinsip Strategi

Strategi ini menggunakan 3 garis rata-rata SMMA dengan tempoh panjang yang berbeza dan satu garis rata-rata EMA untuk menentukan arah trend. Pada masa yang sama, ia digabungkan dengan indikator MACD untuk menentukan trend jangka pendek dan masa masuk. Secara khusus, syarat pembelian adalah: harga melintasi semua garis rata-rata di atas dan garis pendek di atas garis rata-rata panjang; dan syarat jual adalah sebaliknya, harga melintasi semua garis rata-rata di bawah dan garis pendek di bawah garis rata-rata panjang.

Ia dapat dilihat bahawa strategi ini menggunakan purata bergerak untuk menentukan arah trend jangka panjang dan jangka panjang, dan MACD untuk menentukan perubahan jangka pendek untuk menangkap masa masuk yang lebih baik. Operasi gabungan multi-aksara ini adalah ciri penting dalam strategi ini.

Analisis kelebihan

Kelebihan operasi merentas garisan masa ini adalah bahawa anda boleh memilih titik masuk terbalik jangka pendek yang sesuai dalam arah trend yang berkemungkinan tinggi, dan dengan itu mendapat pulangan risiko yang lebih baik. Secara khusus, terdapat 3 kelebihan utama:

  1. 3 garis SMMA rata-rata ditambah 1 garis EMA rata-rata gelombang pelbagai tahap, dapat menentukan arah trend jangka menengah dan jangka panjang dengan berkesan, dan mengelakkan operasi berlawanan arah.

  2. Indeks MACD menilai titik balik jangka pendek untuk masuk ke dalam pasaran, yang membolehkan harga masuk yang lebih baik.

  3. Perhubungan urutan purata bergerak yang ketat berfungsi sebagai syarat penapisan yang dapat mengurangkan kemungkinan kesalahan operasi.

Analisis risiko

Risiko utama strategi ini ialah:

  1. Rata-rata bergerak itu sendiri sangat ketinggalan dan mungkin terlepas peluang untuk membalikkan trend dalam jangka pendek.

  2. Indeks MACD mudah menghasilkan isyarat palsu yang memerlukan penapis harga.

  3. Pertimbangan berpusat pada banyak masa meningkatkan kerumitan strategi dan mudah menyebabkan kegagalan.

Untuk risiko 1 dan risiko 2, anda boleh mengoptimumkan dengan cara memendekkan kitaran garis rata-rata dan kitaran isyarat dengan tepat, dan bertindak balas dengan cepat terhadap pembalikan trend jangka pendek. Untuk risiko 3, anda perlu melakukan ujian pengoptimuman untuk pelbagai jenis dan kitaran, menjadikan parameter strategi sesuai dengan ciri-ciri jenis tersebut.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan parameter purata bergerak dan MACD supaya ia sesuai dengan ciri-ciri kitaran dan varieti yang berbeza. Contohnya, mengurangkan panjang garis purata, meningkatkan parameter isyarat, dan sebagainya.

  2. Tambah strategi hentikan kerugian, gunakan ATR atau lain-lain penunjuk untuk menetapkan hentikan bergerak yang munasabah. Ini dapat meningkatkan kawalan risiko strategi dengan ketara.

  3. Mencari penunjuk atau penapis yang lebih baik untuk menggantikan isyarat MACD. Contohnya, memperkenalkan penunjuk kadar turun naik, penapis isyarat dan sebagainya.

  4. Uji hubungan perkadaran stop loss dan stop loss yang berbeza untuk mendapatkan kombinasi parameter yang lebih baik daripada ganjaran risiko.

ringkaskan

Secara keseluruhannya, ini adalah sistem terobosan yang mempunyai pemikiran yang unik di sepanjang garisan masa. Ia menggunakan kelebihan purata bergerak dan MACD pada masa yang sama untuk melaksanakan strategi operasi penghakiman gabungan dalam beberapa tempoh masa. Dengan penyesuaian optimum terhadap parameter dan syarat penapisan, strategi ini boleh menjadi program perdagangan kuantitatif yang sangat praktikal.

Kod sumber strategi
/*backtest
start: 2023-10-22 00:00:00
end: 2023-11-21 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("Koala Script",initial_capital=1000, 
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.000065,
     slippage=3)
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 = 2031, 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")

time_cond = time >= startDate and time <= finishDate and londonEntry

fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
srcc = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)


// Calculating
fast_ma = sma_source ? sma(srcc, fast_length) : ema(srcc, fast_length)
slow_ma = sma_source ? sma(srcc, slow_length) : ema(srcc, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma and londonEntry and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 
shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma and londonEntry and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 
//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

length=input(14, title="ATR Length")
mult=input(1.0, title="Percentage Multiplier (for ex., 0.7 = 70%)", step=0.1, minval=0.1, maxval=5.0)

oa=input(false, title="Show actual ATR")

ii=syminfo.pointvalue==0
s=ii?na:oa?atr(length):(syminfo.pointvalue * mult * atr(length))

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


//tp = s*10000
//sl= s*10000



//if(tp>300)
//    tp:=300
//if(sl>300)
//    sl:=300
//if(sl<150)
//    sl:=150
//if(tp<150)
//    tp:=150
strategy.initial_capital = 50000
//MONEY MANAGEMENT--------------------------------------------------------------''
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(3,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 < 10000)
    size := 10000           //Set min. lot size



strategy.entry("long",1,when=longCond )
strategy.exit("closelong","long", profit=tp,loss=sl)
//strategy.close("long",when= crossunder(close[4],smma4) and close[4] > close[3] and close[3]>close[2] and close[2] > close[1] and close[1] > close)
strategy.entry("short",0,when=shortCond )
strategy.exit("closeshort","short", profit=tp,loss=sl)
//strategy.close("short",when= crossover(close[4],smma4) and close[4] < close[3] and close[3]< close[2] and close[2] < close[1] and close[1] < close)

strategy.close_all(when = not london)

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