Strategi perdagangan momentum gabungan STEM dan MATCS


Tarikh penciptaan: 2023-09-15 16:22:48 Akhirnya diubah suai: 2023-09-15 16:22:48
Salin: 0 Bilangan klik: 655
1
fokus pada
1617
Pengikut

Strategi ini dipanggil strategi perdagangan momentum gabungan STEM dan MATCS. Strategi ini menggunakan gabungan indikator Supertrend dengan indikator MACD untuk membentuk isyarat perdagangan.

Bagaimana strategi ini berfungsi:

  1. Mengira Indikator Supertrend, yang menghasilkan isyarat beli dan jual apabila harga bertukar.
  2. Hitung garis laju, garis tengah, dan garis perlahan MACD. Apabila garis laju melintasi garis tengah, ia menghasilkan isyarat beli, dan apabila garis laju melintasi garis tengah, ia menghasilkan isyarat jual.
  3. Gabungan antara indikator Supertrend dan MACD, hanya boleh masuk apabila kedua-duanya memberi isyarat pada masa yang sama.
  4. Menggunakan ATR untuk mengira Stop Loss Dinamik.

Peraturan transaksi khusus:

  1. Apabila Supertrend berbalik dari turun ke bawah dan MACD melalui garis tengah, buatlah entri tambahan.
  2. Apabila Supertrend bertukar dari berliku ke bawah dan MACD garis pantas menembusi garis tengah, masuklah secara kosong.
  3. Syarat kedudukan sejajar: Stop loss atau Stop Stop ((pilihan) )

Kelebihan strategi ini:

  1. Menggabungkan pelbagai petunjuk untuk meningkatkan ketepatan isyarat.
  2. Ia juga boleh digunakan untuk menghalang kerugian individu yang besar.
  3. Ia mempunyai keupayaan untuk mengesan trend dan membalikkan perdagangan.

Risiko strategi ini:

  1. Parameter penunjuk Supertrend dan MACD tidak ditetapkan dengan betul, yang boleh menyebabkan isyarat yang salah.
  2. Titik henti terlalu dekat dan mungkin sering dihentikan.
  3. Kos transaksi dan slippage mempengaruhi keuntungan.

Ringkasnya, strategi momentum gabungan STEM dan MATCS dengan integrasi penunjuk untuk meningkatkan kesan, sesuai untuk perdagangan garis pendek dan garis tengah. Penggunaan strategi hentikan kerugian sangat penting untuk mengawal risiko. Pedagang perlu mengurangkan risiko dalam perdagangan fizikal melalui pengoptimuman parameter dan pengurusan dana yang ketat.

Kod sumber strategi
/*backtest
start: 2023-09-07 00:00:00
end: 2023-09-14 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/
// © IncomePipelineGenerator
//@version=4
// strategy("STRAT_STEM_MATCS_BTC", overlay=true, pyramiding = 0, default_qty_value = 20, slippage = 5)


ST_EMA_PERIOD = input(1, minval=1)
ST_EMA = ema(close, ST_EMA_PERIOD)

LENGTH = input(title="ATR_PERIOD", type=input.integer, defval=95)
ATR_TUNE = input(title="ATR_TUNE", type=input.float, step=0.1, defval=2.1)
showLabels = input(title="Show_Buy/Sell_Labels ?", type=input.bool, defval=true)
highlightState = input(title="Highlight_State ?", type=input.bool, defval=true)

ATR = ATR_TUNE * atr(LENGTH)

longStop = ST_EMA - ATR
longStopPrev = nz(longStop[1], longStop)
longStop := (close[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = ST_EMA + ATR
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (close[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (close) > shortStopPrev ? 1 : dir == 1 and (close) < longStopPrev ? -1 : dir


fastLength = input(3, minval=1), medLength=input(9, minval=1), slowLength=input(12, minval=1), signalLength=input(16,minval=1)
fastMA = ema(close, fastLength), medMA = ema(close, medLength), slowMA = ema(close, slowLength)

macd = fastMA - slowMA
fmacd = fastMA - medMA
smacd = slowMA - medMA

signal = ema(macd, signalLength)
fsignal = ema(fmacd, signalLength)
ssignal = ema(smacd, signalLength)


SetStopLossShort = 0.0
SetStopLossShort := if(strategy.position_size < 0)
    StopLossShort = shortStop
    min(StopLossShort,SetStopLossShort[1])

SetStopLossLong = 0.0
SetStopLossLong := if(strategy.position_size > 0)
    StopLossLong = longStop
    max(StopLossLong,SetStopLossLong[1])


ATR_CrossOver_Period = input(5, type=input.integer, minval=1, maxval=2000)
ATR_SIGNAL_FINE_TUNE = input(0.962, type=input.float)  
ATR_CS = atr(ATR_CrossOver_Period)*ATR_SIGNAL_FINE_TUNE

StopLoss_Initial_Short = input(0.0, type=input.float) 
StopLoss_Initial_Long = input(0.0, type=input.float) 

StopLoss_Long_Adjust = input(0.0, type=input.float) 
StopLoss_Short_Adjust = input(0.0, type=input.float) 

VOLUME_CHECK = input(200)

//Custom Time Interval
fromMinute = input(defval = 0, title = "From Minute", minval = 0, maxval = 60)
fromHour = input(defval = 0, title = "From Hour", minval = 0, maxval = 24)
fromDay = input(defval = 1, title = "From Day", minval = 1)
fromMonth = input(defval = 1, title = "From Month", minval = 1)
fromYear = input(defval = 2019, title = "From Year", minval = 1900)
tillMinute = input(defval = 0, title = "Till Minute", minval = 0, maxval = 60)
tillHour = input(defval = 0, title = "Till Hour", minval = 0, maxval = 24)
tillDay = input(defval = 1, title = "Till Day", minval = 1)
tillMonth = input(defval = 1, title = "Till Month", minval = 1)
tillYear = input(defval = 2020, title = "Till Year", minval = 1900)
timestampStart = timestamp(fromYear,fromMonth,fromDay,fromHour,fromMinute)
timestampEnd = timestamp(tillYear,tillMonth,tillDay,tillHour,tillMinute)


//Custom Buy Signal Code --  This is where you design your own buy and sell signals. You now have millions of possibilites with the use of simple if/and/or statements.
if (  dir==1 and dir[1]==-1  and volume > VOLUME_CHECK and ((fsignal[1] -fsignal) <= 0) and  cross(fmacd, smacd) )
    strategy.exit("SELL")
    strategy.entry("BUY", strategy.long)
    strategy.exit("BUY_STOP","BUY", stop = close - StopLoss_Initial_Long)

//Custom Sell Signal Code
if  ( dir == -1 and dir[1] == 1 and dir[2] == 1 and dir[3] == 1 and dir[4] == 1 and  cross(fmacd, smacd) )
    strategy.exit( "BUY")
    strategy.entry("SELL", strategy.short)
    strategy.exit("SELL_STOP","SELL", stop = close + StopLoss_Initial_Short)

//Slight adjustments to ST for fine tuning
if (strategy.opentrades > 0 )
    strategy.exit("BUY_TRAIL_STOP","BUY", stop = longStop - StopLoss_Long_Adjust)
    strategy.exit("SELL_TRAIL_STOP","SELL", stop = shortStop + StopLoss_Short_Adjust)