
Strategi ini menilai arah tren dengan menghitung perkalian rata-rata bergerak, digabungkan dengan harga dan indikator PMax untuk menentukan arah tren, menggunakan metode perdagangan dua arah jangka panjang, melakukan lebih banyak ketika tren naik, melakukan lebih banyak ketika tren turun, dan menilai risiko memegang posisi secara real-time untuk keluar dengan keuntungan.
Indikator inti dari strategi ini adalah perkalian rata-rata bergerak. Parameter indikator meliputi: panjang siklus ATR, perkalian ATR, jenis dan panjang rata-rata bergerak. Nilai ATR mewakili tingkat fluktuasi selama periode. Perkalian rata-rata bergerak sama dengan perkalian rata-rata harga plus / minus perkalian ATR dengan ATR.
Indikator PMax mewakili harga stop loss atau stop loss. Indikator ini dihitung dengan menggabungkan nilai ATR dan arah tren. Dalam pasar bullish, PMax sama dengan perkalian rata-rata bergerak dikurangi perkalian nilai ATR dan perkalian, sebagai garis stop loss. Dalam pasar bearish, PMax sama dengan perkalian rata-rata bergerak ditambah perkalian nilai ATR dan perkalian, sebagai garis stop loss.
Ketika harga dan indikator PMax terjadi upward crossover, maka sinyal ini akan di-multiple. Ketika harga dan indikator PMax terjadi downward crossover, maka sinyal ini akan di-multiple. Strategi ini akan digunakan untuk masuk ke dalam permainan, melakukan over di uptrend, dan melakukan downtrend di downtrend, dan secara dinamis melacak stop loss.
Strategi ini memiliki keuntungan sebagai berikut:
Menggunakan metode perdagangan dua arah yang panjang, dapat diperdagangkan di seluruh pasar, inklusif.
Aplikasi penggandaan indikator moving average, sinyal perdagangan stabil dan dapat diandalkan.
Stop Loss, dikombinasikan dengan indikator PMax, secara efektif mengendalikan risiko.
Periode perhitungan dan parameter perkalian dapat disesuaikan, dan memiliki banyak kemampuan.
Strategi ini juga memiliki beberapa risiko:
Pengaturan parameter yang tidak tepat dapat menyebabkan kerugian dalam perdagangan whipsaw.
Perdagangan overhead perlu memperhatikan risiko keterbatasan leverage.
Tidak ada yang bisa dihindari dari kemungkinan terjadinya insiden tak terduga yang menyebabkan pasar bergejolak.
Solusi yang sesuai:
Optimalkan parameter untuk mengurangi kemungkinan munculnya whipsaw.
Mengontrol batas leverage dengan tepat, untuk menyebarkan risiko posisi.
Meningkatkan ATR dan memperluas area stop loss.
Strategi ini dapat dioptimalkan dengan:
Uji stabilitas dari berbagai parameter pasar dan siklus.
Menggunakan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara otomatis.
Menggunakan teknologi seperti Deep Learning untuk menilai struktur pasar.
Integrasi lebih banyak sumber data untuk meningkatkan efektivitas keputusan.
Strategi ini secara keseluruhan berjalan stabil dan memiliki inklusifitas yang kuat. Menggunakan perdagangan dua arah jangka panjang dan stop loss dinamis, dapat mengontrol risiko secara efektif. Dengan optimasi parameter dan iterasi model, diharapkan untuk mendapatkan kecocokan dan efektivitas perdagangan yang lebih baik. Secara keseluruhan, strategi ini layak untuk perhatian dan aplikasi jangka panjang.
/*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)