Artikel ini akan menerangkan secara terperinci satu strategi yang menggunakan pengiktirafan band longkang untuk melakukan perdagangan kuantitatif garis panjang. Strategi ini melakukan pembelian dengan menilai harga untuk menembusi band longkang, untuk melaksanakan operasi pengesanan pergerakan.
I. Prinsip-prinsip Strategi
Kaedah ini adalah asas untuk menentukan kadar pergerakan dan langkah-langkah pengiraan adalah sebagai berikut:
Mengira rata-rata bergerak di landasan tengah, landasan atas dan landasan bawah;
Ia menghasilkan isyarat beli apabila harga mula turun ke bawah dan menembusi ke bawah.
Ini adalah satu-satunya cara yang boleh digunakan untuk menjimatkan wang.
Anda boleh memilih untuk berhenti ketika anda menjual isyarat atau ketika anda menembusi rel.
Stop loss ditetapkan sebagai peratusan tetap stop loss.
Dengan cara ini, ia boleh dibeli semasa harga berada dalam fasa menurun, kemudian keluar melalui hentian atau hentian kerugian, untuk mencapai operasi pembalikan.
Kedua, kelebihan strategi
Kelebihan utama strategi ini adalah penggunaan ribut gelombang untuk mengenal pasti titik balik, yang merupakan kaedah analisis teknikal yang lebih matang.
Kelebihan lain ialah ia mempunyai mekanisme terhad yang boleh mengawal risiko perdagangan tunggal.
Akhir sekali, pembinaan dalam kumpulan juga membantu untuk mendapatkan keuntungan dalam fasa-fasa selepas pembalikan.
Ketiga, potensi risiko
Namun, terdapat beberapa masalah yang boleh timbul dengan strategi ini:
Pertama, pengiraan purata bergerak terlewat dan mungkin terlepas peluang terbaik untuk membeli.
Kedua, penyesuaian untuk stop dan stop loss perlu diuji dan dioptimumkan dengan teliti.
Akhirnya, pemegang talian panjang perlu menanggung tekanan penarikan balik tertentu.
Empat isi, ringkasan
Artikel ini menerangkan secara terperinci mengenai strategi perdagangan kuantitatif garis panjang yang memanfaatkan perubahan band yang bergelombang. Ia dapat mengenal pasti peluang untuk membalikkan harga dengan berkesan, mewujudkan pegangan garis panjang. Tetapi juga perlu mengawal masalah seperti keterlambatan garis rata-rata bergerak, dan mengoptimumkan titik berhenti.
/*backtest
start: 2023-09-07 00:00:00
end: 2023-09-12 04:00:00
period: 14m
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/
// © ediks123
//strategy logic has been borrowed from ceyhun and tweaked the settings for back testing
//@version=4
//SPY 4 hrs settings 8, 13 , 3.33 , 0.9 on 4 hrs chart
//QQQ above settings is good , but 13, 13 has less number of bars
//QQQ 4 hrs settings 13, 13 , 3.33 , 0.9 on 4 hrs chart
strategy(title="Volatility Bands Reversal Strategy", shorttitle="VolatilityBandReversal" , overlay=true, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=20, initial_capital=10000, currency=currency.USD) //default_qty_value=10, default_qty_type=strategy.fixed,
av = input(8, title="Band Average")
vp = input(13, title="Volatility Period")
df = input(3.33,title="Deviation Factor",minval=0.1)
lba = input(0.9,title="Lower Band Adjustment",minval=0.1)
riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(6,title="Stop Loss",minval=1)
exitOn=input(title="Exit on", defval="touch_upperband", options=["Sell_Signal", "touch_upperband"])
src = hlc3
typical = src >= src[1] ? src - low[1] : src[1] - low
deviation = sum( typical , vp )/ vp * df
devHigh = ema(deviation, av)
devLow = lba * devHigh
medianAvg = ema(src, av)
emaMediaAvg=ema(medianAvg, av)
upperBandVal= emaMediaAvg + devHigh
lowerbandVal= emaMediaAvg - devLow
MidLineVal=sma(medianAvg, av)
UpperBand = plot ( upperBandVal, color=#EE82EE, linewidth=2, title="UpperBand")
LowerBand = plot ( lowerbandVal , color=#EE82EE, linewidth=2, title="LowerBand")
MidLine = plot (MidLineVal, color=color.blue, linewidth=2, title="MidLine")
buyLine = plot ( (lowerbandVal + MidLineVal )/2 , color=color.blue, title="BuyLine")
up=ema(medianAvg, av) + devHigh
down=ema(medianAvg, av) - devLow
ema50=ema(hlc3,50)
plot ( ema50, color=color.orange, linewidth=2, title="ema 50")
//outer deviation
//deviation1 = sum( typical , vp )/ vp * 4
//devHigh1 = ema(deviation, av)
//devLow1 = lba * devHigh
//medianAvg1 = ema(src, av)
//UpperBand1 = plot (emaMediaAvg + devHigh1, color=color.red, linewidth=3, title="UpperBand1")
//LowerBand1 = plot (emaMediaAvg - devLow1, color=color.red, linewidth=3, title="LowerBand1")
//
///Entry Rules
//1)First candle close below the Lower Band of the volatility Band
//2)Second candle close above the lower band
//3)Third Candle closes above previous candle
Buy = close[2] < down[2] and close[1]>down[1] and close>close[1]
//plotshape(Buy,color=color.blue,style=shape.arrowup,location=location.belowbar, text="Buy")
//barcolor(close[2] < down[2] and close[1]>down[1] and close>close[1] ? color.blue :na )
//bgcolor(close[2] < down[2] and close[1]>down[1] and close>close[1] ? color.green :na )
///Exit Rules
//1)One can have a static stops initially followed by an trailing stop based on the risk the people are willing to take
//2)One can exit with human based decisions or predefined target exits. Choice of deciding the stop loss and profit targets are left to the readers.
Sell = close[2] > up[2] and close[1]<up[1] and close<close[1]
//plotshape(Sell,color=color.red,style=shape.arrowup,text="Sell")
barcolor(close[2] > up[2] and close[1]<up[1] and close<close[1] ? color.yellow :na )
bgcolor(close[2] > up[2] and close[1]<up[1] and close<close[1] ? color.red :na )
//Buyer = crossover(close,Buy)
//Seller = crossunder(close,Sell)
//alertcondition(Buyer, title="Buy Signal", message="Buy")
//alertcondition(Seller, title="Sell Signal", message="Sell")
//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity * riskCapital / 100 ) / (close*stopLoss/100)
//check if cash is sufficient to buy qty1 , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1
strategy.entry(id="vbLE", long=true, qty=qty1, when=Buy)
bgcolor(strategy.position_size>=1 ? color.blue : na)
// stop loss exit
stopLossVal = strategy.position_size>=1 ? strategy.position_avg_price * ( 1 - (stopLoss/100) ) : 0.00
//draw initil stop loss
plot(strategy.position_size>=1 ? stopLossVal : na, color = color.purple , style=plot.style_linebr, linewidth = 2, title = "stop loss") //, trackprice=true)
strategy.close(id="vbLE", comment="SL exit Loss is "+tostring(close - strategy.position_avg_price, "###.##") , when=abs(strategy.position_size)>=1 and close < stopLossVal )
//close on Sell_Signal
strategy.close(id="vbLE", comment="Profit is : "+tostring(close - strategy.position_avg_price, "###.##") , when=strategy.position_size>=1 and exitOn=="Sell_Signal" and Sell)
//close on touch_upperband
strategy.close(id="vbLE", comment="Profit is : "+tostring(close - strategy.position_avg_price, "###.##") , when=strategy.position_size>=1 and exitOn=="touch_upperband" and (crossover(close, up) or crossover(high, up)))