Strategi MA berganda dengan had masa

Penulis:ChaoZhang, Tarikh: 2023-11-14 16:45:03
Tag:

img

Ringkasan

Strategi ini melaksanakan modul had masa berdasarkan strategi purata bergerak berganda asal untuk mengawal masa permulaan strategi. Modul had masa dapat menguruskan masa berjalan strategi dengan berkesan dan mengurangkan risiko perdagangan dalam keadaan pasaran yang tidak menguntungkan.

Prinsip

Strategi ini menghasilkan isyarat perdagangan menggunakan MA pantas dan perlahan. MA pantas mempunyai tempoh 14 hari dan MA perlahan mempunyai tempoh 21 hari. Isyarat beli dihasilkan apabila MA pantas melintasi di atas MA perlahan. Isyarat jual dihasilkan apabila MA pantas melintasi di bawah MA perlahan.

Strategi ini juga menggabungkan pilihan pembalikan perdagangan untuk membalikkan arah perdagangan asal.

Modul had masa membandingkan masa semasa dengan masa permulaan yang dikonfigurasi menggunakan cap masa, mengembalikan benar atau salah untuk mengawal sama ada strategi bermula atau tidak. Tahun permulaan, bulan, hari, jam dan minit perlu ditetapkan. Strategi hanya akan bermula apabila masa semasa melebihi masa permulaan yang dikonfigurasi.

Kelebihan

  • Pemasaran Dual secara berkesan menangkap trend jangka menengah hingga pendek
  • Modul had masa mengawal dengan tepat masa berjalan strategi, mengelakkan perdagangan yang tidak perlu di bawah keadaan pasaran yang tidak baik
  • Pilihan pembalikan perdagangan menambah fleksibiliti

Risiko dan Penyelesaian

  • Pemasaran dua kali boleh menghasilkan isyarat perdagangan yang berlebihan, meningkatkan kekerapan perdagangan dan kos
  • Pengaturan had masa yang tidak betul boleh menyebabkan peluang yang hilang
  • Peralihan perdagangan yang salah boleh membawa kepada isyarat perdagangan yang salah

Mengoptimumkan tempoh MA boleh mengurangkan kekerapan perdagangan. Waktu permulaan juga harus ditetapkan secara rasional untuk mengelakkan peluang yang hilang. Akhirnya, pilih dengan teliti sama ada untuk membalikkan isyarat berdasarkan keadaan pasaran.

Arahan pengoptimuman

  • Menambah modul stop loss mengawal risiko dagangan individu dengan lebih baik
  • Melaksanakan stop loss yang perlahan-lahan memindahkan titik stop loss boleh membantu mengunci keuntungan
  • Menggabungkan isyarat di pelbagai simbol boleh meningkatkan kualiti isyarat dan mengurangkan isyarat palsu
  • Membangunkan modul pengoptimuman parameter yang secara automatik mencari kombinasi parameter optimum

Ringkasan

Strategi ini menjana isyarat perdagangan menggunakan MAs berganda dan mengawal masa berjalan dengan modul had masa, dengan berkesan menangkap trend sambil mengelakkan keadaan pasaran yang tidak menguntungkan. Penambahbaikan lanjut boleh dibuat melalui penyesuaian parameter, modul stop loss, penjanaan isyarat silang aset, dll. untuk mengurangkan kekerapan perdagangan sambil meningkatkan kestabilan dan keuntungan setiap perdagangan.


/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY TIME LIMITING ***
//
//  This is a follow up to my previous strategy example for risk management, extended to include a time limiting factor.

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// Risk management
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
// *** FOCUS OF EXAMPLE ***
// Time limiting
// a toggle for enabling/disabling
useTimeLimit    = input(defval = true, title = "Use Start Time Limiter?")
// set up where we want to run from
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// *** FOCUS OF EXAMPLE ***
// === TIME LIMITER CHECKING FUNCTION ===
// using a multi line function to return true or false depending on our input selection
// multi line function logic must be indented.
startTimeOk() =>
    // get our input time together
    inputTime   = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
    // check the current time is greater than the input time and assign true or false
    timeOk      = time > inputTime ? true : false
    // last line is the return value, we want the strategy to execute if..
    // ..we are using the limiter, and the time is ok -OR- we are not using the limiter
    r = (useTimeLimit and timeOk) or not useTimeLimit

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// *** FOCUS OF EXAMPLE ***
// wrap our strategy execution in an if statement which calls the time checking function to validate entry
// like the function logic, content to be included in the if statement must be indented.
if( startTimeOk() )
    // === STRATEGY - LONG POSITION EXECUTION ===
    enterLong = not tradeDirection[1] and tradeDirection
    exitLong = tradeDirection[1] and not tradeDirection
    strategy.entry( id = "Long", long = true, when = enterLong )
    strategy.close( id = "Long", when = exitLong )
    
    // === STRATEGY - SHORT POSITION EXECUTION ===
    enterShort = tradeDirection[1] and not tradeDirection
    exitShort = not tradeDirection[1] and tradeDirection
    strategy.entry( id = "Short", long = false, when = enterShort )
    strategy.close( id = "Short", when = exitShort )
    
    // === STRATEGY RISK MANAGEMENT EXECUTION ===
    strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
    strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)


Lebih lanjut