यह रणनीति मुख्य रूप से व्यापार संकेतों का न्याय करने के लिए बोलिंगर बैंड और आरएसआई संकेतकों को जोड़ती है, जो एक विशिष्ट फ्रेंकस्टीन रणनीति है। यह बोलिंगर बैंड के माध्यम से प्रवृत्ति की दिशा का न्याय करके और आरएसआई के माध्यम से प्रविष्टियों और स्टॉप-लॉस निकास बनाने के लिए ओवरबॉट और ओवरसोल्ड स्थितियों का पता लगाकर विभिन्न संकेतकों के लाभों को एकीकृत करती है।
वर्तमान मूल्य प्रवृत्ति का न्याय करने के लिए बोलिंगर बैंड्स के मध्य बैंड, ऊपरी बैंड और निचले बैंड का उपयोग करें। जब कीमत ऊपरी बैंड के माध्यम से टूटती है, तो इसे तेजी की प्रवृत्ति माना जाता है। जब यह निचले बैंड के माध्यम से टूटती है, तो इसे मंदी की प्रवृत्ति माना जाता है।
बोलिंगर बैंड की चौड़ाई (ऊपरी और निचले बैंड के बीच का अंतर) वर्तमान बाजार अस्थिरता को दर्शा सकता है। जब चौड़ाई बढ़ जाती है, तो इसका मतलब है कि अस्थिरता बढ़ जाती है और आरएसआई ओवरबॉट और ओवरसोल्ड स्थितियों का बेहतर पता लगा सकता है।
आरएसआई सूचक ओवरबॉट और ओवरसोल्ड स्थितियों का आकलन करता है। 70 से ऊपर ओवरबॉट जोन है और 30 से नीचे ओवरसोल्ड जोन है। बेहतर जोखिम-लाभ अनुपात प्राप्त करने के लिए ओवरबॉट और ओवरसोल्ड जोन में प्रवेश करने से बचें।
विशिष्ट ट्रेडिंग सिग्नल: (1) तेजी का संकेतः कीमत ऊपरी बैंड के माध्यम से टूट जाती है और आरएसआई अधिक नहीं है (आरएसआई 70 से कम) (2) मंदी का संकेतः कीमत निचले बैंड को तोड़ती है और आरएसआई ओवरसोल्ड नहीं होता है (आरएसआई 30 से अधिक)
स्टॉप लॉसः लंबी ट्रेडों के लिए, आरएसआई 70 से नीचे टूटने पर स्टॉप लॉस करें। शॉर्ट ट्रेडों के लिए, आरएसआई 30 से ऊपर टूटने पर स्टॉप लॉस करें।
इस रणनीति के लाभ इस प्रकार हैंः
कई संकेतकों को एकीकृत करने से अधिक व्यापक जानकारी और विश्वसनीय संकेत मिलते हैं।
समग्र प्रवृत्ति को निर्धारित करने के लिए बोलिंगर बैंड का उपयोग करना बड़ी चालों को पकड़ता है।
आरएसआई सूचक स्थानीय ओवरबॉट और ओवरसोल्ड स्तरों का पता लगाकर अनावश्यक जोखिमों से बचता है।
स्टॉप लॉस का तंत्र काफी सख्त है, जो नुकसान को कम करने में मदद करता है।
इस रणनीति में निम्नलिखित जोखिम भी हैं:
बोलिंगर बैंड और आरएसआई दोनों विफल हो सकते हैं, जिसके परिणामस्वरूप गलत ट्रेडिंग सिग्नल हो सकते हैं।
हालांकि स्टॉप लॉस होने के बावजूद, गलत स्टॉप लॉस पॉइंट्स अभी भी बड़े नुकसान का कारण बन सकते हैं।
बहुत बार व्यापार करने से लेन-देन की लागत और फिसलन बढ़ जाती है।
मापदंडों का अनुचित अनुकूलन ओवरफिटिंग का कारण बन सकता है।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः
इष्टतम मापदंडों को खोजने के लिए विभिन्न मापदंड संयोजनों का परीक्षण करें।
स्टॉप लॉस के तरीकों की लचीलापन में वृद्धि, जैसे कि एडीआर/एटीआर स्टॉप लॉस, ट्रेलिंग स्टॉप लॉस आदि।
पोजीशन साइजिंग रणनीतियाँ जोड़ें, जैसे फिक्स्ड फ्रैक्शन, मार्टिंगेल आदि।
संकेतों को फ़िल्टर करने के लिए अधिक संकेतक शामिल करें, जैसे कि वॉल्यूम आदि।
अनुकूलन पैरामीटर अनुकूलन के लिए मशीन सीखने का उपयोग करें.
प्रवेश का समय अनुकूलित करें, प्रवेश करने से पहले पुष्टिकरण संकेतों की प्रतीक्षा करें।
संक्षेप में, यह कई संकेतकों को जोड़ने वाली एक विशिष्ट फ्रेंकस्टीन रणनीति है। यह ओवरबॉट और ओवरसोल्ड जोखिमों से बचते हुए रुझानों को पकड़ने के लिए बोलिंगर बैंड और आरएसआई के लाभों को एकीकृत करता है। उचित पैरामीटर अनुकूलन और स्टॉप लॉस प्रबंधन के साथ, अच्छे परिणाम प्राप्त किए जा सकते हैं। लेकिन इसमें कुछ जोखिम भी हैं और स्थिरता में सुधार के लिए आगे अनुकूलन की आवश्यकता है। कुल मिलाकर, रणनीति विचार उचित है और इसमें सुधार के लिए बहुत जगह है।
/*backtest start: 2023-09-24 00:00:00 end: 2023-10-24 00:00:00 period: 2h basePeriod: 15m 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/ // © evillalobos1123 //@version=5 strategy("Villa Dinamic Pivot Supertrend Strategy", overlay=true, calc_on_every_tick = true, default_qty_type = strategy.fixed) //INPUTS ema_b = input.bool(false, "Use Simple EMA Filter", group = "Strategy Inputs") ema_b_ang = input.bool(true, "Use DEMA Angle Filter", group = "Strategy Inputs") dema_b = input.bool(true, "Use DEMA Filter", group = "Strategy Inputs") st_sig = input.bool(false, "Take Every Supertrend Signal" , group = "Strategy Inputs") take_p = input.bool(true, "Stop Loss at Supertrend", group = "Strategy Inputs") din_tp = input.bool(false, "2 Steps Take Profit", group = "Strategy Inputs") move_sl = input.bool(true, "Move SL", group = "Strategy Inputs") sl_atr = input.float(2.5, "Stop Loss ATR Multiplier", group = "Strategy Inputs") tp_atr = input.float(4, "Take Profit ATR Multiplier", group = "Strategy Inputs") din_tp_qty = input.int(50, "2 Steps TP qty%", group = "Strategy Inputs") dema_a_filter = input.float(0, "DEMA Angle Threshold (+ & -)", group = "Strategy Inputs") dema_a_look = input.int(1, "DEMA Angle Lookback", group = "Strategy Inputs") dr_test = input.string("Backtest", "Testing", options = ["Backtest", "Forwardtest", "All"], group = "Strategy Inputs") not_in_trade = strategy.position_size == 0 //Backtesting date range start_year = input.int(2021, "Backtesting start year", group = "BT Date Range") start_month = input.int(1, "Backtesting start month", group = "BT Date Range") start_date = input.int(1, "Backtesting start day", group = "BT Date Range") end_year = input.int(2021, "Backtesting end year", group = "BT Date Range") end_month = input.int(12, "Backtesting end month", group = "BT Date Range") end_date = input.int(31, "Backtesting end day", group = "BT Date Range") bt_date_range = (time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0)) and (time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0)) //Forward testing date range start_year_f = input.int(2022, "Forwardtesting start year", group = "FT Date Range") start_month_f = input.int(1, "Forwardtesting start month", group = "FT Date Range") start_date_f = input.int(1, "Forwardtesting start day", group = "FT Date Range") end_year_f = input.int(2022, "Forwardtesting end year", group = "FT Date Range") end_month_f = input.int(03, "Forwardtesting end month", group = "FT Date Range") end_date_f = input.int(26, "Forwardtesting end day", group = "FT Date Range") ft_date_range = (time >= timestamp(syminfo.timezone, start_year_f, start_month_f, start_date_f, 0, 0)) and (time < timestamp(syminfo.timezone, end_year_f, end_month_f, end_date_f, 0, 0)) //date condition date_range_cond = if dr_test == "Backtest" bt_date_range else if dr_test == "Forwardtest" ft_date_range else true //INDICATORS //PIVOT SUPERTREND prd = input.int(2, "PVT ST Pivot Point Period", group = "Pivot Supertrend") Factor=input.float(3, "PVT ST ATR Factor", group = "Pivot Supertrend") Pd=input.int(9 , "PVT ST ATR Period", group = "Pivot Supertrend") // get Pivot High/Low float ph = ta.pivothigh(prd, prd) float pl = ta.pivotlow(prd, prd) // calculate the Center line using pivot points var float center = na float lastpp = ph ? ph : pl ? pl : na if lastpp if na(center) center := lastpp else //weighted calculation center := (center * 2 + lastpp) / 3 // upper/lower bands calculation Up = center - (Factor * ta.atr(Pd)) Dn = center + (Factor * ta.atr(Pd)) // get the trend float TUp = na float TDown = na Trend = 0 TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up TDown := close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1) Trailingsl = Trend == 1 ? TUp : TDown // check and plot the signals bsignal = Trend == 1 and Trend[1] == -1 ssignal = Trend == -1 and Trend[1] == 1 //get S/R levels using Pivot Points float resistance = na float support = na support := pl ? pl : support[1] resistance := ph ? ph : resistance[1] //DEMA dema_ln = input.int(200, "DEMA Len", group = 'D-EMAs') dema_src = input.source(close, "D-EMAs Source", group = 'D-EMAs') ema_fd = ta.ema(dema_src, dema_ln) dema = (2*ema_fd)-(ta.ema(ema_fd,dema_ln)) //EMA ema1_l = input.int(21, "EMA 1 Len", group = 'D-EMAs') ema2_l = input.int(50, "EMA 2 Len", group = 'D-EMAs') ema3_l = input.int(200, "EMA 3 Len", group = 'D-EMAs') ema1 = ta.ema(dema_src, ema1_l) ema2 = ta.ema(dema_src, ema2_l) ema3 = ta.ema(dema_src, ema3_l) //Supertrend Periods = input.int(21, "ST ATR Period", group = "Normal Supertrend") src_st = input.source(hl2, "ST Supertrend Source", group = "Normal Supertrend") Multiplier = input.float(2.0 , "ST ATR Multiplier", group = "Normal Supertrend") changeATR= true atr2 = ta.sma(ta.tr, Periods) atr3= changeATR ? ta.atr(Periods) : atr2 up=src_st-(Multiplier*atr3) up1 = nz(up[1],up) up := close[1] > up1 ? math.max(up,up1) : up dn=src_st+(Multiplier*atr3) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend buySignal = trend == 1 and trend[1] == -1 sellSignal = trend == -1 and trend[1] == 1 //ATR atr = ta.atr(14) ///CONDITIONS //BUY /// ema simple ema_cond_b = if ema_b ema1 > ema2 and ema2 > ema3 else true ///ema angle dema_angle_rad = math.atan((dema - dema[dema_a_look])/0.0001) dema_angle = dema_angle_rad * (180/math.pi) dema_ang_cond_b = if ema_b_ang if dema_angle >= dema_a_filter true else false else true ///ema distance dema_cond_b = if dema_b close > dema else true //supertrends ///if pivot buy sig or (st buy sig and pivot. trend = 1) pvt_cond_b = bsignal st_cond_b = if st_sig buySignal and Trend == 1 else false st_entry_cond = pvt_cond_b or st_cond_b ///stop loss tp sl_b = if take_p if trend == 1 up else close - (atr * sl_atr) else close - (atr * sl_atr) tp_b = if take_p if trend == 1 close + ((close - up) * (tp_atr / sl_atr)) else close + (atr * tp_atr) else close + (atr * tp_atr) //position size init_cap = strategy.equity pos_size_b = math.round((init_cap * .01) / (close - sl_b)) ent_price = strategy.opentrades.entry_price(strategy.opentrades - 1) var sl_b_n = 0.0 var tp_b_n = 0.0 longCondition = (ema_cond_b and dema_cond_b and dema_ang_cond_b and st_entry_cond and date_range_cond and not_in_trade) if (longCondition) strategy.entry("Long", strategy.long, qty = pos_size_b) sl_b_n := sl_b tp_b_n := tp_b ent_price := strategy.opentrades.entry_price(strategy.opentrades - 1) if (up[1] < ent_price and up >= ent_price and trend[0] == 1) if din_tp strategy.close("Long", qty_percent = din_tp_qty) if move_sl sl_b_n := ent_price strategy.exit("Exit", "Long", stop =sl_b_n, limit = tp_b_n) //sell ///ema simple ema_cond_s = if ema_b ema1 < ema2 and ema2 < ema3 else true //ema distance dema_cond_s = if dema_b close < dema else true //dema angle dema_ang_cond_s = if ema_b_ang if dema_angle <= (dema_a_filter * -1) true else false else true //supertrends ///if pivot buy sig or (st buy sig and pivot. trend = 1) pvt_cond_s = ssignal st_cond_s = if st_sig sellSignal and Trend == -1 else false st_entry_cond_s = pvt_cond_s or st_cond_s ///stop loss tp sl_s = if take_p if trend == -1 dn else close + (atr * sl_atr) else close + (atr * sl_atr) tp_s = if take_p if trend == -1 close - ((dn - close) * (tp_atr / sl_atr)) else close - (atr * tp_atr) else close - (atr * tp_atr) shortCondition = (ema_cond_s and dema_cond_s and dema_ang_cond_s and st_entry_cond_s and not_in_trade) pos_size_s = math.round((init_cap * .01) / (sl_s - close)) var sl_s_n = 0.0 var tp_s_n = 0.0 if (shortCondition) strategy.entry("Short", strategy.short, qty = pos_size_s) sl_s_n := sl_s tp_s_n := tp_s if (dn[1] > ent_price and dn <= ent_price and trend[0] == -1) if din_tp strategy.close("Short", qty_percent = din_tp_qty) if move_sl sl_s_n := ent_price strategy.exit("Exit", "Short", stop = sl_s_n, limit = tp_s_n)