Strategi ini adalah sistem perdagangan grid dinamik berdasarkan penunjuk TTM, yang menentukan arah trend pasaran dengan mengira purata bergerak eksponensial (EMA) tertinggi dan terendah, dan menggunakan sistem perdagangan grid di sekitar harga asas yang dikemas kini secara dinamik.
Logik teras terletak pada pengiraan keadaan TTM, dilaksanakan melalui langkah-langkah berikut: 1. Hitung dua EMA berdasarkan parameter ttmPeriod: EMA terendah (lowMA) dan tertinggi (highMA) 2. Tentukan dua tahap ambang antara MA tinggi dan MA rendah: - rendahThird:1⁄3kedudukan dari bawah - tinggiTiga:2⁄3kedudukan dari bawah 3. Tentukan keadaan TTM berdasarkan kedudukan harga penutupan berbanding ambang ini: - Mengembalikan 1 (uptrend) apabila penutupan di atas tinggi - Mengembalikan 0 (menurunkan trend) apabila tutup adalah di bawah rendahThird - Mengembalikan -1 (keadaan neutral) apabila dekat adalah antara lowThird dan highThird
Sistem perdagangan grid menyesuaikan secara dinamik berdasarkan keadaan TTM: 1. Mengemas kini harga asas grid dan arah apabila keadaan TTM berubah 2. Mengira tahap harga beli / jual berdasarkan arah grid dan jarak 3. Melakukan operasi beli atau jual yang sepadan apabila harga menembusi tahap grid
Strategi ini menggabungkan pengesanan trend TTM dengan perdagangan grid dinamik untuk mewujudkan sistem perdagangan yang beradaptasi dan terkawal risiko. Melalui penyesuaian dinamik arah grid dan tahap harga, strategi ini dapat menyesuaikan diri dengan berkesan dengan persekitaran pasaran yang berbeza. Walaupun terdapat risiko yang melekat, melalui tetapan parameter yang sesuai dan langkah pengoptimuman, strategi menunjukkan nilai praktikal dan potensi pembangunan yang baik.
/*backtest start: 2024-12-04 00:00:00 end: 2024-12-11 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("TTM Grid Strategy", overlay=true) // Input parameters int ttmPeriod = input.int(6, minval=1, title="TTM Period") int gridLevels = input.int(5, minval=2, title="Grid Levels") float gridSpacing = input.float(0.01, minval=0.0001, title="Grid Spacing (%)") // Calculate TTM State ttmState() => lowMA = ta.ema(low, ttmPeriod) highMA = ta.ema(high, ttmPeriod) lowThird = (highMA - lowMA) / 3 + lowMA highThird = 2 * (highMA - lowMA) / 3 + lowMA if close > highThird 1 else if close < lowThird 0 else -1 // State tracking variables var float gridBasePrice = 0.0 var int gridDirection = -1 // Determine grid state updateGridState(float currentClose, int currentState) => float newBasePrice = gridBasePrice int newDirection = gridDirection if currentState != -1 and currentState != gridDirection newBasePrice := currentClose newDirection := currentState [newBasePrice, newDirection] // Calculate grid levels calcGridLevels(float basePrice, int direction, int levels) => float[] buyLevels = array.new_float(levels) float[] sellLevels = array.new_float(levels) for i = 1 to levels multiplier = i * gridSpacing if direction == 1 // Buy grid array.set(buyLevels, i-1, basePrice * (1 - multiplier)) array.set(sellLevels, i-1, basePrice * (1 + multiplier)) else // Sell grid array.set(buyLevels, i-1, basePrice * (1 + multiplier)) array.set(sellLevels, i-1, basePrice * (1 - multiplier)) [buyLevels, sellLevels] // Execute grid trades executeGridTrades(float basePrice, int direction, int levels) => [buyLevels, sellLevels] = calcGridLevels(basePrice, direction, levels) for i = 0 to levels - 1 float buyLevel = array.get(buyLevels, i) float sellLevel = array.get(sellLevels, i) if direction == 1 // Buy grid if low <= buyLevel strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i)) if high >= sellLevel strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i)) else // Sell grid if high >= buyLevel strategy.entry("GridBuy" + str.tostring(i), strategy.long, comment="Buy Level " + str.tostring(i)) if low <= sellLevel strategy.entry("GridSell" + str.tostring(i), strategy.short, comment="Sell Level " + str.tostring(i)) // Main strategy logic currentState = ttmState() [newGridBasePrice, newGridDirection] = updateGridState(close, currentState) // Update global variables if newGridBasePrice != gridBasePrice gridBasePrice := newGridBasePrice if newGridDirection != gridDirection gridDirection := newGridDirection // Execute grid trades executeGridTrades(newGridBasePrice, newGridDirection, gridLevels) // Visualization plotColor = newGridDirection == 1 ? color.green : color.red plot(newGridBasePrice, color=plotColor, style=plot.style_cross)