बेबीशार्क वीडब्ल्यूएपी ट्रेडिंग रणनीति वॉल्यूम वेटेड एवरेज प्राइस (वीडब्ल्यूएपी) और ऑन बैलेंस वॉल्यूम रिलेटिव स्ट्रेंथ इंडेक्स (ओबीवी आरएसआई) पर आधारित एक मात्रात्मक ट्रेडिंग रणनीति है। रणनीति का उद्देश्य कुछ सीमा स्तरों को पार करने वाले वीडब्ल्यूएपी और ओबीवी आरएसआई से विचलन के आधार पर संभावित खरीद और बिक्री संकेतों की पहचान करना है।
इस रणनीति का मूल सिद्धांत बाजार के रुझानों और गति परिवर्तनों को पकड़ने के लिए वीडब्ल्यूएपी और ओबीवी आरएसआई संकेतकों का उपयोग करना है। वीडब्ल्यूएपी मूल्य और मात्रा के आधार पर एक गतिशील चलती औसत है, जो बाजार के मुख्य ट्रेडिंग क्षेत्रों को दर्शाता है। जब मूल्य वीडब्ल्यूएपी से महत्वपूर्ण रूप से विचलित होता है, तो यह आमतौर पर बाजार में ओवरबॉट या ओवरसोल्ड स्थितियों को इंगित करता है। दूसरी ओर, ओबीवी आरएसआई, पारंपरिक आरएसआई संकेतक के आधार पर वॉल्यूम कारक पेश करता है ताकि वॉल्यूम परिवर्तनों की तीव्रता को मापकर बाजार के रुझानों की ताकत का निर्धारण किया जा सके।
विशेष रूप से, रणनीति वीडब्ल्यूएपी के लिए गणना अवधि के रूप में 60 मोमबत्तियों का उपयोग करती है, जिसमें इनपुट डेटा के रूप में समापन मूल्य होता है। फिर यह वीडब्ल्यूएपी से सकारात्मक और नकारात्मक 3 मानक विचलन के मूल्य विचलन के आधार पर ओवरबॉट और ओवरसोल्ड जोन का निर्माण करता है। ओबीवी आरएसआई के लिए, यह गणना अवधि के रूप में 5 मोमबत्तियों का उपयोग करता है और ओवरबॉट और ओवरसोल्ड स्थितियों को निर्धारित करने के लिए मानदंड के रूप में 70 और 30 की सीमा निर्धारित करता है।
ट्रेडिंग लॉजिक के संदर्भ में, जब कीमत VWAP के निचले बैंड के नीचे ओवरसोल्ड जोन में होती है और OBV RSI 30 से कम होता है, तो रणनीति एक लंबा संकेत उत्पन्न करती है। इसके विपरीत, जब कीमत VWAP के ऊपरी बैंड के ऊपर ओवरबोल्ड जोन में होती है और OBV RSI 70 से अधिक होता है, तो यह एक छोटा संकेत उत्पन्न करती है। इसके अलावा, रणनीति 0.6% का लाभ और स्टॉप लॉस अनुपात निर्धारित करती है और जोखिमों को नियंत्रित करने के लिए लगातार नुकसान के बाद 10 मोमबत्तियों की शीतलन अवधि पेश करती है।
बेबीशार्क वीडब्ल्यूएपी ट्रेडिंग रणनीति एक मात्रात्मक ट्रेडिंग रणनीति है जो वॉल्यूम वेटेड औसत मूल्य और बैलेंस वॉल्यूम सापेक्ष शक्ति सूचकांक को जोड़ती है ताकि ओवरबॉट और ओवरसोल्ड स्थितियों और प्रवृत्ति गति में परिवर्तन को पकड़कर ट्रेडिंग सिग्नल उत्पन्न किए जा सकें। रणनीति में स्पष्ट तर्क है, बाजार की धड़कन को व्यापक रूप से समझने के लिए कीमत और वॉल्यूम जैसे कई बाजार कारकों को एकीकृत करना। साथ ही, उचित लाभ और स्टॉप लॉस सेटिंग्स और जोखिम नियंत्रण तंत्र रणनीति को जोखिम प्रबंधन पर विचार करते हुए रिटर्न का पीछा करने की अनुमति देते हैं। हालांकि, रणनीति में अयोग्य अनुकूलन क्षमता जैसे संभावित मुद्दे भी हैं। अस्थिर और ट्रेंडिंग बाजारों और निश्चित अनुकूलक। भविष्य में सुधार प्रवेश फिल्टर, गतिशील लाभ लेने, गतिशील मापदंडों, बाहरी डेटा विश्लेषण को बढ़ाने और रणनीति की मजबूती और लाभप्रदता में सुधार पर ध्यान केंद्रित कर सकते हैं। समग्र रूप से, बेबीशार्क वीडब्ल्यूएपी ट्रेडिंग रणनीति एक मात्रात्मक संदर्भ ढांचा प्रदान करती है जो आगे की खोज और सुधार के लायक है।
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © GreatestUsername //@version=5 strategy("BabyShark VWAP Strategy", overlay=true, margin_long=100, margin_short=100, calc_on_every_tick = true) // VWAP ls = input(false, title='Log-space', group = "Optional") type = 'Average Deviation' length = input(60, group="Strategy Modification") source = input(close, group="Strategy Modification") _low = ls == true ? math.log(low) : low _high = ls == true ? math.log(high) : high src = ls == true ? math.log(source) : source //weighted mean pine_vwmean(x, y) => cw = 0.0 cd = 0.0 w_sum = 0.0 d_sum = 0.0 for i = 0 to y - 1 by 1 cd := x[i] cw := volume[i] d_sum += cw * cd w_sum += cw w_sum d_sum / w_sum //weighted standard deviation pine_vwstdev(x, y, b) => d_sum = 0.0 w_sum = 0.0 cd = 0.0 for i = 0 to y - 1 by 1 cd := x[i] cw = volume[i] d_sum += cw * math.pow(cd - b, 2) w_sum += cw w_sum math.sqrt(d_sum / w_sum) //weighted average deviation pine_vwavdev(x, y, b) => d_sum = 0.0 w_sum = 0.0 cd = 0.0 for i = 0 to y - 1 by 1 cd := x[i] cw = volume[i] d_sum += cw * math.abs(cd - b) w_sum += cw w_sum d_sum / w_sum vwmean = pine_vwmean(src, length) //consider using Average Deviation instead of Standard Deviatio if there are values outside of 3rd upper & lower bands within a rolling window dev = if type == 'Standard Deviation' dev = pine_vwstdev(src, length, vwmean) dev else if type == 'Average Deviation' dev = pine_vwavdev(src, length, vwmean) dev basis = ls == true ? math.exp(vwmean) : vwmean plot(basis, color=color.new(#b7b7b7, 60), title='Basis') upper_dev_2 = vwmean + dev * 2 upper_dev_3 = vwmean + dev * 3 lower_dev_2 = vwmean - dev * 2 lower_dev_3 = vwmean - dev * 3 fill( plot1=plot(ls == true ? math.exp(upper_dev_2) : upper_dev_2, color=color.new(#B20000, 0), title='Upper dev 2'), plot2=plot(ls == true ? math.exp(upper_dev_3) : upper_dev_3, color=color.new(#FF6666, 0), title='Upper dev 3', display=display.none), color=color.new(#FF4D4D, 80), title='Upper band' ) fill( plot1=plot(ls == true ? math.exp(lower_dev_3) : lower_dev_3, color=color.new(#00CC00, 0), title='Lower dev 3', display=display.none), plot2=plot(ls == true ? math.exp(lower_dev_2) : lower_dev_2, color=color.new(#008000, 0), title='Lower dev 2'), color=color.new(#006600, 80), title='Lower band' ) // Input to enable or disable the table visibility table_visible = input(false, title="Show Table", group="Deviation Cross Monitor") // Input for the number of candles to look back table_length = input(300, title="Table Lookback Length", group="Deviation Cross Monitor") // Custom count function count_occurrences(cond, length) => count = 0 for i = 0 to length - 1 if cond[i] count := count + 1 count // Count occurrences of prices above Upper dev 2 and below Lower dev 2 above_upper_dev_2 = count_occurrences(close > upper_dev_2, table_length) below_lower_dev_2 = count_occurrences(close < lower_dev_2, table_length) // Create table in the bottom right corner var table tbl = table.new(position=position.bottom_right, rows=2, columns=2) if table_visible if barstate.islast // Update the table headers table.cell(tbl, 0, 0, "Above Upper Dev 2", bgcolor=color.gray, text_color=color.white) table.cell(tbl, 0, 1, "Below Lower Dev 2", bgcolor=color.gray, text_color=color.white) // Update the table values table.cell(tbl, 1, 0, str.tostring(above_upper_dev_2), bgcolor=color.new(color.green, 90), text_color=color.green) table.cell(tbl, 1, 1, str.tostring(below_lower_dev_2), bgcolor=color.new(color.red, 90), text_color=color.red) else table.delete(tbl) // RSI obvsrc = close change_1 = ta.change(obvsrc) obv = ta.cum(ta.change(obvsrc) > 0 ? volume : change_1 < 0 ? -volume : 0 * volume) src2 = obv len = input.int(5, minval=1, title="RSI Length", group="Strategy Modification") up = ta.rma(math.max(ta.change(src2), 0), len) down = ta.rma(-math.min(ta.change(src2), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) higherlvl = input(70, title="Higher Level", group="Strategy Modification") lowerlvl = input(30, title="Lower Level", group="Strategy Modification") plot_color = rsi >= higherlvl ? color.red : rsi <= lowerlvl ? color.green : color.new(#b7b7b7, 60) // plot(rsi, color=plot_color) //plot(rsi, color=color.white) // Count occurrences of RSI crossing higher level and lower level cross_above_higher = ta.crossover(rsi, higherlvl) cross_below_lower = ta.crossunder(rsi, lowerlvl) above_higher_count = count_occurrences(cross_above_higher, table_length) below_lower_count = count_occurrences(cross_below_lower, table_length) // Create table in the bottom right corner if (table_visible) var table tbl2 = table.new(position=position.bottom_right, rows=2, columns=2) if (barstate.islast) // Update the table headers table.cell(tbl2, 0, 0, "Higher Level Cross", bgcolor=color.gray, text_color=color.white) table.cell(tbl2, 0, 1, "Lower Level Cross", bgcolor=color.gray, text_color=color.white) // Update the table values table.cell(tbl2, 1, 0, str.tostring(above_higher_count), bgcolor=color.new(color.red, 90), text_color=color.red) table.cell(tbl2, 1, 1, str.tostring(below_lower_count), bgcolor=color.new(color.green, 90), text_color=color.green) // Entries // Long Entry: // Price is in the shaded GREEN area of [Hoss] VWAP Deviation // and the [Hoss] OBV RSI is GREEN. longCondition1 = close <= lower_dev_3 longConditions = plot_color == color.green and longCondition1 and strategy.position_size == 0 // Short Entry: // Price is in the shaded RED area of [Hoss] VWAP Deviation // and the [Hoss] OBV RSI is RED. shortCondition1 = close >= upper_dev_3 shortConditions = plot_color == color.red and shortCondition1 and strategy.position_size == 0 var int lastEntryBar = 0 shortEMA = ta.ema(close, 12) longEMA = ta.ema(close, 21) uptrend = shortEMA > longEMA if longConditions and lastEntryBar < bar_index - 10 //and uptrend strategy.entry("Long", strategy.long, stop=close * 0.994) lastEntryBar := bar_index if shortConditions and lastEntryBar < bar_index - 10 //and not uptrend strategy.entry("Short", strategy.short, stop=close * 1.006) lastEntryBar := bar_index if strategy.position_size > 0 and (ta.crossover(close, basis) or strategy.opentrades.entry_price(strategy.opentrades - 1) * 0.994 > close) strategy.close("Long", immediately = true) if strategy.position_size < 0 and (ta.crossunder(close, basis) or strategy.opentrades.entry_price(strategy.opentrades - 1) * 1.006 < close) strategy.close("Short", immediately = true) // Stop Loss: // 0.6% // After 1 Loss => NO more Trades for 10 Candles (10 minutes) (usually a breakout will happen, and it takes average 10min till it ranges again. So basically wait for range to form again) // Take Profit: // Grey line on [Hoss] VWAP Deviation or 0.6%