یہ حکمت عملی دو اہم تکنیکی اشارے کو جوڑتی ہے: اوما اشارے اور اپولو اشارے طویل اور مختصر پوزیشنوں کی ڈبل ریل ٹریڈنگ کو نافذ کرنے کے لئے۔ اس کا بنیادی خیال یہ ہے کہ جب درمیانی اور طویل مدتی رجحان کو طویل پوزیشنوں کو قائم کرنے کے لئے تیزی سے سمجھا جاتا ہے تو قلیل مدتی واپسی کے مواقع تلاش کرنا ہے۔ جب درمیانی اور طویل مدتی رجحان کو bearish سمجھا جاتا ہے تو ، یہ مختصر مدت کی بازیافت میں قلیل مدتی پوزیشنوں کو قائم کرنے کے مواقع تلاش کرتا ہے۔
یہ حکمت عملی درمیانی اور طویل مدتی رجحان کا تعین کرنے کے لئے 50 دن اور 200 دن کے چلنے والے اوسط کا استعمال کرتی ہے۔ 200 دن کی لائن سے اوپر 50 دن کی لائن ایک تیزی کا رجحان ظاہر کرتی ہے ، اور اس کے برعکس ایک bearish رجحان کے لئے۔
اس کے بعد ، حکمت عملی میں قلیل مدتی قیمتوں میں الٹ جانے کے مواقع تلاش کرنے کے لئے اوما اشارے کا استعمال کیا جاتا ہے۔ اوما اشارے میں %K اور %D لائنیں شامل ہیں ، جو RSI اشارے کے نتائج ہیں جو ایک سادہ حرکت پذیر اوسط کے ذریعہ ہموار ہیں۔ جب %K overbought علاقے (80 سے اوپر) سے %D سے نیچے ٹوٹ جاتا ہے تو ، اس سے یہ ظاہر ہوتا ہے کہ قیمت overbought حالت سے نیچے کی طرف گھوم رہی ہے۔ جب %K oversold علاقے (20 سے نیچے) سے %D سے اوپر ٹوٹ جاتا ہے تو ، اس سے یہ ظاہر ہوتا ہے کہ قیمت oversold علاقے سے واپس لوٹ رہی ہے ، جو ایک طویل موقع پیش کرتی ہے۔
اس کے علاوہ ، غلط سگنلز کو مزید فلٹر کرنے کے لئے ، اس حکمت عملی میں اپولو اشارے کو بھی شامل کیا گیا ہے۔ اپولو اشارے میں K لائن کی %D اقدار کے انتہائی نکات دکھائے جاتے ہیں۔ جب %K ایک نئی کم ہوتی ہے تو ، اس کا مطلب یہ ہے کہ ری باؤنڈ کی طاقت نسبتا weak کمزور ہوتی ہے۔ جب یہ ایک نئی اونچائی بنتی ہے تو ، اس کا مطلب یہ ہے کہ ری باؤنڈ کی طاقت نسبتا strong مضبوط ہوتی ہے۔ اوما اشارے کے اشاروں کے ساتھ مل کر ، اس سے اندراج کی درستگی میں مزید بہتری آسکتی ہے۔
خاص طور پر ، ایک اپ ٹرینڈ میں ، یہ حکمت عملی ایک ہی وقت میں نئی اعلی نقطہ کی معلومات کی جانچ کرے گی جب اوما اشارے سے زیادہ خریدنے والے علاقے سے نیچے کا موقع ظاہر ہوتا ہے ، تاکہ اچھال کی طاقت کی تصدیق کی جاسکے۔ نیچے کے رجحان میں ، جب اوما اشارے سے زیادہ فروخت والے علاقے سے ایک مختصر موقع عبور ہوتا ہے ، تو یہ حکمت عملی ری باؤنڈ کی طاقت کی کمزوری کی تصدیق کے لئے ایک ہی وقت میں نئی کم نقطہ کی معلومات کی جانچ کرے گی۔
مذکورہ بالا عمل کے ذریعے، یہ حکمت عملی مستحکم دوہری ریل تجارتی نظام کی تعمیر کے لئے درمیانی اور طویل مدتی رجحان کی تشخیص اور قلیل مدتی الٹ اشارے کی طاقتوں کا مکمل فائدہ اٹھاتی ہے۔
یہ حکمت عملی رجحان ٹریڈنگ اور انسداد رجحان ٹریڈنگ کو یکجا کرتی ہے جس میں رجحان کی تشخیص اور الٹ اشارے دونوں کا استعمال ہوتا ہے ، جس سے ایک مستحکم ہائبرڈ ٹریڈنگ فریم ورک بنتا ہے۔
ڈبل انڈیکیٹر فلٹرنگ کے ذریعے غلط سگنل تناسب کو کم کیا جاسکتا ہے اور سگنلز کی وشوسنییتا کو بہتر بنایا جاسکتا ہے۔
حکمت عملی کے پیرامیٹرز نسبتا آسان ہیں، سمجھنے اور بہتر بنانے میں آسان ہیں، مقداری تجارت کے لئے موزوں ہیں.
حکمت عملی کی کارکردگی مضبوط ہے، اچھی جیت کی شرح اور خطرہ-انعامی تناسب کی خصوصیات کے ساتھ.
طویل اور مختصر کے لئے دوہری ریلوں کو اپنانے سے ، تجارت کے مواقع ایک ہی سمت تک محدود ہونے کے بغیر مستقل طور پر حاصل کیے جاسکتے ہیں۔
ایک الٹ پلٹ کی حکمت عملی کے طور پر، جب رجحان بدل جاتا ہے تو مسلسل نقصانات ہوسکتے ہیں.
اس حکمت عملی کے لیے تاجر کو جذباتی طور پر قابو پانے کی ضرورت ہوتی ہے، کیونکہ تاجر کو ایک خاص سطح پر ڈراؤونگ کا سامنا کرنا پڑتا ہے۔
کچھ پیرامیٹرز جیسے حرکت پذیر اوسط ادوار میں ایک خاص ذہنیت شامل ہوتی ہے اور انہیں بیک ٹسٹنگ اور اصلاح کے ذریعے طے کرنے کی ضرورت ہوتی ہے۔
اوما اور اپولو دونوں اشارے غیر معمولی اتار چڑھاؤ کے لئے کچھ حساسیت رکھتے ہیں، اور انتہائی مارکیٹ کے حالات میں ناکام ہوسکتے ہیں.
یہ حکمت عملی رینج سے منسلک اتار چڑھاؤ والے بازاروں کے لئے زیادہ موزوں ہے، اور مضبوط رجحانات والے بازاروں میں کم کارکردگی کا مظاہرہ کرسکتا ہے۔
رجحان فلٹرنگ کو متعارف کرانے کے لئے چلتی اوسط مدت کو مناسب طریقے سے ایڈجسٹ کرکے خطرات کو کم کیا جاسکتا ہے ، اور اسٹاپ نقصان / منافع حاصل کریں۔ جب مارکیٹ مضبوط رجحان بن جاتی ہے تو ، اس ماحول میں تجارت سے بچنے کے لئے حکمت عملی کو معطل کرنے پر غور کریں۔
پیرامیٹرز کی بہتر ترتیبات حاصل کرنے کے لئے مختلف پیرامیٹرز کے مجموعوں کا تجربہ کریں، مثال کے طور پر EWMA ہموار حرکت پذیر اوسط کا استعمال کرتے ہوئے.
حجم یا BV اشارے شامل کریں تاکہ اختلافات کا اندازہ لگایا جاسکے جو سگنل کی وشوسنییتا کی تصدیق میں مدد کرسکتے ہیں۔
VIX جیسے اتار چڑھاؤ اشاریہ جات کو مانیٹرنگ اشارے کے طور پر شامل کریں، جب مارکیٹ گھبراہٹ میں ہے تو پوزیشن کا سائز کم کریں.
اسٹاپ نقصان / منافع لینے کی حکمت عملیوں کو بہتر بنائیں ، جیسے متحرک اے ٹی آر اسٹاپ نقصان کو اپنانا۔
پیرامیٹرز کی ترتیبات کو متحرک طور پر بہتر بنانے کے لئے مشین لرننگ الگورتھم متعارف کروانا۔
سگنل کے معیار کو بہتر بنانے کے لئے کثیر عنصر ماڈل شامل کریں.
مجموعی طور پر ، یہ ایک مستحکم اور موثر مقداری تجارتی حکمت عملی ہے۔ اس میں رجحان کی تشخیص اور الٹ پلٹ کے اشارے ملتے ہیں ، اور اوما اور اپولو اشارے کا استعمال کرتے ہوئے دوہری توثیق کو اپناتا ہے ، جو قلیل مدتی قیمت کی الٹ پلٹ کے مواقع کو مؤثر طریقے سے ظاہر کرسکتا ہے۔ خالص رجحان یا الٹ پلٹ کے نظام کے استعمال کے مقابلے میں ، یہ حکمت عملی کی شکل اعلی درجے کی کھوج کنٹرول کے ساتھ زیادہ مضبوط ہے ، اور یہ ایک تجویز کردہ مقداری تجارتی حکمت عملی ہے۔ یقینا ، صارفین کو بھی اس میں شامل خطرات سے آگاہ ہونے کی ضرورت ہے ، اور خطرات کو کنٹرول کرنے اور بہترین کارکردگی حاصل کرنے کے لئے پیرامیٹر کی اصلاح ، اسٹاپ نقصان / منافع حاصل کرنے ، مارکیٹ کے نظام کی نشاندہی وغیرہ کا استعمال کریں۔
/*backtest start: 2023-10-25 00:00:00 end: 2023-10-28 00:00:00 period: 5m 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/ // © PtGambler //@version=5 strategy("2 EMA + Stoch RSI + ATR [Pt]", shorttitle = "2EMA+Stoch+ATR", overlay=true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills = false, max_bars_back = 500) // ********************************** Trade Period / Strategy Setting ************************************** startY = input(title='Start Year', defval=2011, group = "Backtesting window") startM = input.int(title='Start Month', defval=1, minval=1, maxval=12, group = "Backtesting window") startD = input.int(title='Start Day', defval=1, minval=1, maxval=31, group = "Backtesting window") finishY = input(title='Finish Year', defval=2050, group = "Backtesting window") finishM = input.int(title='Finish Month', defval=12, minval=1, maxval=12, group = "Backtesting window") finishD = input.int(title='Finish Day', defval=31, minval=1, maxval=31, group = "Backtesting window") timestart = timestamp(startY, startM, startD, 00, 00) timefinish = timestamp(finishY, finishM, finishD, 23, 59) // ****************************************************************************************** group_ema = "EMA" group_stoch = "Stochastic RSI" group_atr = "ATR Stoploss Finder" // ----------------------------------------- 2 EMA ------------------------------------- ema1_len = input.int(50, "EMA Length 1", group = group_ema) ema2_len = input.int(200, "EMA Length 2", group = group_ema) ema1 = ta.ema(close, ema1_len) ema2 = ta.ema(close, ema2_len) plot(ema1, "ema1", color.white, linewidth = 2) plot(ema2, "ema2", color.orange, linewidth = 2) ema_bull = ema1 > ema2 ema_bear = ema1 < ema2 // -------------------------------------- Stochastic RSI ----------------------------- smoothK = input.int(3, "K", minval=1, group = group_stoch) smoothD = input.int(3, "D", minval=1, group = group_stoch) lengthRSI = input.int(14, "RSI Length", minval=1, group = group_stoch) lengthStoch = input.int(14, "Stochastic Length", minval=1, group = group_stoch) src = close rsi1 = ta.rsi(src, lengthRSI) k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = ta.sma(k, smoothD) var trigger_stoch_OB = k > 80 var trigger_stoch_OS = k < 20 stoch_crossdown = ta.crossunder(k, d) stoch_crossup = ta.crossover(k, d) P_hi = ta.pivothigh(k,1,1) P_lo = ta.pivotlow(k,1,1) previous_high = ta.valuewhen(P_hi, k, 1) previous_low = ta.valuewhen(P_lo, k, 1) recent_high = ta.valuewhen(P_hi, k, 0) recent_low = ta.valuewhen(P_lo, k, 0) // --------------------------------------- ATR stop loss finder ------------------------ length = input.int(title='Length', defval=14, minval=1, group = group_atr) smoothing = input.string(title='Smoothing', defval='EMA', options=['RMA', 'SMA', 'EMA', 'WMA'], group = group_atr) m = input.float(0.7, 'Multiplier', step = 0.1, group = group_atr) src1 = input(high, "Source for upper band", group = group_atr) src2 = input(low, "Source for lower band", group = group_atr) showatr = input.bool(true, 'Show ATR Bands', group = group_atr) collong = input.color(color.purple, 'Long ATR SL', inline='1', group = group_atr) colshort = input.color(color.purple, 'Short ATR SL', inline='2', group = group_atr) ma_function(source, length) => if smoothing == 'RMA' ta.rma(source, length) else if smoothing == 'SMA' ta.sma(source, length) else if smoothing == 'EMA' ta.ema(source, length) else ta.wma(source, length) a = ma_function(ta.tr(true), length) * m up = ma_function(ta.tr(true), length) * m + src1 down = src2 - ma_function(ta.tr(true), length) * m p1 = plot(showatr ? up : na, title='ATR Short Stop Loss', color=colshort) p2 = plot(showatr ? down : na, title='ATR Long Stop Loss', color=collong) // ******************************* Profit Target / Stop Loss ********************************************* RR = input.float(2.0, "Reward to Risk ratio (X times SL)", step = 0.1, group = "Profit Target") var L_PT = 0.0 var S_PT = 0.0 var L_SL = 0.0 var S_SL = 0.0 BSLE = ta.barssince(strategy.opentrades.entry_bar_index(0) == bar_index) if strategy.position_size > 0 and BSLE == 1 L_PT := close + (close-down)*RR L_SL := L_SL[1] S_PT := close - (up - close)*RR S_SL := up else if strategy.position_size < 0 and BSLE == 1 S_PT := close - (up - close)*RR S_SL := S_SL[1] L_PT := close + (close-down)*RR L_SL := down else if strategy.position_size != 0 L_PT := L_PT[1] S_PT := S_PT[1] else L_PT := close + (close-down)*RR L_SL := down S_PT := close - (up - close)*RR S_SL := up entry_line = plot(strategy.position_size != 0 ? strategy.opentrades.entry_price(0) : na, "Entry Price", color.white, linewidth = 1, style = plot.style_linebr) L_PT_line = plot(strategy.position_size > 0 and BSLE > 0 ? L_PT : na, "L PT", color.green, linewidth = 2, style = plot.style_linebr) S_PT_line = plot(strategy.position_size < 0 and BSLE > 0 ? S_PT : na, "S PT", color.green, linewidth = 2, style = plot.style_linebr) L_SL_line = plot(strategy.position_size > 0 and BSLE > 0 ? L_SL : na, "L SL", color.red, linewidth = 2, style = plot.style_linebr) S_SL_line = plot(strategy.position_size < 0 and BSLE > 0 ? S_SL : na, "S SL", color.red, linewidth = 2, style = plot.style_linebr) fill(L_PT_line, entry_line, color = color.new(color.green,90)) fill(S_PT_line, entry_line, color = color.new(color.green,90)) fill(L_SL_line, entry_line, color = color.new(color.red,90)) fill(S_SL_line, entry_line, color = color.new(color.red,90)) // ---------------------------------- strategy setup ------------------------------------------------------ var L_entry_trigger1 = false var S_entry_trigger1 = false L_entry_trigger1 := ema_bull and close < ema1 and k < 20 and strategy.position_size == 0 S_entry_trigger1 := ema_bear and close > ema1 and k > 80 and strategy.position_size == 0 L_entry1 = L_entry_trigger1[1] and stoch_crossup and recent_low > previous_low S_entry1 = S_entry_trigger1[1] and stoch_crossdown and recent_high < previous_high //debugging plot(L_entry_trigger1[1]?1:0, "L Entry Trigger") plot(stoch_crossup?1:0, "Stoch Cross Up") plot(recent_low > previous_low?1:0, "Higher low") plot(S_entry_trigger1[1]?1:0, "S Entry Trigger") plot(stoch_crossdown?1:0, "Stoch Cross down") plot(recent_high < previous_high?1:0, "Lower high") if L_entry1 strategy.entry("Long", strategy.long) if S_entry1 strategy.entry("Short", strategy.short) strategy.exit("Exit Long", "Long", limit = L_PT, stop = L_SL, comment_profit = "Exit Long, PT hit", comment_loss = "Exit Long, SL hit") strategy.exit("Exit Short", "Short", limit = S_PT, stop = S_SL, comment_profit = "Exit Short, PT hit", comment_loss = "Exit Short, SL hit") //resetting triggers L_entry_trigger1 := L_entry_trigger1[1] ? L_entry1 or ema_bear or S_entry1 ? false : true : L_entry_trigger1 S_entry_trigger1 := S_entry_trigger1[1] ? S_entry1 or ema_bull or L_entry1 ? false : true : S_entry_trigger1 //Trigger zones bgcolor(L_entry_trigger1 ? color.new(color.green ,90) : na) bgcolor(S_entry_trigger1 ? color.new(color.red,90) : na)