Strategi kenaikan berkelanjutan salib emas klik ganda rata-rata bergerak


Tanggal Pembuatan: 2023-11-13 10:47:48 Akhirnya memodifikasi: 2023-11-13 10:47:48
menyalin: 0 Jumlah klik: 649
1
fokus pada
1617
Pengikut

Strategi kenaikan berkelanjutan salib emas klik ganda rata-rata bergerak

Ringkasan

Ini adalah strategi perdagangan yang memanfaatkan bentuk garpu mata uang rata-rata bergerak, yang bekerja dengan garis tren yang terus meningkat. Ketika garis cepat dari arah bawah menerobos garis lambat, sinyal garpu mata uang terbentuk. Jika tren setelah garpu mata uang terus meningkat, maka Anda dapat melakukan lebih banyak posisi pada tahap ini.

Prinsip Strategi

Strategi ini terutama didasarkan pada bentuk garpu emas dari moving average untuk menilai waktu masuk. Secara khusus, didefinisikan sebuah moving average MA1 yang cepat dan MA2 yang lambat. Ketika MA1 menembus MA2 dari arah bawah, itu adalah sinyal untuk melakukan lebih banyak.

Untuk menghindari sinyal palsu yang disebabkan oleh short-term gold forks, strategi ini ditambahkan penilaian sudut deflection, yaitu hanya ketika sudut MA2 lebih besar dari nilai deflection yang ditetapkan yang akan memicu sinyal beli. Ini dapat menyaring beberapa kenaikan jangka pendek yang tidak tren.

Strategi ini menetapkan stop loss dan stop loss secara bersamaan. Stop loss digunakan untuk menghindari kerugian yang disebabkan oleh pasar yang tiba-tiba berbalik, dan stop loss digunakan untuk mengunci keuntungan.

Ketika kenaikan harga mencapai titik tolak, strategi akan memilih untuk berhenti dan pergi. Sementara itu, jika kenaikan harga lebih kuat, strategi akan melakukan reverse shorting lagi.

Analisis Keunggulan

Ini adalah strategi pelacakan tren yang relatif sederhana dan intuitif. Ini memiliki beberapa keuntungan:

  1. Menggunakan kombinasi moving average untuk menyaring kebisingan pasar dan mengunci arah tren
  2. Angular thresholds dapat menghindari kebocoran jangka pendek
  3. Operasi Dua Arah Dapat Menguntungkan Dalam Keadaan Guncangan
  4. Mengatur Stop Loss, Mengontrol Risiko

Analisis risiko

Strategi ini juga memiliki beberapa risiko yang perlu diperhatikan:

  1. Rata-rata bergerak tertinggal dan mungkin melewatkan titik balik harga
  2. Meskipun ada stop loss, dalam pasar yang berubah dengan cepat, probabilitas stop loss akan diatasi masih ada.
  3. Perdagangan bilateral menjadi lebih berisiko, karena pilihan yang salah dapat menyebabkan kerugian.
  4. Penetapan parameter yang tidak tepat, seperti pilihan siklus rata-rata bergerak, dapat mempengaruhi kinerja strategi

Arah optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam beberapa hal:

  1. Menambahkan indikator penilaian tren seperti MACD, Brinks, dan lain-lain untuk meningkatkan akurasi posisi
  2. Parameter periodik untuk mengoptimalkan rata-rata bergerak secara dinamis dengan metode seperti pembelajaran mesin
  3. Mengoptimalkan pengaturan stop loss, seperti dengan menggunakan stop loss tracker
  4. Meningkatkan kontrol volume transaksi untuk menghindari kerugian yang berlebihan
  5. Indikator-indikator yang digunakan untuk menilai kekuatan tren dalam putaran ini, dinamika penyesuaian terhadap kekuatan posisi terbuka

Meringkaskan

Secara keseluruhan, ini adalah strategi pelacakan tren yang sederhana dan praktis. Ini memiliki beberapa keunggulan, tetapi juga perlu memperhatikan risiko. Dengan pengoptimalan parameter lebih lanjut, pilihan indikator, pengaturan stop loss, dan lain-lain, perbaikan dapat menghasilkan keuntungan yang lebih stabil.

Kode Sumber Strategi
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//written by [email protected]
//@version=5
strategy(title="MJ-Dual Moving Average",initial_capital=10000,overlay=false)

// import TradingView/ZigZag/6 as ZigZagLib 

// // Create Zig Zag instance from user settings.
// var zigZag = ZigZagLib.newInstance(
//   ZigZagLib.Settings.new(
//       input.float(5.0, "Price deviation for reversals (%)", 0.00001, 100.0, 0.5, "0.00001 - 100"),
//       input.int(10, "Pivot legs", 2),
//       input(#2962FF, "Line color"),
//       input(true, "Extend to last bar"),
//       input(true, "Display reversal price"),
//       input(true, "Display cumulative volume"),
//       input(true, "Display reversal price change", inline = "priceRev"),
//       input.string("Absolute", "", ["Absolute", "Percent"], inline = "priceRev"),
//       true)
//  )

// // Update 'zigZag' object on each bar with new ​pivots, ​volume, lines, labels.
// zigZag.update()
// // plot(zigZag.pivots, "zigZag")

ma1= ta.sma(close,8)
ma2= ta.sma(close,21)

angleCriteria = input.int(title="Angle", defval=7, minval=1, maxval=13)

i_lookback   = input.int(2,     "Angle Period", minval = 1)
i_atrPeriod  = input.int(10,    "ATR Period",   minval = 1)
i_angleLevel = input.int(6,     "Angle Level",  minval = 1)
i_maSource   = input.source(close, "MA Source")
TP = input.float(1, "TP", minval = 0.1)
SL = input.float(1, "SL", minval = 0.1)

f_angle(_src, _lookback, _atrPeriod) =>
    rad2degree = 180 / 3.141592653589793238462643  //pi 
    ang = rad2degree * math.atan((_src[0] - _src[_lookback]) / ta.atr(_atrPeriod)/_lookback)
    ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)
plot(ta.atr(i_atrPeriod), "atr")
// plot(ma1,color=#FF0000)
// plot(ma2,color=#00FF00)

crosso=ta.crossover(ma1,ma2) 
crossu=ta.crossunder(ma1,ma2)

_lookback = 15

f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed
    
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)

atr_factor = 1
atr = ta.atr(i_atrPeriod)
e = atr * atr_factor 

afr = close 
afr := nz(afr[1], afr)

atr_factoryHigh = close + e
atr_factoryLow = close - e 

if atr_factoryLow > afr 
    afr := atr_factoryLow
if atr_factoryHigh < afr 
    afr := atr_factoryHigh

// plot(afr, "afr", display = display.data_window)
// plot(atr_factoryHigh, "afr", color = color.yellow, display = display.all)
// plot(atr_factoryLow, "afr", color = color.green, display = display.all)


inLong() => strategy.position_size > 0
inShort() => strategy.position_size < 0
inZero() => not inLong() and not inShort()

long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)

plotshape(long, "Buy", shape.arrowup, location.belowbar, color = #FF0000)
plotshape(short, "Sell", shape.arrowdown, location.abovebar, color = #00FF00)

var longTp = 0.0
var longSl = 0.0
var shortTp = 0.0
var shortSl = 0.0
[b_middle, b_high, b_low] = ta.bb(close, 20, 2)
entry_price = strategy.opentrades.entry_price(0)

if inZero()
    if short
        longTp := close * (1 + TP/100)
        longSl := close * (1 - SL/100)
        strategy.entry("LONG",strategy.long, comment = "tp:" + str.tostring(longTp) + " sl:" + str.tostring(longSl))
    if long
        shortTp := close * (1 - TP/100)
        shortSl := close * (1 + SL/100)
        strategy.entry("SHORT",strategy.short, comment = "tp:" + str.tostring(shortTp) + " sl:" + str.tostring(shortSl))

if inLong()
    // if close - entry_price > close * 0.005
    //     longSl := entry_price + close * 0.001
    if high > longTp
        strategy.close("LONG")
        if (close - open) > close * 0.014
            shortTp := close * (1 - TP/100)
            shortSl := close * (1 + SL/100)
            strategy.entry("SHORT",strategy.short, comment = "tp:" + str.tostring(shortTp) + " sl:" + str.tostring(shortSl))

    if close < longSl
        strategy.close("LONG")
    if open >= b_high and close >= b_high
        strategy.close("LONG")
    // if high > b_high and entry_price < high
    //     strategy.close("LONG")


if inShort()
    // if entry_price - close > close * 0.005
    //     shortSl := entry_price - close * 0.001
    if low < shortTp
        strategy.close("SHORT")
        if (open - close) > close * 0.014
            longTp := close * (1 + TP/100)
            longSl := close * (1 - SL/100)
            strategy.entry("LONG",strategy.long, comment = "tp:" + str.tostring(longTp) + " sl:" + str.tostring(longSl))


    if close > shortSl
        strategy.close("SHORT")
    if open < b_low and close < b_low
        strategy.close("SHORT")
    // if low < b_low and entry_price > low
    //     strategy.close("SHORT")