Artikel ini menerangkan secara terperinci strategi perdagangan kuantitatif pelbagai penunjuk yang direka untuk mata wang kripto. Ia menggunakan purata bergerak, osilator, saluran dan lain-lain untuk isyarat kemasukan dan kawalan risiko.
I. Logik Strategi
Kategori penunjuk utama yang digunakan ialah:
Osilator ROC untuk mengukur tahap overbought / oversold.
Saluran Donchian untuk sokongan dinamik dan rintangan.
Kuasa beruang mengenal pasti ciri-ciri bawah.
Keseimbangan Kuasa untuk penilaian trend.
Purata bergerak untuk penapisan trend.
Perdagangan hanya diambil apabila beberapa penunjuk bersetuju. sasaran keuntungan dan stop loss juga ditetapkan untuk mengawal risiko perdagangan tunggal.
II. Kelebihan Strategi
Kelebihan terbesarnya ialah pelengkapan penunjuk, menilai dari pelbagai dimensi.
Satu lagi kelebihan adalah stop loss langsung dan masuk akal dan mengambil keuntungan untuk pengurusan wang yang bijak.
Akhirnya, ruang parameter yang luas membolehkan penyesuaian halus untuk cryptocurrency.
III. Risiko yang berpotensi
Walau bagaimanapun, terdapat beberapa risiko:
Pertama, kombinasi pelbagai penunjuk meningkatkan kesukaran pengoptimuman.
Kedua, perbezaan antara penunjuk memerlukan peraturan logik yang jelas.
Akhirnya, parameter perlu dioptimumkan untuk produk tertentu.
IV. Ringkasan
Ringkasnya, artikel ini telah menerangkan strategi kuantitatif pelbagai penunjuk yang disesuaikan untuk mata wang kripto. Ia menggabungkan dengan bijak penunjuk untuk pengurusan risiko dan wang. Melalui pengoptimuman parameter ia dapat mencapai keuntungan yang stabil tetapi perlu menguruskan kesukaran pengoptimuman dan penggunaan penunjuk.
/*backtest start: 2023-09-07 00:00:00 end: 2023-09-14 00:00:00 period: 4m 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/ // © mbagheri746 //@version=4 strategy("Bagheri IG Ether", overlay=true, margin_long=100, margin_short=100) TP = input(3000, minval = 1 , title ="Take Profit") SL = input(3443, minval = 1 , title ="Stop Loss") //_________________ RoC Definition _________________ rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=185) smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=49) src = input(title="Source", type=input.source, defval=close) ma = ema(src, smoothingLength) mom = change(ma, rocLength) sroc = nz(ma[rocLength]) == 0 ? 100 : mom == 0 ? 0 : 100 * mom / ma[rocLength] //srocColor = sroc >= 0 ? #0ebb23 : color.red //plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0) //hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898) //_________________ Donchian Channel _________________ length1 = input(43, minval=1, title="Upper Channel") length2 = input(43, minval=1, title="Lower Channel") offset_bar = input(90,minval=0, title ="Offset Bars") upper = highest(length1) lower = lowest(length2) basis = avg(upper, lower) DC_UP_Band = upper[offset_bar] DC_LW_Band = lower[offset_bar] l = plot(DC_LW_Band, style=plot.style_line, linewidth=2, color=color.red) u = plot(DC_UP_Band, style=plot.style_line, linewidth=2, color=color.aqua) fill(l,u,color = color.new(color.aqua,transp = 90)) //_________________ Bears Power _________________ wmaBP_period = input(61,minval=1,title="BearsP WMA Period") line_wma = ema(close, wmaBP_period) BP = low - line_wma //_________________ Balance of Power _________________ ES_BoP=input(15, title="BoP Exponential Smoothing") BOP=(close - open) / (high - low) SBOP = rma(BOP, ES_BoP) //_________________ Alligator _________________ //_________________ CCI _________________ //_________________ Moving Average _________________ sma_period = input(74, minval = 1 , title = "SMA Period") sma_shift = input(37, minval = 1 , title = "SMA Shift") sma_primary = sma(close,sma_period) SMA_sh = sma_primary[sma_shift] plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow) //_________________ Long Entry Conditions _________________// MA_Lcnd = SMA_sh > low and SMA_sh < high ROC_Lcnd = sroc < 0 DC_Lcnd = open < DC_LW_Band BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2] BOP_Lcnd = SBOP[1] < SBOP[0] //_________________ Short Entry Conditions _________________// MA_Scnd = SMA_sh > low and SMA_sh < high ROC_Scnd = sroc > 0 DC_Scnd = open > DC_UP_Band BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2] BOP_Scnd = SBOP[1] > SBOP[0] //_________________ OPEN POSITION __________________// strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd) strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd) //_________________ CLOSE POSITION __________________// strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL) strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL) //_________________ TP and SL Plot __________________// currentPL= strategy.openprofit pos_price = strategy.position_avg_price open_pos = strategy.position_size TP_line = (strategy.position_size > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0 SL_line = (strategy.position_size > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0 // hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false) // hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false) Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1) Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1) Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1) fill(Tline , Pline, color = color.new(color.green,transp = 90)) fill(Sline , Pline, color = color.new(color.red,transp = 90)) //_________________ Label __________________// inMyPrice = input(title="My Price", type=input.float, defval=0) inLabelStyle = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right") posColor = color.new(color.green, 25) negColor = color.new(color.red, 25) dftColor = color.new(color.aqua, 25) posPnL = (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0 posDir = (strategy.position_size > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat" posCol = (posPnL > 0) ? posColor : (posPnL < 0) ? negColor : dftColor myPnL = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0 var label lb = na label.delete(lb) lb := label.new(bar_index, close, color=posCol, style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left, text= "╔═══════╗" +"\n" + "Pos: " +posDir +"\n" + "Pos Price: "+tostring(strategy.position_avg_price) +"\n" + "Pos PnL: " +tostring(posPnL, "0.00") + "%" +"\n" + "My Price: " +tostring(inMyPrice) +"\n" + "My PnL: " +tostring(myPnL, "0.00") + "%" +"\n" + "╚═══════╝")