Strategi kenaikan berterusan salib emas klik dua klik purata bergerak


Tarikh penciptaan: 2023-11-13 10:47:48 Akhirnya diubah suai: 2023-11-13 10:47:48
Salin: 0 Bilangan klik: 649
1
fokus pada
1617
Pengikut

Strategi kenaikan berterusan salib emas klik dua klik purata bergerak

Gambaran keseluruhan

Ini adalah strategi perdagangan yang menggunakan bentuk garpu emas rata-rata bergerak, dengan garisan trend yang terus meningkat. Apabila garpu cepat menembusi garpu perlahan dari arah bawah, ia membentuk isyarat garpu emas. Jika trend selepas garpu emas terus meningkat, anda boleh membuat lebih banyak kedudukan pada tahap ini. Apabila harga naik ke garpu henti atau garpu henti, anda boleh memilih untuk berhenti atau berhenti.

Prinsip Strategi

Strategi ini berdasarkan pada bentuk garpu emas rata-rata bergerak untuk menentukan masa masuk. Khususnya, untuk menentukan rata-rata bergerak cepat MA1 dan rata-rata bergerak perlahan MA2. Apabila MA1 menembusi MA2 dari arah bawah, ia adalah isyarat untuk melakukan lebih banyak.

Untuk mengelakkan isyarat palsu yang disebabkan oleh garpu emas jangka pendek, strategi ini memasukkan penilaian sudut terhad, iaitu isyarat beli hanya akan dicetuskan apabila sudut MA2 lebih besar daripada nilai terhad yang ditetapkan. Ini dapat menyaring beberapa kenaikan jangka pendek yang tidak bergaya.

Strategi ini menetapkan garis berhenti dan garis berhenti pada masa yang sama. Garis berhenti digunakan untuk mengelakkan kerugian yang disebabkan oleh perubahan mendadak pasaran, dan garis berhenti digunakan untuk mengunci kemenangan. Secara khusus ditetapkan sebagai julat peratusan harga masuk.

Apabila kenaikan harga mencapai titik tolak, strategi akan memilih untuk berhenti dan berhenti. Pada masa yang sama, jika kenaikan harga lebih kuat pada putaran ini, strategi akan melakukan operasi pembalikan kosong lagi.

Analisis kelebihan

Ini adalah strategi trend tracking yang mudah dan intuitif. Ia mempunyai beberapa kelebihan:

  1. Menggunakan gabungan purata bergerak untuk menyaring bunyi pasaran dan mengunci arah trend
  2. Angka terhad untuk mengelakkan goyah jangka pendek
  3. Operasi Dua Arah Untuk Mendapatkan Keuntungan Dalam Keadaan Bergolak
  4. Tetapkan Stop Loss dan Kawal Risiko

Analisis risiko

Strategi ini juga mempunyai risiko yang perlu diperhatikan:

  1. Rata-rata bergerak terlewat dan mungkin terlepas titik perubahan harga
  2. Walaupun terdapat stop loss, dalam pasaran yang berubah-ubah dengan cepat, kemungkinan untuk menembusi stop loss masih wujud
  3. Risiko perdagangan dua hala meningkat, pilihan yang salah boleh menyebabkan kerugian
  4. Penetapan parameter yang tidak betul, seperti pilihan kitaran purata bergerak, boleh menjejaskan prestasi strategi

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Menambah petunjuk trend seperti MACD, Blink, dan lain-lain untuk meningkatkan ketepatan kedudukan
  2. Parameter kitaran untuk mengoptimumkan purata bergerak secara dinamik menggunakan kaedah seperti pembelajaran mesin
  3. Optimumkan tetapan penghentian kerugian, seperti penggunaan penghentian kehilangan dan sebagainya
  4. Meningkatkan kawalan jumlah transaksi untuk mengelakkan kerugian yang berlebihan
  5. Indikator-indikator yang digunakan untuk menilai kekuatan trend dalam pusingan ini, penyesuaian dinamik untuk membalikkan kekuatan kedudukan

ringkaskan

Secara keseluruhannya, ini adalah strategi pengesanan trend yang mudah dan praktikal. Ia mempunyai kelebihan tertentu, tetapi juga memerlukan perhatian terhadap risiko. Dengan pengoptimuman parameter lanjut, pilihan penunjuk, penyetempatan stop loss, dan lain-lain, anda boleh memperoleh keuntungan yang lebih stabil.

Kod 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")