یہ حکمت عملی رجحان کی سمت کا تعین کرنے کے لئے ہل موونگ اوسط کا استعمال کرتی ہے اور اسے انٹری سگنلز کے لئے اسٹوکاسٹک آر ایس آئی کے ساتھ جوڑتی ہے۔ جب ایچ ایم اے کی درمیانی لائن نچلی لائن سے اوپر عبور کرتی ہے تو لانگ ٹریڈز کی جاتی ہیں ، اور جب یہ اوپری لائن سے نیچے عبور کرتی ہے تو شارٹ ٹریڈز کی جاتی ہیں۔ اس کے علاوہ ، جب اسٹوکاسٹک آر ایس آئی کی لائن اوور بک زون سے ڈی لائن سے نیچے عبور کرتی ہے تو لانگ ٹریڈز کی جاتی ہیں ، جبکہ اوور سیل زون سے اوپر کی کراسنگ پر شارٹ ٹریڈز کی جاتی ہیں۔
اس حکمت عملی کے اہم اجزاء رجحان کی سمت کے لئے ہل چلتی اوسط اور ٹائمنگ انٹری سگنل کے لئے اسٹوکاسٹک آر ایس آئی ہیں۔
سب سے پہلے ، ہل ایم اے حساب کتاب میں درمیانی ، اوپری اور نچلی بینڈ کے لئے فارمولے شامل ہیں۔ درمیانی بینڈ میں ایک وزن دار حرکت پذیر اوسط استعمال ہوتا ہے ، جبکہ اوپری اور نچلی بینڈ درمیانی لائن سے آفسیٹ ہوتے ہیں۔
رجحان کی سمت وسط بینڈ اور اوپری / نچلی بینڈ کے مابین تعلقات سے طے ہوتی ہے۔ وسط لائن کا اوپر والا کراس اوور خریدنے کے دباؤ اور ایک اپ ٹرینڈ کی نشاندہی کرتا ہے ، جبکہ نیچے والا کراس اوور فروخت کے دباؤ اور نیچے کے رجحان میں اضافہ کی نشاندہی کرتا ہے۔
اسٹوکاسٹک آر ایس آئی کا حساب بھی متعین کیا گیا ہے ، جس میں ہموار K اور D اقدار شامل ہیں۔ K قدر RSI پر SMA ہموار کا استعمال کرتی ہے ، جبکہ D قدر K پر دوسرا SMA ہموار ہے۔
رجحان کی سمت کا تعین کرنے کے بعد ، جب اسٹاک آر ایس آئی کی لائن اپ ٹرینڈ کے دوران اوور بُک زون سے ڈی لائن سے نیچے عبور کرتی ہے تو طویل تجارت کی جاتی ہے۔ شارٹ ٹریڈز تب کیے جاتے ہیں جب اسٹاک آر ایس آئی کی لائن ڈاؤن ٹرینڈ کے دوران اوور سیل زون سے ڈی لائن سے اوپر عبور کرتی ہے۔
ہل ٹرینڈ فلٹر اور اسٹاک آر ایس آئی اوور بک / اوور سیل تجزیہ کو یکجا کرنے سے تجارت میں داخل ہونے کے لئے ایک مضبوط کثیر عنصر نقطہ نظر فراہم ہوتا ہے۔
اس حکمت عملی کے اہم فوائد یہ ہیں:
ہیل ایم اے مؤثر طریقے سے مارکیٹ کی مجموعی رجحان کی سمت کی نشاندہی کرتا ہے.
اسٹاک آر ایس آئی وقت کے اندراجات پر زیادہ خرید / زیادہ فروخت کی سطح کا تعین کرتا ہے۔
دونوں کو ایک ساتھ استعمال کرنے سے غلط سگنل کم ہوتے ہیں اور طاقت کو یکجا کرتے ہیں۔
مختلف علامتوں اور وقت کے فریم کے لئے پیرامیٹرز کو بہتر بنانے کے لئے لچکدار.
ہول بینڈ ممکنہ متحرک حمایت اور مزاحمت کی نشاندہی کرتے ہیں.
اس میں پوزیشن سائزنگ اور رسک مینجمنٹ کے قواعد شامل ہیں۔
کروز ڈیٹا ڈکشنری کے ذریعے کثیر اثاثہ صلاحیت.
منافع میں اضافہ اور استعمال کو کم کرنے کے لئے بہتر اجزاء.
غور کرنے کے لیے کچھ خطرات:
ہل ایم اے میں تاخیر ہے اور رجحان کی تبدیلیوں کو نظر انداز کر سکتا ہے.
اگر پیرامیٹرز کو بہتر نہیں کیا جاتا ہے تو اسٹاک آر ایس آئی زیادہ سگنل پیدا کرسکتا ہے۔
ہل اور اسٹوک پیرامیٹرز کے درمیان عدم مطابقت خراب سگنل کا سبب بن سکتی ہے.
ہول بینڈ بہت وسیع یا تنگ سگنل کی کیفیت کو متاثر کرے گا.
حالیہ غیر مستحکم مارکیٹوں نے درمیانی / طویل مدتی اشارے کو چیلنج کیا ہے۔
ہل اور اسٹاک کے درمیان ڈیٹا کی عدم مطابقت غلط سگنل کا سبب بنتا ہے.
ہل کی طرف سے نہیں پکڑے جانے والے تیز رجحان کی تبدیلی نقصانات کا سبب بن سکتی ہے.
متعدد ٹائم فریم اور علامتوں پر توسیع ٹیسٹنگ کی ضرورت ہے.
ان مسائل سے نمٹنے کے کچھ طریقے:
زیادہ سے زیادہ رجحان حساسیت کے لئے ہول ایم اے کی لمبائی کو کم کریں.
غلط کراسز کو فلٹر کرنے کے لئے اسٹوک آر ایس آئی کو بہتر بنائیں.
بہترین ہول بینڈ چینل کی چوڑائی تلاش کریں.
MACD جیسے اضافی تصدیق کرنے والے اشارے شامل کریں۔
خطرے کو کنٹرول کرنے کے لئے سٹاپ نقصان کی حکمت عملی شامل کریں.
اس حکمت عملی کو بہتر بنانے کے کچھ طریقے:
مضبوطی کی تصدیق کے لئے مختلف وقت کے فریموں میں زیادہ علامتوں پر ٹیسٹ کریں.
سٹاپ نقصان میکینکس شامل کریں جیسے ٹریلنگ اسٹاپ یا چلتی اوسط.
داخلہ قوانین کو بہتر بنائیں، جھوٹے سگنل کو کم کرنے کے لئے سخت فلٹرز مقرر کریں.
حمایت اور مزاحمت کو بہتر طور پر بیان کرنے کے لئے ہول بینڈ کا استعمال کرتے ہوئے دریافت کریں.
سگنل کی وشوسنییتا کو بہتر بنانے کے لئے اضافی تصدیق کرنے والے اشارے کا جائزہ لیں۔
لمبائی، overbought / oversold سطحوں، وغیرہ کے لئے پیرامیٹر کی اصلاح
بہتر پوزیشن سائزنگ اور رسک مینجمنٹ متعارف کروانا۔
لائیو ٹریڈنگ کے لئے ضروری اندراج، سٹاپ نقصان اور منافع لینے کے قواعد شامل کریں.
بہتر رجحان حساسیت کے لئے ہول کی لمبائی کو بہتر بنائیں.
سگنل کے معیار کو بہتر بنانے کے لئے فلٹرز یا تصدیق کرنے والے اشارے شامل کریں.
متحرک حمایت / مزاحمت کی سطح کے لئے hull بینڈ کی تلاش.
اسٹاک آر ایس آئی پیرامیٹرز کو بہتر بنائیں جیسے لمبائی، زیادہ خرید/زیادہ فروخت۔
اعلی درجے کی پوزیشن سائزنگ اور رسک مینجمنٹ کو نافذ کریں۔
مجموعی طور پر یہ رجحان اور رفتار کو جوڑنے کا ایک موثر طریقہ ہے۔ تاہم ، اندرونی اشارے کی کمزوریوں کا مطلب یہ ہے کہ سگنلز پر مزید اصلاح اور رسک کنٹرول کے بغیر اندھا اعتماد نہیں کیا جانا چاہئے۔ بہتر پیرامیٹرز ، اضافی فلٹرز اور اسٹاپ نقصانات کے ساتھ ، یہ حکمت عملی صلاحیت پیش کرتی ہے۔ پیرامیٹرز ، رسک مینجمنٹ اور پوزیشن سائزنگ کے لئے زیادہ وسیع جانچ کی ضرورت ہے تاکہ اسے براہ راست تجارت کے لئے مضبوط اور منافع بخش بنایا جاسکے۔
/*backtest start: 2023-10-16 00:00:00 end: 2023-10-17 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //Basic Hull Ma Pack tinkered by InSilico //Converted to Strategy by DashTrader strategy("Hull Suite + Stoch RSI Strategy v1.1", overlay=true, pyramiding=1, initial_capital=100, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.023) strat_dir_input = input(title="Strategy Direction", defval="all", options=["long", "short", "all"]) strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all strategy.risk.allow_entry_in(strat_dir_value) ////////////////////////////////////////////////////////////////////// // Testing Start dates testStartYear = input(2016, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) //Stop date if you want to use a specific range of dates testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) stoch_upper_input = input(88, "Stoch Upper Threshold", type=input.float) stoch_lower_input = input(5, "Stoch Lower Threshold", type=input.float) sl = input(0.7, "SL %", type=input.float, step=0.1) tp = input(2.1, "TP %", type=input.float, step=0.1) // slowEMA = ema(close, slowEMA_input) // vwap = vwap(close) // rsi = rsi(close, rsi_input) // stoch rsi smoothK = 3 smoothD = 3 lengthRSI = 14 lengthStoch = 14 rsi1 = rsi(close, 14) k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = sma(k, smoothD) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false // Component Code Stop ////////////////////////////////////////////////////////////////////// //INPUT src = input(close, title="Source") modeSwitch = input("Hma", title="Hull Variation", options=["Hma", "Thma", "Ehma"]) length = input(180, title="Length(180-200 for floating S/R , 55 for swing entry)") switchColor = input(true, "Color Hull according to trend?") candleCol = input(false,title="Color candles based on Hull's Trend?") visualSwitch = input(true, title="Show as a Band?") thicknesSwitch = input(1, title="Line Thickness") transpSwitch = input(40, title="Band Transparency",step=5) //FUNCTIONS //HMA HMA(_src, _length) => wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length))) //EHMA EHMA(_src, _length) => ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length))) //THMA THMA(_src, _length) => wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length) //SWITCH Mode(modeSwitch, src, len) => modeSwitch == "Hma" ? HMA(src, len) : modeSwitch == "Ehma" ? EHMA(src, len) : modeSwitch == "Thma" ? THMA(src, len/2) : na //OUT HULL = Mode(modeSwitch, src, length) MHULL = HULL[0] SHULL = HULL[2] //COLOR hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800 //PLOT ///< Frame Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50) Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50) ///< Ending Filler fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch) ///BARCOLOR barcolor(color = candleCol ? (switchColor ? hullColor : na) : na) bgcolor(color = k < stoch_lower_input and crossover(k, d) ? color.green : na) bgcolor(color = d > stoch_upper_input and crossover(d, k) ? color.red : na) notInTrade = strategy.position_size == 0 if notInTrade and HULL[0] > HULL[2] and testPeriod() and k < stoch_lower_input and crossover(k, d) // if HULL[0] > HULL[2] and testPeriod() stopLoss = close * (1 - sl / 100) profit25 = close * (1 + (tp / 100) * 0.25) profit50 = close * (1 + (tp / 100) * 0.5) takeProfit = close * (1 + tp / 100) strategy.entry("long", strategy.long, alert_message="buy") strategy.exit("exit long 25%", "long", stop=stopLoss, limit=profit25, qty_percent=25, alert_message="profit_25") strategy.exit("exit long 50%", "long", stop=stopLoss, limit=profit50, qty_percent=25, alert_message="profit_50") strategy.exit("exit long", "long", stop=stopLoss, limit=takeProfit) // line.new(bar_index, profit25, bar_index + 4, profit25, color=color.green) // line.new(bar_index, profit50, bar_index + 4, profit50, color=color.green) // box.new(bar_index, stopLoss, bar_index + 4, close, border_color=color.red, bgcolor=color.new(color.red, 80)) // box.new(bar_index, close, bar_index + 4, takeProfit, border_color=color.green, bgcolor=color.new(color.green, 80)) if notInTrade and HULL[0] < HULL[2] and testPeriod() and d > stoch_upper_input and crossover(d, k) // if HULL[0] < HULL[2] and testPeriod() stopLoss = close * (1 + sl / 100) profit25 = close * (1 - (tp / 100) * 0.25) profit50 = close * (1 - (tp / 100) * 0.5) takeProfit = close * (1 - tp / 100) strategy.entry("short", strategy.short, alert_message="sell") strategy.exit("exit short 25%", "short", stop=stopLoss, limit=profit25, qty_percent=25, alert_message="profit_25") strategy.exit("exit short 50%", "short", stop=stopLoss, limit=profit50, qty_percent=25, alert_message="profit_50") strategy.exit("exit short", "short", stop=stopLoss, limit=takeProfit) // line.new(bar_index, profit25, bar_index + 4, profit25, color=color.green) // line.new(bar_index, profit50, bar_index + 4, profit50, color=color.green) // box.new(bar_index, stopLoss, bar_index + 4, close, border_color=color.red, bgcolor=color.new(color.red, 80)) // box.new(bar_index, close, bar_index + 4, takeProfit, border_color=color.green, bgcolor=color.new(color.green, 80)) // var table winrateDisplay = table.new(position.bottom_right, 1, 1) // table.cell(winrateDisplay, 0, 0, "Winrate: " + tostring(strategy.wintrades / strategy.closedtrades * 100, '#.##')+" %", text_color=color.white)