
Strategi ini adalah strategi grid posisi variabel yang mengikuti tren, terutama menggunakan EMA, RSI, dan bentuk penyerapan untuk menilai arah tren dan waktu masuk. Strategi ini menyesuaikan posisi stop loss dan stop loss sesuai dengan ukuran entitas yang menyerap bentuknya, sambil memungkinkan pengguna memilih hanya melakukan lebih banyak, hanya melakukan lebih banyak atau lebih banyak. Selain itu, strategi ini juga menyediakan MACD sebagai pilihan untuk kondisi penyaringan tren.
Strategi ini menggunakan garis EMA 200 siklus untuk menentukan arah tren besar, ketika harga di atas EMA dianggap sedang dalam tren naik, dan di bawah EMA dianggap sedang dalam tren turun. 9 siklus RSI digunakan untuk menentukan momentum, RSI lebih besar dari 50 dianggap lebih kuat dan lebih kecil dari 50 dianggap lebih kuat.
Stop loss dan stop loss posisi strategi ditentukan berdasarkan ukuran entitas yang menelan bentuk. Stop loss posisi dua kali lipat dari entitas yang menelan bentuk, dan set minimal stop loss sebesar 0,3% dari harga masuk, untuk menghindari stop loss jarak terlalu kecil menyebabkan sering stop loss. Stop loss posisi adalah stop loss amplitudo kalikan dengan predetermined stop loss rasio, untuk memastikan stop loss rasio tetap.
Trend Following: Strategi yang menggunakan beberapa indikator untuk menilai tren bersama, membantu untuk melakukan intervensi pada awal tren terbentuk, menangkap tren.
Stop loss yang dinamis: Sesuai dengan ukuran entitas yang tertelan bentuknya untuk menyesuaikan posisi stop loss, memperluas ruang stop loss saat tren kuat, mengurangi ruang stop loss saat tren lemah, kontrol posisi yang fleksibel.
Pengguna dapat menyesuaikan arah perdagangan, preferensi risiko dan parameter lainnya untuk memenuhi kebutuhan pengguna yang berbeda.
Memberikan MACD sebagai pilihan untuk kondisi penyaringan tren, untuk lebih mengkonfirmasi kekuatan tren dan meningkatkan peluang masuk.
Kesalahan penilaian tren: Meskipun strategi menggunakan penilaian gabungan dari beberapa indikator, dalam beberapa kasus kesalahan penilaian tren masih dapat terjadi, yang menyebabkan kerugian.
Penyempitan: Jika entitas morphologi yang tertelan lebih kecil, stop-loss dan stop-stop distance akan sangat dekat, menyebabkan rasio keuntungan-keuntungan yang lebih buruk, yang lebih umum terjadi dalam situasi gempa.
Optimasi parameter: Parameter optimal dapat bervariasi dalam berbagai standar dan siklus, sehingga pengguna harus terus melakukan debug dan optimasi.
Pengertian tren: Anda dapat mencoba untuk memperkenalkan lebih banyak alat pengakuan tren seperti Brinband, Indeks arah rata-rata (ADX) dan lain-lain, untuk meningkatkan akurasi pengertian tren.
Optimalisasi Stop Loss: Pertimbangkan untuk memperkenalkan indikator yang terkait dengan volatilitas seperti ATR, menyesuaikan jarak Stop Loss secara dinamis, mengurangi risiko yang ditimbulkan oleh margin yang terlalu kecil.
Manajemen Posisi: Mengubah ukuran posisi secara dinamis sesuai dengan kekuatan dan kelemahan tren, keuntungan akun, dan lain-lain. Meningkatkan posisi ketika tren kuat dan stabil, mengurangi biaya yang ditimbulkan oleh perdagangan yang sering.
Kerjasama multi-siklus dan multi-varietas: Melakukan verifikasi sinyal tren lintas-siklus dan lintas-varietas, meningkatkan peluang untuk menangkap tren, sekaligus mendistribusikan risiko pada satu specimen atau siklus.
Strategi ini mengikuti strategi grid posisi posisi variabel yang berkinerja baik dalam situasi tren, dengan beberapa indikator untuk menilai arah dan kekuatan tren bersama, secara dinamis menyesuaikan stop loss dan posisi, dapat lebih baik menangkap tren, mendapatkan keuntungan tambahan. Tetapi dalam situasi tren yang tidak jelas atau sering berfluktuasi, strategi ini berkinerja baik. Oleh karena itu, dalam menggunakan strategi ini, perlu memperhatikan pemilihan varietas tren, dan menyesuaikan parameter sesuai dengan perubahan situasi. Selain itu, ada ruang untuk pengoptimalan lebih lanjut dalam penilaian tren, stop loss, manajemen posisi, dan sinkronisasi varietas multi-siklus.
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © niosupetranmartinez
//@version=5
strategy("Trend Follower Scalping Strategy", overlay=true, process_orders_on_close = true)
// Inputs
emaLen = input(200, 'EMA Length')
rsiLen = input(9, 'RSI Length')
trendDirection = input.string("Both", 'Trend Direction', options=["Long Only", "Short Only", "Both"])
risk_reward_ratio = input(2, 'Risk Reward Ratio')
useMacdFilter = input.bool(true, "Use MACD Filter")
macdTimeframe = input("5", "MACD Timeframe")
// EMA and RSI
ema200 = ta.ema(close, emaLen)
customRsi = ta.rsi(close, rsiLen)
// MACD Filter
[macdLine, signalLine, _] = request.security(syminfo.tickerid, macdTimeframe, ta.macd(close, 12, 26, 9))
// Majority Body Candle Identification Function
isMajorityBodyCandle(candleOpen, candleClose, high, low) =>
bodySize = math.abs(candleClose - candleOpen)
fullSize = high - low
bodySize / fullSize > 0.6
// Engulfing Patterns
isBullishEngulfing = close > open and close[1] < open[1] and (close - open) > (open[1] - close[1]) and isMajorityBodyCandle(open, close, high, low)
isBearishEngulfing = close < open and close[1] > open[1] and (open - close) > (close[1] - open[1]) and isMajorityBodyCandle(open, close, high, low)
// Entry Conditions with MACD Filter
longCondition = close > ema200 and customRsi > 50 and isBullishEngulfing and (not useMacdFilter or macdLine > signalLine)
shortCondition = close < ema200 and customRsi < 50 and isBearishEngulfing and (not useMacdFilter or macdLine < signalLine)
// Trade Execution
var float stopLossPrice = na
var float entryPrice = na
// Long Entry
if (longCondition and (trendDirection == "Long Only" or trendDirection == "Both"))
entryPrice := close
engulfingBodySize = math.abs(close - open)
minimumStopLoss = entryPrice * 0.997
calculatedStopLoss = entryPrice - (engulfingBodySize * 2)
stopLossPrice := calculatedStopLoss < minimumStopLoss ? calculatedStopLoss : minimumStopLoss
risk = entryPrice - stopLossPrice
takeProfitPrice = entryPrice + (risk_reward_ratio * risk)
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice)
// Short Entry
if (shortCondition and (trendDirection == "Short Only" or trendDirection == "Both"))
entryPrice := close
engulfingBodySize = math.abs(open - close)
minimumStopLoss = entryPrice * 1.003
calculatedStopLoss = entryPrice + (engulfingBodySize * 2)
stopLossPrice := calculatedStopLoss > minimumStopLoss ? calculatedStopLoss : minimumStopLoss
risk = stopLossPrice - entryPrice
takeProfitPrice = entryPrice - (risk_reward_ratio * risk)
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice)
// Plotting
plot(ema200, color=color.blue, linewidth=2, title="EMA 200")