Strategi Perdagangan Indikator Rata-rata Bergerak


Tanggal Pembuatan: 2023-12-06 17:10:00 Akhirnya memodifikasi: 2023-12-06 17:10:00
menyalin: 0 Jumlah klik: 605
1
fokus pada
1619
Pengikut

Strategi Perdagangan Indikator Rata-rata Bergerak

Tinjauan Strategi

Strategi ini adalah strategi untuk menghasilkan sinyal perdagangan berdasarkan beberapa indikator rata-rata bergerak. Strategi ini akan memperhatikan rata-rata bergerak jangka pendek, menengah, dan panjang secara bersamaan, untuk menilai arah tren dan menghasilkan sinyal perdagangan berdasarkan persimpangan mereka.

Nama kebijakan

Multi Moving Average Crossover Strategy (dalam bahasa Inggris)

Prinsip Strategi

Strategi ini menggunakan rata-rata bergerak dari 3 periode yang berbeda, termasuk garis 7 hari, garis 13 hari, dan garis 21 hari. Logika perdagangan didasarkan pada:

  1. Ketika garis 7 jangka pendek melewati garis 13 jangka menengah, dan garis 21 jangka panjang berada dalam tren naik, menghasilkan sinyal multitasking;
  2. Ketika garis 7 dalam jangka pendek melewati garis 13 dalam jangka menengah, dan garis 21 dalam jangka panjang berada dalam tren menurun, sinyal shorting dihasilkan.

Dengan menggabungkan moving average dari periode waktu yang berbeda, Anda dapat lebih akurat menilai tren pasar dan menghindari kesalahan perdagangan.

Keunggulan Strategis

  1. Dengan menggunakan beberapa kelompok moving average, Anda dapat lebih akurat menilai pergerakan pasar dan menghindari tertipu oleh terobosan palsu atau fluktuasi jangka pendek di pasar.
  2. Sinyal hanya dihasilkan ketika tren jelas, yang dapat mengurangi jumlah transaksi yang tidak perlu, sehingga mengurangi biaya transaksi.
  3. Pengaturan parameter fleksibel, memungkinkan untuk menyesuaikan siklus rata-rata bergerak sesuai dengan preferensi pribadi, sesuai dengan varietas dan lingkungan pasar yang berbeda.

Risiko Strategis

  1. Dalam pasar yang mengalami perubahan tren, sinyal-sinyal yang salah sering terjadi.
  2. Rata-rata bergerak digunakan sebagai indikator untuk mengikuti tren dan tidak dapat menentukan titik baliknya.
  3. Pengakuan lambat dari pergerakan rata-rata bergerak dapat kehilangan sebagian keuntungan.
  4. Risiko dapat dikurangi dengan mengintegrasikan indikator teknis lain untuk memverifikasi sinyal dan mengoptimalkan parameter moving average.

Arah optimasi strategi

  1. Pertimbangkan untuk memperkenalkan indikator volatilitas untuk menilai kekuatan tren dan hindari perdagangan di pasar yang bergoyang.
  2. Cobalah untuk mengoptimalkan parameter moving average secara otomatis menggunakan teknik kuantitatif seperti pembelajaran mesin.
  3. Meningkatkan strategi stop loss, dan stop loss tepat waktu ketika kerugian meningkat.
  4. Pertimbangkan untuk mengurangi slippage saat crossing moving averages dengan menggunakan limit order.

Meringkaskan

Strategi ini menggabungkan moving average dari tiga periode waktu yang pendek dan panjang, dan menilai tren pasar berdasarkan hubungan silang mereka, merupakan strategi yang relatif stabil dan efisien untuk mengikuti tren. Dengan mengoptimalkan parameter indikator, mekanisme stop loss, dan metode pemesanan, Anda dapat meningkatkan kemenangan dan profitabilitas strategi lebih lanjut.

Kode 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)