Strategi Mengikuti Tren Penembusan Momentum


Tanggal Pembuatan: 2023-11-06 09:37:44 Akhirnya memodifikasi: 2023-11-06 09:56:20
menyalin: 0 Jumlah klik: 698
1
fokus pada
1617
Pengikut

Strategi Mengikuti Tren Penembusan Momentum

Ringkasan

Strategi ini menggabungkan beberapa indikator teknis untuk mengidentifikasi arah tren, untuk melacak ketika tren terjadi, dan untuk mengejar keuntungan tambahan.

Prinsip Strategi

  1. Menggunakan saluran Donchian untuk menilai arah tren secara keseluruhan. Ketika harga menembus saluran ini, konfirmasi adanya pergeseran tren.

  2. Hull Moving Average membantu menentukan arah tren. Indikator ini sensitif terhadap perubahan harga dan dapat mendeteksi perubahan tren lebih awal.

  3. Sistem semi-orbit mengirimkan sinyal beli dan jual. Sistem ini didasarkan pada saluran harga dan rentang rata-rata fluktuasi yang sebenarnya, untuk menghindari false breakout.

  4. Ketika saluran Donchian, indikator Hull, dan sistem semi-orbit mengirimkan sinyal secara bersamaan, maka terjadi tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren tren

  5. Kondisi Posisi Padat: Ketika indikator di atas mengirimkan sinyal kebalikan, tentukan bahwa tren telah berbalik, dan segera menghentikan kerugian.

Analisis Keunggulan

  • Kombinasi multi-indikator, penilaian yang lebih baik. Saluran Donchian menilai dasar-dasar, indikator Hull dan semi-orbit menentukan detail, menangkap tren tepat di titik balik.

  • Bergerak untuk melakukan breakout, mencari keuntungan tambahan. Bermain hanya ketika tren terjadi breakout kuat, menghindari terjebak dalam getaran.

  • Stop loss yang ketat, menjamin keamanan dana. Setelah indikator mengirimkan sinyal kebalikan, stop loss segera, untuk menghindari kerugian berkembang.

  • Parameter yang disesuaikan dengan berbagai jenis pasar. Parameter seperti panjang saluran, interval fluktuasi dapat disesuaikan, dan dioptimalkan untuk siklus yang berbeda.

  • Mudah dimengerti dan diimplementasikan, bahkan bagi pemula. Kombinasi indikator dan kondisi sederhana dan mudah diprogram untuk diimplementasikan.

Analisis risiko

  • Kehilangan peluang di awal tren. Terlambat masuk, kenaikan awal tidak dapat ditangkap.

  • Penembusan yang gagal mengembalikan kerugian. Setelah masuk, mungkin terjadi penembusan yang gagal dan berbalik, menyebabkan kerugian.

  • Indikator mengirimkan sinyal yang salah. Karena parameter yang tidak tepat, penilaian indikator dapat terjadi kesalahan.

  • Terbatas jumlah transaksi. Hanya masuk saat ada terobosan tren yang jelas, dan terbatas jumlah transaksi tahunan.

Arah optimasi

  • Mengoptimalkan kombinasi parameter. Mengetes berbagai parameter untuk menemukan kombinasi terbaik.

  • Menambahkan kondisi mundur linear stop loss. Menghindari stop loss terlalu dini dan kehilangan peluang tren.

  • Menambahkan filter indikator lain. Seperti MACD, KDJ dan penilaian tambahan, mengurangi sinyal yang salah.

  • Optimalkan jangka waktu transaksi. Parameter untuk jangka waktu yang berbeda dapat dioptimalkan.

  • Meningkatkan efisiensi penggunaan dana. Meningkatkan efisiensi penggunaan dana melalui leverage, investasi tetap, dll.

Meringkaskan

Strategi ini mengintegrasikan berbagai indikator untuk menilai kapan tren terjadi momentum terobosan, dengan melacak tren yang telah terbentuk untuk mencapai keuntungan tambahan. Sistem pengendalian risiko yang ketat, pengaturan parameter yang fleksibel untuk menyesuaikan dengan lingkungan pasar yang berbeda. Meskipun frekuensi perdagangan rendah, tetapi setiap perdagangan berusaha untuk mendapatkan keuntungan yang tinggi.

Kode Sumber Strategi
/*backtest
start: 2023-10-29 00:00:00
end: 2023-11-05 00:00:00
period: 1m
basePeriod: 1m
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/
// © kgynofomo

// @version=5
strategy(title="[Salavi] | Andy Super Pro Strategy",overlay = true)

//Doinchian Trend Ribbon
dlen = input.int(defval=30, minval=10)

dchannel(len) =>
    float hh = ta.highest(len)
    float ll = ta.lowest(len)

    int trend = 0
    trend := close > hh[1] ? 1 : close < ll[1] ? -1 : nz(trend[1])
    trend

dchannelalt(len, maintrend) =>
    float hh = ta.highest(len)
    float ll = ta.lowest(len)

    int trend = 0
    trend := close > hh[1] ? 1 : close < ll[1] ? -1 : nz(trend[1])
    maintrend == 1 ? trend == 1 ? #00FF00ff : #00FF009f : maintrend == -1 ? trend == -1 ? #FF0000ff : #FF00009f : na

maintrend = dchannel(dlen)
donchian_bull = maintrend==1
donchian_bear = maintrend==-1


//Hulls
src = input(hlc3, title='Source')
modeSwitch = input.string('Hma', title='Hull Variation', options=['Hma', 'Thma', 'Ehma'])
length = input(55, title='Length')
lengthMult = input(1.0, title='Length multiplier ')

useHtf = false
htf = '240'

switchColor = true
candleCol = false
visualSwitch = true
thicknesSwitch = 1
transpSwitch = 40

//FUNCTIONS
//HMA
HMA(_src, _length) =>
    ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>
    ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length)))
//THMA    
THMA(_src, _length) =>
    ta.wma(ta.wma(_src, _length / 3) * 3 - ta.wma(_src, _length / 2) - ta.wma(_src, _length), _length)

//SWITCH
Mode(modeSwitch, src, len) =>
    modeSwitch == 'Hma' ? HMA(src, len) : modeSwitch == 'Ehma' ? EHMA(src, len) : modeSwitch == 'Thma' ? THMA(src, len / 2) : na

//OUT
_hull = Mode(modeSwitch, src, int(length * lengthMult))
HULL = useHtf ? request.security(syminfo.ticker, htf, _hull) : _hull
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = switchColor ? HULL > HULL[2] ? #00ff00 : #ff0000 : #ff9800
hull_bull = HULL > HULL[2]
bull_start = hull_bull and hull_bull[1]==false
hull_bear = HULL < HULL[2]
bear_start = hull_bear and hull_bear[1]==false

barcolor(color=candleCol ? switchColor ? hullColor : na : na)

//halftrend
amplitude = input(title='Amplitude', defval=2)
channelDeviation = input(title='Channel Deviation', defval=2)
// showArrows = input(title='Show Arrows', defval=true)
// showChannels = input(title='Show Channels', defval=true)

var int trend = 0
var int nextTrend = 0
var float maxLowPrice = nz(low[1], low)
var float minHighPrice = nz(high[1], high)

var float up = 0.0
var float down = 0.0
float atrHigh = 0.0
float atrLow = 0.0
float arrowUp = na
float arrowDown = na

atr2 = ta.atr(100) / 2
dev = channelDeviation * atr2

highPrice = high[math.abs(ta.highestbars(amplitude))]
lowPrice = low[math.abs(ta.lowestbars(amplitude))]
highma = ta.sma(high, amplitude)
lowma = ta.sma(low, amplitude)

if nextTrend == 1
    maxLowPrice := math.max(lowPrice, maxLowPrice)

    if highma < maxLowPrice and close < nz(low[1], low)
        trend := 1
        nextTrend := 0
        minHighPrice := highPrice
        minHighPrice
else
    minHighPrice := math.min(highPrice, minHighPrice)

    if lowma > minHighPrice and close > nz(high[1], high)
        trend := 0
        nextTrend := 1
        maxLowPrice := lowPrice
        maxLowPrice

if trend == 0
    if not na(trend[1]) and trend[1] != 0
        up := na(down[1]) ? down : down[1]
        arrowUp := up - atr2
        arrowUp
    else
        up := na(up[1]) ? maxLowPrice : math.max(maxLowPrice, up[1])
        up
    atrHigh := up + dev
    atrLow := up - dev
    atrLow
else
    if not na(trend[1]) and trend[1] != 1
        down := na(up[1]) ? up : up[1]
        arrowDown := down + atr2
        arrowDown
    else
        down := na(down[1]) ? minHighPrice : math.min(minHighPrice, down[1])
        down
    atrHigh := down + dev
    atrLow := down - dev
    atrLow

ht = trend == 0 ? up : down

var color buyColor = color.blue
var color sellColor = color.red

htColor = trend == 0 ? buyColor : sellColor
// htPlot = plot(ht, title='HalfTrend', linewidth=2, color=htColor)

// atrHighPlot = plot(showChannels ? atrHigh : na, title='ATR High', style=plot.style_circles, color=color.new(sellColor, 0))
// atrLowPlot = plot(showChannels ? atrLow : na, title='ATR Low', style=plot.style_circles, color=color.new(buyColor, 0))

// fill(htPlot, atrHighPlot, title='ATR High Ribbon', color=color.new(sellColor, 90))
// fill(htPlot, atrLowPlot, title='ATR Low Ribbon', color=color.new(buyColor, 90))

HalfTrend_buySignal = not na(arrowUp) and trend == 0 and trend[1] == 1
HalfTrend_sellSignal = not na(arrowDown) and trend == 1 and trend[1] == 0

// plotshape(showArrows and buySignal ? atrLow : na, title='Arrow Up', style=shape.triangleup, location=location.absolute, size=size.tiny, color=color.new(buyColor, 0))
// plotshape(showArrows and sellSignal ? atrHigh : na, title='Arrow Down', style=shape.triangledown, location=location.absolute, size=size.tiny, color=color.new(sellColor, 0))




//ema
filter_ema = ta.ema(close,200)
ema_bull = close>filter_ema
ema_bear = close<filter_ema

atr_length = input.int(7)
atr = ta.atr(atr_length)
atr_rsi_length = input.int(50)
atr_rsi = ta.rsi(atr,atr_rsi_length)
atr_valid = atr_rsi>50

longCondition = bull_start and atr_valid
shortCondition = bear_start and atr_valid

Exit_long_condition = shortCondition
Exit_short_condition = longCondition

if longCondition
    strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here")

if Exit_long_condition
    strategy.close("Andy Buy",comment="Andy Buy Out")
    // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here")
    // strategy.close("Andy fandan Buy",comment="Andy short Out")


if shortCondition
    strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here")


// strategy.exit("STR","Long",stop=longstoploss)
if Exit_short_condition
    strategy.close("Andy Short",comment="Andy short Out")
    // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here")
    // strategy.close("Andy fandan Short",comment="Andy Buy Out")




inLongTrade = strategy.position_size > 0
inLongTradecolor = #58D68D
notInTrade = strategy.position_size == 0
inShortTrade = strategy.position_size < 0

// bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)
plotshape(close!=0,location = location.bottom,color = inLongTrade?color.green:inShortTrade?color.red:na)


plotshape(longCondition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(shortCondition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)

Fi1 = plot(MHULL, title='MHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(SHULL, title='SHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)

fill(Fi1, Fi2, title='Band Filler', color=hullColor, transp=transpSwitch)