Strategi Perdagangan Petunjuk Purata Pergerakan


Tarikh penciptaan: 2023-12-06 17:10:00 Akhirnya diubah suai: 2023-12-06 17:10:00
Salin: 0 Bilangan klik: 337
1
fokus pada
1141
Pengikut

Strategi Perdagangan Petunjuk Purata Pergerakan

Gambaran Keseluruhan Strategi

Strategi ini adalah strategi untuk menghasilkan isyarat perdagangan berdasarkan beberapa petunjuk purata bergerak. Strategi ini akan memberi perhatian kepada purata bergerak jangka pendek, pertengahan dan panjang pada masa yang sama, untuk menentukan arah trend dan menghasilkan isyarat perdagangan berdasarkan persimpangan mereka.

Nama strategi

Strategi Crossover Rata-rata Bergerak Berbilang

Prinsip Strategi

Strategi ini menggunakan purata bergerak pada 3 tempoh yang berbeza, termasuk garis 7 hari, garis 13 hari dan garis 21 hari. Logik perdagangan berdasarkan:

  1. Apabila garis 7 jangka pendek melintasi garis 13 jangka menengah, dan garis 21 jangka panjang berada dalam trend menaik, menghasilkan isyarat ganda;
  2. Apabila garis 7 dalam jangka pendek melintasi garis 13 dalam jangka menengah, dan garis 21 dalam jangka panjang berada dalam trend menurun, maka ia akan menghasilkan isyarat shortcut.

Dengan menggabungkan purata bergerak dari tempoh masa yang berbeza, trend pasaran dapat dinilai dengan lebih tepat dan perdagangan yang salah dapat dielakkan.

Kelebihan Strategik

  1. Menggunakan pelbagai set rata-rata bergerak, anda dapat menilai pergerakan pasaran dengan lebih tepat dan mengelakkan tertipu oleh terobosan palsu atau turun naik jangka pendek di pasaran.
  2. Hanya apabila trend jelas, isyarat dihasilkan, yang dapat mengurangkan jumlah transaksi yang tidak perlu, yang akan mengurangkan kos transaksi.
  3. Tetapan parameter adalah fleksibel dan boleh disesuaikan mengikut pilihan peribadi untuk menghidupkan purata bergerak mengikut keadaan pasaran yang berbeza.

Risiko Strategik

  1. Dalam pasaran yang mengalami perubahan ketegangan, isyarat yang salah boleh berlaku.
  2. Rata-rata bergerak digunakan sebagai petunjuk trend dan tidak dapat menentukan titik perubahan yang tepat.
  3. Rata-rata bergerak bersilang menghalang pengenalan trend dan mungkin kehilangan sebahagian daripada keuntungan.
  4. Risiko boleh dikurangkan dengan memperkenalkan isyarat pengesahan indikator teknikal lain, mengoptimumkan parameter purata bergerak.

Arah pengoptimuman strategi

  1. Pertimbangkan untuk memperkenalkan penunjuk turun naik untuk menilai kekuatan trend dan mengelakkan perdagangan dalam pasaran yang bergolak.
  2. Cuba gunakan teknik kuantitatif seperti pembelajaran mesin untuk mengoptimumkan parameter purata bergerak secara automatik.
  3. Tambah strategi hentikan kerugian, hentikan kerugian tepat pada masanya apabila kerugian meningkat.
  4. Pertimbangkan untuk mengurangkan slippage dengan menggunakan tiket harga terhad semasa melintasi purata bergerak.

ringkaskan

Strategi ini menggabungkan purata bergerak dari tiga tempoh masa yang pendek dan panjang, menilai trend pasaran berdasarkan hubungan silang mereka, dan merupakan strategi yang agak stabil dan efisien untuk mengikuti trend. Dengan mengoptimumkan parameter indikator, mekanisme hentian kerugian, dan cara pesanan, anda dapat meningkatkan lagi kemenangan dan keuntungan strategi.

Kod sumber strategi
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
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/
// © Crypto-Oli

//@version=4
strategy("CryptOli 3 MAs long/short Backtest", initial_capital=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, overlay=true)

// this is an educational Script - basicly its very simple - you can see how minimal changes impact results, thats why i posted it
// Credits to Quantnomad to publish tons of free educational script
// this Script is based on https://www.tradingview.com/script/0NgUadGr-Ultimate-MA-Cross-Indicator/ Quantnomads Ultimate MA Indicator 
// HA - Option for calcucaltion based on HA-Candles (very famous recently)
// Source Input - Option (Candletype for calculation, close, ohlc4 ect.) --- there are huge differences --- try it by your own

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
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=2015, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2030, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate

////////////////////////////////////////////////////////////////////////////////

h = input(false, title = "Signals from Heikin Ashi Candles")

ma_type      = input(title = "MA Type",         type = input.string,  defval = "SMMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA'])
src = input(ohlc4)

short_ma_len = input(title = "Short MA Length", type = input.integer, defval = 7,     minval = 1)
short_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close
middle_ma_len  = input(title = "Middle MA Length",  type = input.integer, defval = 13,    minval = 2)
middle_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close
long_ma_len  = input(title = "Long MA Length",  type = input.integer, defval = 21,    minval = 2)
long_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close


tick_round(x) => 
    round(x / syminfo.mintick) * syminfo.mintick

// Set initial values to 0
short_ma = 0.0
middle_ma = 0.0
long_ma  = 0.0

// Simple Moving Average (SMA)
if ma_type == 'SMA' 
    short_ma := sma(short_ma_src, short_ma_len)
    middle_ma := sma(middle_ma_src, middle_ma_len)
    long_ma  := sma(long_ma_src,  long_ma_len)

// Exponential Moving Average (EMA)
if ma_type == 'EMA'
    short_ma := ema(short_ma_src, short_ma_len)
    middle_ma := ema(middle_ma_src, middle_ma_len)
    long_ma  := ema(long_ma_src,  long_ma_len)

// Weighted Moving Average (WMA)
if ma_type == 'WMA'
    short_ma := wma(short_ma_src, short_ma_len)
    middle_ma := wma(middle_ma_src, middle_ma_len)
    long_ma  := wma(long_ma_src,  long_ma_len)

// Hull Moving Average (HMA)
if ma_type == 'HMA'
    short_ma := wma(2*wma(short_ma_src, short_ma_len/2)-wma(short_ma_src, short_ma_len), round(sqrt(short_ma_len)))
    middle_ma := wma(2*wma(middle_ma_src, middle_ma_len/2)-wma(middle_ma_src, middle_ma_len), round(sqrt(middle_ma_len)))
    long_ma  := wma(2*wma(long_ma_src,  long_ma_len /2)-wma(long_ma_src,  long_ma_len),  round(sqrt(long_ma_len)))

// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
    short_ma := vwma(short_ma_src, short_ma_len)
    middle_ma := vwma(middle_ma_src, middle_ma_len)
    long_ma  := vwma(long_ma_src,  long_ma_len)


// Smoothed Moving Average (SMMA)    
if ma_type == 'SMMA'
    short_ma := na(short_ma[1]) ? sma(short_ma_src, short_ma_len) : (short_ma[1] * (short_ma_len - 1) + short_ma_src) / short_ma_len
    middle_ma := na(middle_ma[1]) ? sma(middle_ma_src, middle_ma_len) : (middle_ma[1] * (middle_ma_len - 1) + middle_ma_src) / middle_ma_len
    long_ma  := na(long_ma[1])  ? sma(long_ma_src,  long_ma_len)  : (long_ma[1]  * (long_ma_len  - 1) + long_ma_src)  / long_ma_len

// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
    e1_short = ema(short_ma_src, short_ma_len)
    e1_middle = ema(middle_ma_src, middle_ma_len)
    e1_long  = ema(long_ma_src,  long_ma_len)
    
    short_ma := 2 * e1_short - ema(e1_short, short_ma_len)
    middle_ma := 2 * e1_middle - ema(e1_middle, middle_ma_len)
    long_ma  := 2 * e1_long  - ema(e1_long,  long_ma_len)

// Plot MAs
plot(short_ma, color = color.green,   linewidth = 1)
plot(middle_ma, color = color.yellow,   linewidth = 1)
plot(long_ma,  color = color.red, linewidth = 1)

if close>long_ma and short_ma>middle_ma and time_cond
    strategy.entry("Long", strategy.long)


if close<long_ma and short_ma<middle_ma and time_cond
    strategy.entry("Short", strategy.short)