Purata pergerakan berganda dan strategi jangka pendek gabungan MACD


Tarikh penciptaan: 2023-10-09 16:47:42 Akhirnya diubah suai: 2023-10-09 16:47:42
Salin: 0 Bilangan klik: 749
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menggabungkan penggunaan garis purata ganda, penunjuk rawak dan penunjuk MACD untuk mengenal pasti peluang perdagangan garis pendek, yang merupakan strategi perdagangan garis pendek yang lebih klasik.

Prinsip

Strategi ini berdasarkan kepada prinsip-prinsip berikut:

  1. Menggunakan garis purata EMA 50 dan 100 kitaran untuk menentukan arah trend. EMA mempunyai kitaran purata yang lebih pendek dan dapat bertindak balas dengan cepat terhadap perubahan harga. Meletakkan 100 di atas garis purata 50 bermaksud masuk lebih banyak; Meletakkan 100 di bawah garis purata 50 bermaksud masuk kosong.

  2. Menggunakan MACD indikator untuk menentukan masa beli dan jual. Apabila perbezaan dari atas ke atas 0 menunjukkan peningkatan kekuatan multihead, lakukan lebih banyak; Apabila perbezaan dari bawah ke bawah 0 meningkatkan kekuatan kosong, lakukan kosong.

  3. Gabungan penunjuk Stochastic RSI untuk menentukan sama ada terlalu banyak membeli atau menjual. Penunjuk ini menggabungkan kelebihan penunjuk KDJ dan RSI, yang dapat menunjukkan keadaan pasaran yang terlalu banyak membeli dan menjual. Apabila penunjuk di bawah 20 adalah terlalu banyak, ditambah dengan penunjuk lain; apabila penunjuk di atas 80 adalah terlalu banyak, ditambah dengan penunjuk lain.

  4. Setelah menentukan arah pembukaan, anda boleh membuka kedudukan jika 4 daripada 5 garis K yang paling dekat dengan harga tutup menyentuh garis rata-rata, yang menunjukkan terdapat sokongan atau tekanan di sekitar garis rata-rata.

  5. Menggunakan Stop Loss Point untuk menguruskan risiko.

Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Kombinasi pelbagai indikator, penggunaan garis rata-rata secara komprehensif, indikator overbought dan oversold dan indikator tenaga, meningkatkan peluang kemenangan perdagangan.

  2. Tempoh purata yang lebih pendek, dapat menangkap trend dengan cepat dan membalikkannya. Parameter MACD dioptimumkan, mengenal pasti masa membeli dan menjual dengan tepat.

  3. Stochastic RSI telah dioptimumkan untuk mengenal pasti fenomena jual beli berlebihan.

  4. Menggunakan tekanan sokongan berhampiran garis purata untuk mengawal irama, untuk mengelakkan tersangkut dalam penembusan yang tidak berkesan.

  5. Hentikan kerugian yang munasabah, mengawal risiko perdagangan tunggal dengan berkesan.

Risiko

Strategi ini mempunyai beberapa risiko:

  1. Namun, kerugian akibat penembusan palsu masih tidak dapat dielakkan sepenuhnya.

  2. Kombinasi pelbagai petunjuk mungkin berlaku, menyebabkan isyarat perdagangan tidak konsisten.

  3. Stop loss yang tetap mungkin tidak dapat menyesuaikan diri dengan perubahan pasaran.

  4. Kod yang dilaksanakan lebih rumit, banyak parameter, dan tidak mudah untuk dioptimumkan.

Penyelesaian untuk menghadapi risiko adalah seperti berikut:

  1. Optimasi parameter, meningkatkan kualiti isyarat, mengurangkan kebarangkalian penembusan palsu.

  2. Menetapkan keutamaan antara indikator untuk mengelakkan pertembungan isyarat.

  3. Mengaktifkan Tracker Stop Loss, dan menetapkan Julat Stop Loss berdasarkan ATR dan sebagainya.

  4. Mempermudahkan kod logik, mengambil parameter teras untuk ujian dan pengoptimuman.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa arah:

  1. Uji peredaran garis purata dan parameter MACD untuk mencari kombinasi parameter terbaik.

  2. Uji pelbagai indikator overbought dan oversold sebagai alternatif kepada Stochastic RSI.

  3. Berusahalah untuk menggunakan stop loss dinamik, stop loss bergerak dan lain-lain untuk membuat pengurusan kerugian lebih bijak.

  4. Tambahan syarat penapis, seperti peningkatan jumlah transaksi, meningkatkan kualiti isyarat.

  5. Mengoptimumkan logik pembukaan kedudukan untuk mengelakkan penembusan yang tidak berkesan.

  6. Tetapkan had stop loss untuk jumlah dana akaun, jumlah dagangan harian, dan lain-lain untuk mengawal risiko keseluruhan.

ringkaskan

Strategi ini menggabungkan kelebihan pelbagai petunjuk dan mempunyai kegunaan yang kuat dalam perdagangan garis pendek. Dengan terus mengoptimumkan parameter, logik membuka posisi yang ketat, dan meningkatkan strategi pengurusan kerugian, anda dapat meningkatkan lagi kestabilan dan keuntungan strategi.

Kod sumber strategi
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="Forex scalper 2xEMA + SRSI + MACD", shorttitle="Forex scalper 5-15min", overlay=true)
src = input(title="Source", type=input.source, defval=close)

src_0 = src[0]
src_1 = src[1]
src_2 = src[2]
src_3 = src[3]
src_4 = src[4]

len50 = input(50, minval=1, title="Length")
src50 = input(close, title="Source")
out50 = ema(src50, len50)
len100 = input(100)
src100 = input(close, title="Source")
out100 = ema(src100, len100)

len1 = input(1, minval=1, title="Length")
src1 = input(close, title="Source")
out1 = sma(src1, len1)

length = input(4, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
cu = crossover(k,OverSold)
co = crossunder(k,OverBought)

sma_down = crossunder(out1, out50)
sma_up = crossover(out1,out50)

//if (not na(k) and not na(d))
  //  if (co and k < OverSold)
    //    strategy.entry("StochLE", strategy.long, comment="StochLE")
    //if (cu and k > OverBought)
     //   strategy.entry("StochSE", strategy.short, comment="StochSE")

crossCandle_4 = crossover(src[4],out50)
crossCandleUnder_4= cross(src[4],out50)
crossCandle_3 = crossover(src[3],out50)
crossCandleUnder_3= crossunder(src[3],out50)
crossCandle_2 = crossover(src[2],out50)
crossCandleUnder_2= crossunder(src[2],out50)
crossCandle_1 = crossover(src[1],out50)
crossCandleUnder_1= crossunder(src[1],out50)
crossCandle_0 = crossover(src[0],out50)
crossCandleUnder_0= crossunder(src[0],out50)

conditionOver = (crossCandle_4 or crossCandle_3 or crossCandle_2 or crossCandle_1 or crossCandle_0)
conditionUnder =(crossCandleUnder_4 or crossCandleUnder_3 or crossCandleUnder_2 or crossCandleUnder_1 or crossCandleUnder_0)

touch4 = (cross(low[4],out50) or cross(high[4],out50))
touch3 = (cross(low[3],out50) or cross(high[3],out50))
touch2 = (cross(low[2],out50) or cross(high[2],out50))
touch1 = (cross(low[1],out50) or cross(high[1],out50))

touch = touch1 or touch2 or touch3 or touch4

//and sma_up
//and sma_down

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src_macd = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 10)
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)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

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

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)


// plot((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close >= out50 and  (cu) and out50 > out100 and hist>=0 , title="Buy", style=columns, color=lime)
// plot((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close <= out50 and  (co) and out50< out100 and hist<=0 , title="sell", style=columns, color=red)


long_cond = ((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close > out50 and  (cu) and out50 > out100 and hist>=0)
short_cond = ((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close < out50 and  (co) and out50< out100 and hist<=0)

tp=input(200)
sl=input(200)

strategy.entry("long",strategy.long, when=long_cond)
strategy.entry("short",strategy.short, when=short_cond)

strategy.exit("X_long", "long", profit=tp,  loss=sl, when=touch  )
strategy.exit("x_short", "short",profit=tp, loss=sl,when = touch )