
Strategi grid DCA berlawanan garisan rata-rata DCA berlawanan garisan rata-rata dan strategi DCA mewujudkan grid secara beransur-ansur membina kedudukan. Ia menilai peluang berbalik berdasarkan bentuk berbalik garisan dua. Setelah mencetuskan bentuk berbalik, gunakan beberapa pesanan dengan harga yang berbeza, digabungkan dengan DCA untuk membina kedudukan grid secara beransur-ansur.
Strategi ini mula-mula menilai apakah K-line muncul di bawah dua harga penutupan yang sama secara berturut-turut, yang dikenali sebagai “double bottom”. Jika dua bahagian bawah terdeteksi, peluang untuk harga berbalik mungkin berlaku. Pada masa ini, strategi akan menetapkan beberapa pesanan harga terhad di dekat bahagian bawah, dengan harga yang dikira mengikut ATR dan kadar turun naik, membentuk kawasan grid. Ini mewujudkan kesan DCA, yang membolehkan pedagang untuk membina kedudukan secara beransur-ansur pada harga yang berbeza yang berbalik.
Khususnya, pertama-tama kira ATR untuk 14 baris K terkini melalui ta.atr, kemudian kira kadar turun naik harga untuk 5 baris K terkini, yang merupakan parameter utama yang digunakan untuk menentukan julat grid. Julat grid terbahagi kepada 4 titik harga, iaitu harga bawah + kadar turun naik, harga bawah + 0.75 kali kadar turun naik, dan seterusnya. Apabila tercetus syarat double bottom, gunakan rumus ini untuk menetapkan 4 pesanan harga terhad pada harga yang sesuai, dengan jumlah yang sama setiap pesanan.
Di samping itu, strategi juga menetapkan titik hentian dan titik berhenti. Harga hentian adalah harga terendah di bawah dua kali ganda - titik paling rendah, dan harga berhenti adalah lima kali ganda harga masuk + ATR. Kedua-dua harga akan dikemas kini secara langsung apabila kedudukan bukan 0.
Strategi ini mempunyai kelebihan berikut:
Risiko utama ialah:
Strategi ini juga boleh dioptimumkan dalam beberapa arah:
Strategi grid DCA berbalik rata-rata dua bahagian bawah menggunakan pelbagai kaedah teknikal seperti bentuk harga, penunjuk rata-rata, perdagangan grid. Ia mempunyai kelebihan seperti ketepatan masa penghakiman, kawalan kos, perlindungan penarikan balik.
/*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)