Strategi silang SMA


Tarikh penciptaan: 2023-11-08 11:36:51 Akhirnya diubah suai: 2023-11-08 11:36:51
Salin: 1 Bilangan klik: 646
1
fokus pada
1617
Pengikut

Strategi silang SMA

Gambaran keseluruhan

Strategi ini berdasarkan kepada prinsip silang antara purata bergerak pantas dan purata bergerak perlahan untuk menghasilkan isyarat perdagangan. Isyarat beli dihasilkan apabila purata bergerak pantas melintasi purata bergerak perlahan dari bawah; isyarat jual dihasilkan apabila purata bergerak pantas melintasi purata bergerak perlahan dari atas ke bawah.

Prinsip

Strategi ini menggunakan fungsi sma untuk mengira purata bergerak cepat dan purata bergerak perlahan. Di mana fast_SMA adalah purata bergerak cepat dengan panjang kitaran fast_SMA_input; slow_SMA adalah purata bergerak perlahan dengan panjang kitaran slow_SMA_input.

Strategi menggunakan fungsi cross dan crossunder untuk menentukan persilangan purata bergerak cepat dan purata bergerak perlahan. Apabila bergerak cepat melalui purata bergerak perlahan, pembolehubah LONG adalah benar, menghasilkan isyarat beli; apabila bergerak perlahan melalui purata bergerak cepat, pembolehubah SHORT adalah benar, menghasilkan isyarat jual.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Prinsip-prinsip strategi adalah mudah, mudah difahami dan dilaksanakan.
  2. Tempoh purata bergerak yang boleh disesuaikan untuk keadaan pasaran yang berbeza.
  3. Ia boleh menapis sebahagian bunyi pasaran dan menghasilkan isyarat dagangan yang lebih dipercayai.
  4. Ia boleh menangkap permulaan dan perubahan trend pada masa yang sama.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Jika ia tidak disiapkan dengan betul, ia akan menghasilkan terlalu banyak isyarat dagangan, yang akan menyebabkan dagangan yang kerap berlaku.
  2. Di pasaran Forex, ia mungkin akan menghasilkan banyak isyarat yang tidak sah.
  3. Tidak dapat dipastikan berapa lama trend ini akan berterusan, dan ia mungkin akan berbalik terlalu awal.

Kaedah untuk mengawal risiko:

  1. Tetapkan parameter purata bergerak yang munasabah untuk menyeimbangkan kesan penapisan dan kepekaan.
  2. Penapisan penunjuk trend bersama dengan isyarat tidak sah.
  3. Tetapkan titik henti dan kawal kerugian tunggal.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Menambah syarat penapisan, memeriksa metrik lalu lintas atau turun naik semasa penembusan purata bergerak, untuk mengelakkan penembusan palsu.
  2. Gabungan dengan penunjuk trend, mengenal pasti arah dan kekuatan trend.
  3. Menambah model pembelajaran mesin untuk mengoptimumkan parameter purata bergerak secara automatik.
  4. Gabungan dengan penunjuk teknikal yang menyokong titik rintangan, Brin Belt dan lain-lain untuk memetakan kawasan dagangan, meningkatkan ketepatan masuk.

ringkaskan

Strategi ini menggunakan kelebihan purata bergerak untuk menghasilkan isyarat perdagangan dengan mudah dan berkesan. Walaupun terdapat beberapa risiko, ia boleh diperbaiki dengan cara mengoptimumkan parameter, menambah syarat penapisan dan sebagainya.

Kod sumber strategi
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-13 00:00:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@author Jacques Grobler
//
//                  SIMPLE CROSS OVER BOT
//                  =====================
//
// This is a simple example of how to set up a strategy to go long or short
// If you make any modifications or have any suggestions, let me know
// When using this script, every section marked back testing should be 
// uncommented in order to use for back testing, same goes for using the script portion

///////////////////////////////////////////////////////////////////////////////////////
//// INTRO
//// -----
// BACKTESTING
//@version=4
strategy(title="SimpleCrossOver_Bot_V1_Backtester", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0, commission_type=strategy.commission.percent, commission_value=0.1)

// SIGNALS
//study(title="SimpleCrossOver_Bot_V1_Signals", overlay = true)

///////////////////////////////////////////////////////////////////////////////////////
//// INPUTS
//// ------
// BACKTESTING
dateSart_Year = input(2018, title="Start Year", minval=2000)
dateSart_Month = input(1, title="Start Month", minval=1, maxval=12)
dateSart_Day = input(1, title="Start Day", minval=1, maxval=31)
dateEnd_Year = input(2019, title="End Year", minval=2000)
dateEnd_Month = input(1, title="End Month", minval=1, maxval=12)
dateEnd_Day = input(1, title="End Day", minval=1, maxval=31)

// BACKTESTING AND SIGNALS
fast_SMA_input = input(7, title="SMA Fast")
slow_SMA_input = input(25, title="SMA Slow")

///////////////////////////////////////////////////////////////////////////////////////
//// INDICATORS
//// ----------
fast_SMA = sma(close, fast_SMA_input)
slow_SMA = sma(close, slow_SMA_input)

///////////////////////////////////////////////////////////////////////////////////////
//// STRATEGY
//// --------
LONG = cross(fast_SMA, slow_SMA) and fast_SMA > slow_SMA
stratLONG() => crossover(fast_SMA, slow_SMA)
SHORT = cross(fast_SMA, slow_SMA) and fast_SMA < slow_SMA
stratSHORT() => crossunder(fast_SMA, slow_SMA)

///////////////////////////////////////////////////////////////////////////////////////
//// TRIGGERS
//// --------
// BACKTESTING
testPeriodStart = timestamp(dateSart_Year, dateSart_Month, dateSart_Day, 0, 0)
testPeriodStop = timestamp(dateEnd_Year, dateEnd_Month, dateEnd_Day, 0, 0)
timecondition = true

strategy.entry(id="LONG", long = true, when=timecondition and stratLONG())
strategy.entry(id="SHORT", long = false, when=timecondition and stratSHORT())

// SIGNALS
//alertcondition(LONG, title="LONG")
//alertcondition(SHORT, title="SHORT")

///////////////////////////////////////////////////////////////////////////////////////
//// PLOTS
//// -----
// BACKTESTING AND SIGNALS
plot(fast_SMA, color=green, linewidth=1)
plot(slow_SMA, color=yellow, linewidth=1)
plotshape(LONG, title="LONG", style=shape.triangleup, text="LONG", location=location.belowbar, size=size.small, color=green)
plotshape(SHORT, title="SHORT", style=shape.triangledown, text="SHORT", location=location.abovebar, size=size.small, color=red)