Harga penutupan bulanan dan strategi persilangan purata bergerak


Tarikh penciptaan: 2023-11-23 17:09:01 Akhirnya diubah suai: 2023-11-23 17:09:01
Salin: 0 Bilangan klik: 570
1
fokus pada
1617
Pengikut

Harga penutupan bulanan dan strategi persilangan purata bergerak

Gambaran keseluruhan

Strategi ini menggunakan persilangan harga penutupan garisan bulan dengan rata-rata bergerak untuk menghasilkan isyarat perdagangan. Apabila garisan bulan melewati rata-rata bergerak di atas harga penutupan garisan bulan, buat lebih banyak; apabila garisan bulan melewati rata-rata bergerak di bawah harga penutupan garisan bulan, kosongkan.

Prinsip Strategi

Logik utama strategi ini ialah:

  1. Masukkan parameter kitaran untuk garis purata bergerak, anda boleh memilih SMA atau EMA
  2. Anda boleh memilih untuk memaparkan purata bergerak
  3. Anda boleh memilih harga penutupan saham lain sebagai isyarat
  4. Sinyal dagangan berdasarkan hubungan harga penutupan garis bulan dan garis purata bergerak
    • Berpindah pada purata bergerak pada harga penutupan, lakukan lebih banyak
    • Penutupan harga di bawah garis purata bergerak, kedudukan rata

Strategi ini menggunakan ciri-ciri halus garis purata bergerak untuk menyaring sebahagian daripada bunyi harga dan menangkap perubahan trend harga saham dalam jangka masa pertengahan. Apabila harga saham berada di atas garis purata, ini menunjukkan bahawa harga saham sedang membentuk trend pasar lembu; apabila harga saham berada di bawah garis purata, ini menunjukkan bahawa trend harga saham sedang berubah menjadi pasar beruang.

Kelebihan Strategik

Strategi ini mempunyai kelebihan utama:

  1. Menggunakan data bulan untuk menyaring kebisingan malam dan menangkap trend harga saham jangka panjang
  2. Tempoh purata bergerak yang boleh disesuaikan, parameter yang dioptimumkan untuk menyesuaikan diri dengan saham yang berbeza
  3. Anda boleh memilih saham lain sebagai sumber isyarat untuk meningkatkan kestabilan.
  4. Menggunakan teknologi anti-repainting canggih untuk mengelakkan kemerosotan
  5. Boleh masukkan tempoh masa pengesanan semula secara berkala untuk memudahkan pengoptimuman ujian

Secara keseluruhan, kerangka strategi ini mudah digunakan dan boleh digunakan untuk kebanyakan saham melalui pengoptimuman parameter, terutamanya untuk pelabur menengah dan panjang.

Risiko Strategik

Strategi ini juga mempunyai beberapa risiko, yang tertumpu kepada beberapa aspek:

  1. Data talian bulan dikemas kini dengan perlahan dan tidak dapat mencerminkan perubahan harga secara langsung.
  2. Terdapat sedikit ketinggalan dan mungkin kehilangan peluang untuk berdagang di talian pendek.
  3. Garis purata bergerak mempunyai keterlambatan dan tidak dapat mengawal masa menghasilkan isyarat
  4. Pilihan parameter yang tidak betul boleh menyebabkan terlalu konservatif atau kehilangan peluang

Untuk mengurangkan risiko, anda boleh mengoptimumkan dalam beberapa aspek berikut:

  1. Penghakiman tambahan untuk penunjuk teknikal yang digabungkan dengan bingkai masa yang lebih rendah
  2. Menyesuaikan kitaran purata bergerak untuk mencari kombinasi parameter terbaik
  3. Menggunakan tanda yang lebih stabil sebagai sumber isyarat
  4. Menyesuaikan saiz kedudukan dengan betul untuk mengawal kerugian tunggal

Arah pengoptimuman strategi

Strategi ini juga mempunyai ruang yang besar untuk pengoptimuman, terutamanya dari aspek berikut:

  1. Menambah strategi henti rugi untuk mengunci keuntungan dan mengawal risiko
  2. Gabungan dengan penunjuk lain, seperti KD, MACD dan lain-lain, untuk meningkatkan ketepatan isyarat perdagangan
  3. Mengoptimumkan parameter rata-rata bergerak secara dinamik menggunakan teknologi pembelajaran mesin
  4. Tambah modul pengurusan kedudukan untuk mengubah alokasi saiz kedudukan mengikut trend
  5. Tambahan fungsi penukaran multi-udara, yang boleh disesuaikan dengan keadaan pasaran
  6. K-Line dengan jangka masa yang lebih rendah untuk transaksi yang lebih sensitif

ringkaskan

Strategi keseluruhan strategi penutupan harga bulan dan pergerakan rata-rata adalah jelas dan mudah dilaksanakan, dengan penyesuaian parameter boleh digunakan untuk pelbagai saham, terutama untuk pelabur garis panjang dan menengah. Dengan peningkatan modul seperti parameter henti rugi dan pengoptimuman, strategi ini dijangka menghasilkan prestasi yang lebih baik.

Kod sumber strategi
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 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/
// © universique

//@version=4
strategy("Monthly MA Close ", shorttitle="MMAC", overlay=true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
//MAY 6 2020 18:00

// No repaint function 
// Function to securely and simply call `security()` so that it never repaints and never looks ahead.
f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)
//sec10 = f_secureSecurity(syminfo.tickerid, higherTf, data)

// ————— Converts current chart resolution into a float minutes value.
f_resInMinutes() => 
    _resInMinutes = timeframe.multiplier * (
      timeframe.isseconds ? 1. / 60             :
      timeframe.isminutes ? 1.                  :
      timeframe.isdaily   ? 60. * 24            :
      timeframe.isweekly  ? 60. * 24 * 7        :
      timeframe.ismonthly ? 60. * 24 * 30.4375  : na)
// ————— Returns the float minutes value of the string _res.
f_tfResInMinutes(_res) =>
    // _res: resolution of any TF (in "timeframe.period" string format).
    // Dependency: f_resInMinutes().
    security(syminfo.tickerid, _res, f_resInMinutes())

// —————————— Determine if current timeframe is smaller that higher timeframe selected in Inputs.
// Get higher timeframe in minutes.
//higherTfInMinutes = f_tfResInMinutes(higherTf)
// Get current timeframe in minutes.
currentTfInMinutes = f_resInMinutes()
// Compare current TF to higher TF to make sure it is smaller, otherwise our plots don't make sense.
//chartOnLowerTf = currentTfInMinutes < higherTfInMinutes

// Input
switch1=input(true, title="Show MA")
exponential = input(true, title="Exponential MA")
ticker = input(false, title="Other ticker MA")

tic_ma = input(title="Ticker MA", type=input.symbol, defval="BTC_USDT:swap")
res_ma = input(title="Time MA (W, D, [min])", type=input.string, defval="M")
len_ma = input(8, minval=1, title="Period MA")

ma_cus = exponential?f_secureSecurity(tic_ma, res_ma, ema(close,len_ma)) : f_secureSecurity(tic_ma, res_ma, sma(close,len_ma))
ma_long = exponential?f_secureSecurity(syminfo.tickerid, res_ma, ema(close,len_ma)) : f_secureSecurity(syminfo.tickerid, res_ma, sma(close,len_ma))

cl1 = f_secureSecurity(syminfo.tickerid, 'M', close)
cl2 = f_secureSecurity(tic_ma, 'M', close)

// Input Backtest Range
showDate  = input(defval = false, title = "Show Date Range", type = input.bool)
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 1995, title = "From Year",       type = input.integer, minval = 1850)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1850)

// Funcion Example
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

// Calculation
bullish_cross = ticker?cl2>ma_cus : cl1>ma_long
bearish_cross = ticker?cl2<ma_cus : cl1<ma_long

MAColor = bullish_cross ? color.green : bearish_cross ? color.red : color.orange

// Strategy
strategy.entry("long", strategy.long, when = window() and bullish_cross)
strategy.close("long", when = window() and bearish_cross)

// Output
plot(switch1?ma_long:na,color = MAColor,linewidth=4)

// Alerts
alertcondition(bullish_cross, title='Bullish', message='Bullish')
alertcondition(bearish_cross, title='Bearish', message='Bearish')