Strategi perdagangan had masa MA berganda


Tarikh penciptaan: 2023-11-14 16:45:03 Akhirnya diubah suai: 2023-11-14 16:45:03
Salin: 0 Bilangan klik: 654
1
fokus pada
1617
Pengikut

Strategi perdagangan had masa MA berganda

Gambaran keseluruhan

Strategi ini adalah berdasarkan kepada strategi dagangan linear ganda yang asal dan menambah modul had masa untuk mengawal masa permulaan strategi. Modul ini dapat menguruskan masa operasi strategi dengan berkesan dan mengurangkan risiko perdagangan dalam keadaan pasaran yang tidak ideal.

Prinsip

Strategi menggunakan MA pantas dan MA perlahan untuk membina isyarat perdagangan. Parameter MA pantas adalah 14 hari dan parameter MA perlahan adalah 21 hari. Ia menghasilkan isyarat beli apabila ia melintasi MA perlahan di atas MA pantas; ia menghasilkan isyarat jual apabila ia melintasi MA perlahan di bawah MA pantas.

Strategi ini juga memperkenalkan pilihan pembalikan perdagangan yang boleh membalikkan arah isyarat perdagangan asal.

Modul sekatan masa membandingkan masa semasa dengan masa permulaan yang ditetapkan, mengembalikan nilai sebenar, untuk mengawal sama ada strategi dimulakan. Modul ini memerlukan tahun, bulan, hari, jam, dan minit untuk memulakan, dan hanya apabila masa semasa melebihi masa yang ditetapkan, strategi akan dimulakan.

Kelebihan

  • Menggunakan MA berganda untuk membentuk isyarat dagangan yang berkesan untuk menangkap trend jangka pendek dan sederhana
  • Tambah modul had masa untuk mengawal masa operasi strategi dengan lebih tepat, mengelakkan perdagangan yang tidak perlu dalam keadaan pasaran yang tidak sesuai
  • Pilihan untuk menukarkan dagangan menambah fleksibiliti strategi

Risiko dan penyelesaian

  • Strategi MA berganda mungkin menghasilkan banyak isyarat dagangan, membawa kepada frekuensi dagangan yang lebih tinggi dan kos dagangan
  • Modul sekatan masa yang tidak betul boleh menyebabkan peluang perdagangan yang hilang
  • Pilihan pembalikan perdagangan yang tidak betul boleh menyebabkan isyarat perdagangan yang salah

Parameter kitaran MA boleh dioptimumkan dengan sewajarnya, mengurangkan frekuensi perdagangan. Pada masa yang sama, menetapkan masa yang munasabah untuk mengehadkan masa permulaan modul, untuk mengelakkan peluang yang terlewat. Akhirnya, dengan berhati-hati memilih apakah perlu membalikkan arah isyarat perdagangan berdasarkan keadaan pasaran yang berbeza.

Arah pengoptimuman

  • Tambah modul stop loss untuk mengawal risiko perdagangan tunggal
  • Menambah penjejakan henti bergerak, yang membolehkan anda bergerak henti secara beransur-ansur mengikut trend, untuk mengekstrak pengekalan yang menguntungkan
  • Gabungan pelbagai tanda operasi untuk meningkatkan kualiti isyarat dan mengurangkan isyarat palsu
  • Membangunkan modul pengoptimuman parameter yang secara automatik mencari kombinasi parameter terbaik

ringkaskan

Strategi ini membentuk isyarat dagangan dengan dua MA dan menambah masa yang terhad modul kawalan strategi masa berjalan, mampu menangkap trend dengan berkesan, sambil mengelakkan risiko dalam keadaan pasaran yang tidak ideal. Strategi ini juga boleh meningkatkan lagi dengan cara seperti parameter optimum, modul stop loss dan operasi lintas piawaian, meningkatkan kestabilan dan keuntungan setiap perdagangan sambil mengurangkan frekuensi perdagangan.

Kod sumber strategi
/*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)