Strategi Dagangan Dwi Arah Purata Pergerakan Berganda


Tarikh penciptaan: 2024-01-15 14:50:32 Akhirnya diubah suai: 2024-01-15 14:50:32
Salin: 1 Bilangan klik: 607
1
fokus pada
1617
Pengikut

Strategi Dagangan Dwi Arah Purata Pergerakan Berganda

Gambaran keseluruhan

Strategi ini menilai arah trend dengan mengira perkalian purata bergerak, digabungkan dengan harga dan penampang PMax, menggunakan cara perdagangan dua hala jangka panjang, melakukan lebih banyak apabila trend meningkat, melakukan kosong apabila trend menurun, menilai risiko memegang kedudukan secara langsung untuk keluar dengan keuntungan.

Prinsip Strategi

Indikator utama strategi ini adalah penggandaan purata bergerak. Parameter indikator termasuk: Panjang kitaran ATR, kali ganda ATR, jenis dan panjang purata bergerak. Nilai ATR mewakili kadar turun naik dalam tempoh.

Penunjuk PMax mewakili harga berhenti atau berhenti. Penunjuk ini dikira dengan menggabungkan nilai ATR dan arah trend. Dalam pasaran bullish, PMax adalah bersamaan dengan penggandaan purata bergerak tolak perkalian nilai ATR dan perkalian perkalian, sebagai garis berhenti. Dalam pasaran bearish, PMax adalah bersamaan dengan penggandaan purata bergerak ditambah nilai ATR dan perkalian perkalian, sebagai garis berhenti.

Apabila harga dan penunjuk PMax berlaku di atas persimpangan, buatlah isyarat lebih banyak; apabila harga dan penunjuk PMax berlaku di bawah persimpangan, buatlah isyarat lebih sedikit. Strategi ini digunakan untuk masuk ke dalam permainan, buat lebih banyak dalam trend ke atas, dan kosong dalam trend ke bawah, dan secara dinamik menjejaki stop loss.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan kaedah perdagangan dua hala yang panjang, boleh berdagang di seluruh pasaran, inklusif.

  2. Penggunaan penggandaan penunjuk purata bergerak, isyarat perdagangan stabil dan boleh dipercayai.

  3. Mengendalikan risiko dengan berkesan dengan menggunakan Stop Loss dan PMax.

  4. Tempoh pengiraan dan parameter penggandaan boleh disesuaikan, dan banyak keserasian.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Penetapan parameter yang tidak betul boleh menyebabkan kerugian perdagangan whipsaw.

  2. Perdagangan kosong memerlukan perhatian terhadap risiko pengekangan leverage.

  3. Ia adalah satu risiko yang tidak dapat dielakkan yang boleh menyebabkan turun naik pasaran yang teruk.

Penyelesaian:

  1. Parameter pengoptimuman untuk mengurangkan kebarangkalian whipsaw

  2. Mengendalikan had leverage dengan betul, menyebarkan risiko kedudukan.

  3. Peningkatan ATR, memperluaskan jangkauan stop loss.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Uji kestabilan parameter pasaran dan kitaran yang berbeza.

  2. Menggunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter secara automatik.

  3. Mengambil keputusan mengenai struktur pasaran dengan menggunakan teknologi seperti pembelajaran mendalam.

  4. Mengintegrasikan lebih banyak sumber data untuk meningkatkan keputusan.

ringkaskan

Strategi ini secara keseluruhan berjalan dengan mantap dan mempunyai keterangkuman yang kuat. Menggunakan perdagangan dua arah jangka panjang dan stop loss dinamik, ia dapat mengawal risiko dengan berkesan. Dengan pengoptimuman parameter dan pengulangan model, diharapkan untuk mendapatkan kesesuaian dan keberkesanan perdagangan yang lebih baik. Secara keseluruhannya, strategi ini patut mendapat perhatian dan aplikasi jangka panjang.

Kod sumber strategi
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 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/
// © melihtuna
//developer: @KivancOzbilgic
//author: @KivancOzbilgic
//stretegy converter: @crypto_melih
//@version=4

strategy("Profit Maximizer Strategy Long-Short", shorttitle="PMax-Strategy", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD, commission_value=0, commission_type=strategy.commission.percent)

src = input(hl2, title="Source")
Periods = input(title="ATR Length", type=input.integer, defval=10)
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
mav = input(title="Moving Average Type", defval="EMA", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
length =input(10, "Moving Average Length", minval=1)
condition = input(title="Signal Type", defval="Only Crossing Signals", options=["Only Crossing Signals", "Only Price/Pmax Crossing Signals"])
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsupport = input(title="Show Moving Average?", type=input.bool, defval=true)
//showsignalsk = input(title="Show Crossing Signals?", type=input.bool, defval=true)
//showsignalsc = input(title="Show Price/Pmax Crossing Signals?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
long_short = input(defval = false, title = "Long-Short", type=input.bool)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
valpha=2/(length+1)
vud1=src>src[1] ? src-src[1] : 0
vdd1=src<src[1] ? src[1]-src : 0
vUD=sum(vud1,9)
vDD=sum(vdd1,9)
vCMO=nz((vUD-vDD)/(vUD+vDD))
VAR=0.0
VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
wwalpha = 1/ length
WWMA = 0.0
WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
zxEMAData = (src + (src - src[zxLag]))
ZLEMA = ema(zxEMAData, length)
lrc = linreg(src, length, 0)
lrc1 = linreg(src,length,1)
lrs = (lrc-lrc1)
TSF = linreg(src, length, 0)+lrs
getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma
    ma
    
MAvg=getMA(src, length)
longStop = MAvg - Multiplier*atr
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + Multiplier*atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
PMax = dir==1 ? longStop: shortStop
plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Moving Avg Line")
pALL=plot(PMax, color=color.red, linewidth=2, title="PMax", transp=0)
alertcondition(cross(MAvg, PMax), title="Cross Alert", message="PMax - Moving Avg Crossing!")
alertcondition(crossover(MAvg, PMax), title="Crossover Alarm", message="Moving Avg BUY SIGNAL!")
alertcondition(crossunder(MAvg, PMax), title="Crossunder Alarm", message="Moving Avg SELL SIGNAL!")
alertcondition(cross(src, PMax), title="Price Cross Alert", message="PMax - Price Crossing!")
alertcondition(crossover(src, PMax), title="Price Crossover Alarm", message="PRICE OVER PMax - BUY SIGNAL!")
alertcondition(crossunder(src, PMax), title="Price Crossunder Alarm", message="PRICE UNDER PMax - SELL SIGNAL!")
buySignalk = crossover(MAvg, PMax)
//plotshape(buySignalk and showsignalsk ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallk = crossunder(MAvg, PMax)
//plotshape(sellSignallk and showsignalsk ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
buySignalc = crossover(src, PMax)
//plotshape(buySignalc and showsignalsc ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
sellSignallc = crossunder(src, PMax)
//plotshape(sellSignallc and showsignalsc ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=#0F18BF, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (MAvg>PMax ? color.green : na) : na
shortFillColor = highlighting ? (MAvg<PMax ? color.red : na) : na
fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor)

if(condition=="Only Crossing Signals")
    strategy.entry("BUY", strategy.long, when = buySignalk)
else
    strategy.entry("BUY", strategy.long, when = buySignalc)

if(long_short)
    if(condition=="Only Crossing Signals")
        strategy.entry("SELL", strategy.short, when = sellSignallk)
    else
        strategy.entry("SELL", strategy.short, when = sellSignallc)
else
    if(condition=="Only Crossing Signals")
        strategy.close("BUY", when = sellSignallk)
    else
        strategy.close("BUY", when = sellSignallc)