
Strategi grid DCA berlawanan arah dengan garis tengah ganda digunakan terutama untuk berlawanan arah dengan harga rata-rata dan strategi DCA untuk mewujudkan grid yang dibangun secara bertahap. Ini menilai peluang berbalik berdasarkan bentuk berbalik dari dasar ganda. Setelah memicu bentuk berbalik, gunakan beberapa surat perintah dengan harga yang berbeda untuk membangun posisi grid bertahap dengan DCA.
Strategi ini pertama-tama menilai apakah K-line muncul di bawah dua harga penutupan yang sama secara berturut-turut, yang dikenal sebagai double bottom. Jika terdeteksi double bottom, maka dianggap mungkin ada kesempatan untuk membalikkan harga. Pada saat ini, strategi ini akan menempatkan beberapa set order dengan harga yang terbatas di dekat dasar, dengan harga yang dihitung berdasarkan ATR dan volatilitas, membentuk area grid.
Secara khusus, pertama-tama menghitung indikator ATR dari 14 garis K terbaru melalui ta.atr, kemudian digabungkan dengan 5 garis K terbaru untuk menghitung tingkat fluktuasi harga, yang merupakan parameter utama yang digunakan untuk menentukan kisaran grid. Kisaran grid dibagi menjadi 4 titik harga, yaitu harga dasar + tingkat fluktuasi, harga dasar + 0,75 kali fluktuasi, dan seterusnya. Setelah memicu kondisi dasar ganda, dengan rumus yang dihitung ini, atur 4 pesanan harga terbatas dengan harga yang sesuai, dengan jumlah yang sama untuk setiap pesanan.
Selain itu, strategi juga menetapkan stop loss dan stop loss. Stop loss adalah harga minimum di bawah dua kali lipat - minimum bouncing, dan stop loss adalah harga masuk + ATR 5 kali lipat. Kedua harga ini akan diperbarui secara real-time ketika posisi tidak 0.
Strategi ini memiliki keuntungan sebagai berikut:
Risiko utama adalah:
Strategi ini juga dapat dioptimalkan dari beberapa arah:
Strategi jaringan DCA reverse-average-line-double-bottom menggunakan berbagai teknik seperti bentuk harga, indikator average-line, dan perdagangan jaringan. Ini memiliki keunggulan seperti akurasi waktu penilaian, biaya yang dapat dikontrol, perlindungan penarikan. Ruang untuk mengoptimalkan strategi ini masih sangat besar dan layak untuk penelitian dan aplikasi yang mendalam. Jika parameter disesuaikan dengan benar, efek yang baik dapat diperoleh dalam situasi yang bergolak.
/*backtest
start: 2024-02-12 00:00:00
end: 2024-02-19 00:00:00
period: 3m
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/
// © cherepanovvsb
//@version=5
strategy("Reversal (only long)", overlay=true, margin_long=1, margin_short=1,initial_capital=1000,commission_type = strategy.commission.percent,commission_value =0.1,currency='USD', process_orders_on_close=true)
plotshape(low == low[1], style=shape.triangleup, location=location.belowbar, color=color.blue, title="1 Setup")
plotshape(low == low[1] and low[1]==low[2], style=shape.triangleup, location=location.belowbar, color=color.red, title="Triple Setup")
ATRlenght = input.int(title="ATR length for taking profit", defval=14, group="Strategy Settings")
rewardMultiplier= input.int(title="ATR multiplier", defval=5, group="Strategy Settings")
Volatility_length=input.int(title='Volatility length',defval=5,group="Strategy Settings")
Volatility_multiplier=input.float(title='Volatility multiplier',defval=0.5,step=0.1, group="Strategy Settings")
Candles_to_wait=input.int(title='How many candles to wait after placing orders grid?',defval=4,group="Strategy Settings")
// Get ATR
atr1 = ta.atr(ATRlenght)
//Get volatility values (not ATR)
float result = 0
for i = 0 to Volatility_length
result+=high[i]-low[i]
volatility=result*Volatility_multiplier/Volatility_length
//Validate entrance points
validlow = low [2]== low[1] and not na(atr1)
validlong = validlow and strategy.position_size == 0 and low[1]<low
// Calculate SL/TP
longStopPrice = low[1]-syminfo.mintick
longStopDistance = close - longStopPrice
longTargetPrice = close + (longStopDistance * rewardMultiplier)
strategy.initial_capital = 50000
//Assign all variables
var tradeStopPrice = 0.0
var tradeTargetPrice = 0.0
var point1=0.0
var point2=0.0
var point3=0.0
var point4=0.0
var contracts = int(strategy.initial_capital/close)/4
if validlong
tradeStopPrice := longStopPrice
tradeTargetPrice := longTargetPrice
point1:=low[1]+volatility
point2:=low[1]+volatility*0.75
point3:=low[1]+volatility*0.5
point4:=low[1]+volatility*0.25
strategy.entry ("Long1", strategy.long,limit=point1,qty=contracts, when=validlong)
strategy.entry ("Long2", strategy.long,limit=point2,qty=contracts, when=validlong)
strategy.entry ("Long3", strategy.long,limit=point3,qty=contracts, when=validlong)
strategy.entry ("Long4", strategy.long,limit=point4,qty=contracts, when=validlong)
stopcondition = ta.barssince(validlong) == Candles_to_wait
strategy.cancel("Long1",when=stopcondition)
strategy.cancel("Long2",when=stopcondition)
strategy.cancel("Long3",when=stopcondition)
strategy.cancel("Long4",when=stopcondition)
strategy.exit(id="Long Exit", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size > 0)
plot(strategy.position_size != 0 or validlong ? tradeStopPrice : na, title="Trade Stop Price", color=color.red, style=plot.style_linebr, linewidth=3)
plot(strategy.position_size != 0 or validlong ? tradeTargetPrice : na, title="Trade Target Price", color=color.green, style=plot.style_linebr, linewidth=3)
plot(strategy.position_size != 0? point1 : na, title="Long1", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point2 : na, title="Long2", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point3 : na, title="Long3", color=color.green, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0? point4 : na, title="Long4", color=color.green, style=plot.style_linebr, transp=0)