
Strategi ini menggunakan strategi mengikuti trend klasik yang membentuk garpu emas lebih banyak, garpu mati lebih sedikit, dan menggunakan penapis tambahan dengan indikator ATR dan ADX untuk mengesan semasa trend kuat dan mengawal risiko semasa goyah.
Strategi ini berdasarkan kepada beberapa perkara:
Garis purata EMA 8 kitaran yang lebih pendek dan garis purata EMA 20 kitaran yang lebih lama digunakan untuk membentuk isyarat garpu emas dan garpu mati. Garis purata EMA sendiri mempunyai sifat mengikuti trend.
Indikator ATR mencerminkan keluasan turun naik baru-baru ini. Dengan normalizasi indikator ATR, anda boleh menyesuaikan secara dinamik keadaan penapisan EMA merentasi garis rata, menurunkan keperluan semasa trend yang kuat diikuti, meningkatkan keperluan penapisan semasa keadaan gegaran, mengawal risiko.
Indeks ADX menilai kekuatan trend. Apabila nilai ADX lebih besar daripada 30, ia dianggap sebagai trend yang kuat, dan pada masa itu ia menghentikan pertahanan kerugian.
Dalam pasaran lembu, garpu emas lebih banyak, dalam pasaran beruang, garpu mati lebih banyak.
Penapisan jumlah transaksi, masuk apabila jumlah transaksi meningkat.
Indeks USD hanya menilai USD yang kuat dan lemah, dan stop loss dan stop loss meningkat apabila USD kuat.
Gabungan dengan petunjuk trend super untuk menilai pergerakan pasaran secara keseluruhan, membantu menilai masa untuk melakukan lebih banyak pengurangan.
Strategi ini menggabungkan indikator trend dengan indikator guncangan, membolehkan anda menyesuaikan parameter secara dinamik dan mengawal risiko sambil mengikuti trend.
EMA mempunyai kehalusan untuk menyaring penembusan palsu secara berkesan.
Indeks ATR secara dinamik menyesuaikan keadaan penapisan silang EMA linear, membolehkan strategi menyesuaikan diri dengan keadaan pasaran yang berbeza.
Indeks ADX dan jumlah dagangan sebagai penunjuk penilaian tambahan, untuk mengelakkan daripada terjebak dalam keadaan gegaran.
Mengambil Indeks Dolar dan Indeks Super Trend untuk menilai trend besar dan meningkatkan ketepatan keputusan.
Parameter pengurusan risiko akan disesuaikan secara automatik dengan dolar AS yang kuat dan stop loss dan stop loss akan meningkat apabila dolar AS kuat.
Dengan menggunakan isyarat perdagangan Forex yang mudah dan intuitif serta strategi Stop Loss Stop Loss, ia mudah dilaksanakan dan dikesan.
Sistem EMA berganda menghilangkan titik kritikal trend yang dinilai sebagai ketinggalan.
Pilihan parameter ATR yang tidak betul boleh menyebabkan terlalu radikal atau konservatif.
Parameter penunjuk ADX perlu dioptimumkan, pilihan ADX yang tidak tepat boleh terlepas trend.
Indeks Dolar dan Indeks Supertrend boleh menjadi salah.
Stop loss yang terlalu kecil boleh meningkatkan kerugian; stop loss yang terlalu luas mudah ditarik.
Ia boleh dipertimbangkan dalam kombinasi dengan penunjuk lain seperti MACD untuk menentukan titik kritikal trend.
Menggunakan lebih banyak data sejarah untuk melatih ruang parameter ATR untuk mencari julat parameter yang optimum.
Uji parameter ADX yang berbeza, optimumkan penilaian ADX tinggi.
Menambahkan lebih banyak pembolehubah untuk menilai indeks dolar dan pergerakan pasaran secara keseluruhan.
Mengambil kiraan optimum dari data pengesanan semula.
Anda boleh mempertimbangkan untuk mengubah hentian ke hentian bergerak atau hentian getaran.
Teruskan untuk mengoptimumkan saiz pembukaan dan tempoh pegangan.
Strategi ini mengintegrasikan sistem rata-rata EMA ganda klasik dengan beberapa penunjuk tambahan, dengan pengoptimuman parameter secara automatik, untuk mencapai strategi mengikuti trend yang lebih lengkap. Ia dapat menyesuaikan diri dengan perubahan persekitaran pasaran, mengawal risiko sambil mengikuti trend.
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Refactored Advanced EMA Cross with Normalized ATR Filter, Controlling ADX", shorttitle="ALP V5", overlay=true)
// Initialize variables to track if a buy order has been placed and number of periods since the last buy
var bool hasBought = false
var int barCountSinceBuy = 0
// Define EMA periods
emaShort = ta.ema(close, 8)
emaLong = ta.ema(close, 20)
// Define ATR period and normalization
atrLength = 14
atrValue = ta.atr(atrLength)
maxHistoricalATR = ta.highest(atrValue, 20)
minHistoricalATR = ta.lowest(atrValue, 20)
normalizedATR = (atrValue - minHistoricalATR) / (maxHistoricalATR - minHistoricalATR)
// Define ADX parameters
adxValue = ta.rma(close, 14)
adxHighLevel = 30
isADXHigh = adxValue > adxHighLevel
// Initialize risk management variables
var float stopLossPercent = na
var float takeProfitPercent = na
var float trailingStop = na
// Calculate USD strength (simplified)
usd_strength = close / ta.ema(close, 50) - 1
// Adjust risk parameters based on USD strength
if (usd_strength > 0)
stopLossPercent := 3
takeProfitPercent := 6
else
stopLossPercent := 4
takeProfitPercent := 8
// Initialize position variable
var float positionPrice = na
// Volume filter
minVolume = ta.sma(volume, 14) * 1.5
isVolumeHigh = volume > minVolume
// Piyasa yönü için süper trend göstergesi
[supertrendValue, supertrendDirection] = ta.supertrend(4, 14) // Use a factor of 3 and ATR period of 10
bool isBullMarket = supertrendDirection < 0
bool isBearMarket = supertrendDirection > 0
// Yükselen piyasa için alım koşulu
buyConditionBull = isBullMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.2
// Düşen piyasa için alım koşulu
buyConditionBear = isBearMarket and ta.crossover(emaShort, emaLong) and normalizedATR > 0.5
// Genel alım koşulu
buyCondition = buyConditionBull or buyConditionBear
// Yükselen ve düşen piyasalar için farklı satış koşulları
sellConditionBull = isBullMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
sellConditionBear = isBearMarket and (ta.crossunder(emaShort, emaLong) or isADXHigh)
// Genel satış koşulu
sellCondition = sellConditionBull or sellConditionBear
// Buy condition
if (buyCondition)
strategy.entry("Buy", strategy.long)
positionPrice := close
hasBought := true // Set the flag to true when a buy order is placed
barCountSinceBuy := 0 // Reset the bar counter when a buy order is placed
// Increase the bar counter if a buy has been executed
if (hasBought)
barCountSinceBuy := barCountSinceBuy + 1
// Calculate stop-loss and take-profit levels
longStopLoss = positionPrice * (1 - stopLossPercent / 100)
longTakeProfit = positionPrice * (1 + takeProfitPercent / 100)
// Final Sell condition, now also checks if a buy has occurred before and if at least 5 periods have passed
finalSellCondition = sellCondition and hasBought and barCountSinceBuy >= 3 and isVolumeHigh
if (finalSellCondition)
strategy.close("Buy")
positionPrice := na
hasBought := false // Reset the flag when a sell order is placed
barCountSinceBuy := 0 // Reset the bar counter when a buy order is closed
// Implement stop-loss, take-profit, and trailing stop
strategy.exit("Stop Loss", "Buy", stop=longStopLoss)
strategy.exit("Take Profit", "Buy", limit=longTakeProfit)
//strategy.exit("Trailing Stop", "Buy", trail_price=close, trail_offset=trailingStop * close / 100)
var label l = na
if (buyCondition)
l := label.new(bar_index, high, text="buy triggered " + str.tostring(usd_strength))
label.delete(l[1])
if (finalSellCondition)
l := label.new(bar_index, high, text="sell triggered " + str.tostring(usd_strength))
label.delete(l[1])
// Plot signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=finalSellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")