ملٹی ٹائم فریم موونگ ایوریج کراس اوور حکمت عملی ایک الگورتھم تجارتی حکمت عملی ہے جو رجحان کی سمت کا تعین کرنے کے لئے مختلف ٹائم فریم ادوار کے درمیان منتقل اوسط کراس اوور سگنل کا استعمال کرتی ہے۔ یہ حکمت عملی زیادہ قابل اعتماد تجارتی سگنل پیدا کرنے کے لئے رجحان ، رفتار اور اتار چڑھاؤ کے اشارے کو یکجا کرتی ہے۔
اس حکمت عملی میں مارکیٹ کے رجحان کی سمت کا تعین کرنے کے لئے مختلف ادوار میں سی سی آئی اشارے کا حساب لگایا جاتا ہے ، جو سونے کے صلیب اور موت کے صلیبوں کا پتہ لگانے کے لئے ایم اے سی ڈی سگنلز کے ساتھ مل کر ہوتا ہے ، اور آخر میں اے ٹی آر اشارے کا استعمال کرتے ہوئے اسٹاپ نقصان / منافع حاصل کرنے کی سطح مقرر کرنے کے لئے ہوتا ہے ، تاکہ کم خریدیں اور زیادہ فروخت کریں۔
خاص طور پر ، یہ پہلے 20 پیریڈ سی سی آئی کا حساب لگاتا ہے تاکہ تیزی یا bearish رجحانات کا فیصلہ کیا جاسکے۔ پھر یہ چیک کرتا ہے کہ آیا تجارتی سگنل کی نشاندہی کرنے کے لئے ایم اے سی ڈی لائنیں عبور کررہی ہیں۔ اس کے بعد ، اے ٹی آر کا استعمال منافع میں مقفل کرنے کے لئے ٹریلنگ اسٹاپس پیدا کرنے کے لئے کیا جاتا ہے۔ آخر میں ، تمام سگنل کو انٹری اور آؤٹ پٹ سگنل پیدا کرنے کے لئے متحد کیا جاتا ہے۔
متعدد اشارے کا مجموعہ سگنل کی درستگی کو بہتر بناتا ہے
سی سی آئی، ایم اے سی ڈی اور اے ٹی آر کا امتزاج ٹریڈنگ سگنلز کی وشوسنییتا میں اضافہ کرتا ہے کیونکہ یہ مجموعی طور پر رجحان، رفتار اور اتار چڑھاؤ کا جائزہ لیتا ہے۔
ملٹی ٹائم فریم تجزیہ مارکیٹ کی رفتار کو پکڑتا ہے
طویل مدتی سی سی آئی مجموعی رجحان کو پکڑتا ہے، جبکہ اعلی تعدد MACD مقامی موڑ کے مقامات کو تلاش کرتا ہے، جس سے حکمت عملی کو مارکیٹ میں بڑے اتار چڑھاؤ پر سرمایہ کاری کرنے کی اجازت ملتی ہے.
اے ٹی آر پیچھے رکنے کنٹرول مؤثر طریقے سے خطرہ
اے ٹی آر پر مبنی اسٹاپ نقصان مارکیٹ کی اتار چڑھاؤ کے مطابق ڈھال سکتا ہے ، جبکہ اس کی ٹریلنگ خصوصیت منافع میں مزید تالا لگاتا ہے کیونکہ مارکیٹ سازگار طور پر چلتی ہے۔
محدود اصلاح کی جگہ
زیادہ تر پیرامیٹرز میں باریک باریک ایڈجسٹمنٹ کی جگہ ہوتی ہے ، جس سے کارکردگی کی بوتل کی گلی آسانی سے پہنچ جاتی ہے۔
کمپیوٹنگ بوجھ میں اضافہ
ایک ساتھ چلنے والے متعدد اشارے کمپیوٹنگ بوجھ کو بڑھا سکتے ہیں ، جس سے اعلی تعدد کی تجارت میں تاخیر ہوتی ہے۔
کثرت سے سگنل، محدود خطرے کا کنٹرول
سگنل کثرت سے ہوسکتے ہیں ، جبکہ رسک کنٹرول بنیادی طور پر اے ٹی آر ٹریلنگ اسٹاپ پر انحصار کرتا ہے ، جس میں انتہائی حرکتوں کے خلاف حدود ہیں۔
زیادہ موثر پیرامیٹر ٹیوننگ کے لئے مشین لرننگ کا اطلاق کریں
بایزین اصلاحات، جینیاتی الگورتھم وغیرہ زیادہ ذہین اور موثر پیرامیٹر ٹوننگ کو قابل بناسکتے ہیں۔
موافقت کو بہتر بنانے کے لئے فعال اشارے شامل کریں
دیگر اشارے جیسے اتار چڑھاؤ، حجم، جذبات کو شامل کرنا حکمت عملی کو زیادہ مضبوط اور لچکدار بنا سکتا ہے.
بہتر استحکام کے لیے رسک مینجمنٹ کو مضبوط کرنا
زیادہ سائنسی سٹاپ نقصان کے قوانین کو ڈیزائن کیا جا سکتا ہے، اور پوزیشن سائزنگ جیسے مزید ماڈیول انتہائی واقعات کے خلاف حفاظت میں مدد کرسکتے ہیں.
ملٹی ٹائم فریم موونگ ایوریج کراس اوور حکمت عملی قابل اعتماد رجحان کی گرفتاری اور موثر رسک کنٹرول کے حصول کے لئے سی سی آئی ، ایم اے سی ڈی اور اے ٹی آر کی طاقتوں کا استعمال کرتی ہے۔ یہ درست سگنل پیدا کرنے ، مارکیٹ کی تالوں کو سمجھنے اور رسک کا انتظام کرنے کے لئے رجحان ، رفتار اور اتار چڑھاؤ کا حساب لگاتا ہے۔ اگرچہ پیرامیٹر ٹیوننگ ، کمپیوٹنگ بوجھ اور رسک کنٹرول جیسے کچھ پہلوؤں کو مزید بہتر بنایا جاسکتا ہے ، لیکن یہ ایک ٹھوس الگورتھم ٹریڈنگ سسٹم ہے۔ مشینی سیکھنے ، مزید اشارے اور بہتر رسک مینجمنٹ کا استعمال کرتے ہوئے کچھ بہتری کے ساتھ ، اس کی کارکردگی نئی سطح تک پہنچ سکتی ہے۔
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('smplondonclinic Strategy', shorttitle='SMPLC Strategy', overlay=true, pyramiding = 0, process_orders_on_close = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100) direction = input.string(title='Entry Direction', defval='Long', options=['Long', 'Short', 'Both'],group = "Strategy Entry Direction") TPPerc = input.float(title='Take Profit (%)', minval=0.0, step=0.1, defval=0.5, group='Strategy TP & SL') SLPerc = input.float(title='Stop Loss (%)', minval=0.0, step=0.1, defval=0.5, group='Strategy TP & SL') period = input(20, 'CCI period',group = "TREND MAGIC") coeff = input(1, 'ATR Multiplier',group = "TREND MAGIC") AP = input(5, 'ATR Period',group = "TREND MAGIC") ATR = ta.sma(ta.tr, AP) srctm = close upT = low - ATR * coeff downT = high + ATR * coeff MagicTrend = 0.0 MagicTrend := ta.cci(srctm, period) >= 0 ? upT < nz(MagicTrend[1]) ? nz(MagicTrend[1]) : upT : downT > nz(MagicTrend[1]) ? nz(MagicTrend[1]) : downT color1 = ta.cci(srctm, period) >= 0 ? #0022FC : #FC0400 plot(MagicTrend, color=color1, linewidth=3) tmb = ta.cci(srctm, period) >= 0 and close>MagicTrend tms = ta.cci(srctm, period) <= 0 and close<MagicTrend //MACD res = input.timeframe("", "Indicator TimeFrame", group = "MACD") fast_length = input.int(title="Fast Length", defval=12, group = "MACD") slow_length = input.int(title="Slow Length", defval=26, group = "MACD") src = input.source(title="Source", defval=close, group = "MACD") signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 999, defval = 9, group = "MACD") sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group = "MACD") sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group = "MACD") fast_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)) slow_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)) macd = fast_ma - slow_ma signal = request.security(syminfo.tickerid, res, sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)) hist = macd - signal trend_up = macd > signal trend_dn = macd < signal cross_UP = signal[1] >= macd[1] and signal < macd cross_DN = signal[1] <= macd[1] and signal > macd cross_UP_A = (signal[1] >= macd[1] and signal < macd) and macd > 0 cross_DN_B = (signal[1] <= macd[1] and signal > macd) and macd < 0 //UT Bot srcut = close showut = input.bool(false, 'Show UT Bot Labels', group = "UT BOT") keyvalue = input.float(2, title='Key Vaule. \'This changes the sensitivity\'', step=.5, group = "UT BOT") atrperiod = input(7, title='ATR Period', group = "UT BOT") xATR = ta.atr(atrperiod) nLoss = keyvalue * xATR xATRTrailingStop = 0.0 iff_1 = srcut > nz(xATRTrailingStop[1], 0) ? srcut - nLoss : srcut + nLoss iff_2 = srcut < nz(xATRTrailingStop[1], 0) and srcut[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), srcut + nLoss) : iff_1 xATRTrailingStop := srcut > nz(xATRTrailingStop[1], 0) and srcut[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), srcut - nLoss) : iff_2 pos = 0 iff_3 = srcut[1] > nz(xATRTrailingStop[1], 0) and srcut < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) pos := srcut[1] < nz(xATRTrailingStop[1], 0) and srcut > nz(xATRTrailingStop[1], 0) ? 1 : iff_3 xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue //plot(xATR, color=xcolor, title='Trailing Stop') buy = ta.crossover(srcut, xATRTrailingStop) sell = ta.crossunder(srcut, xATRTrailingStop) barcolor = srcut > xATRTrailingStop plotshape(showut ? buy:na, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(showut ? sell:na, title='Sell', text='Sell', style=shape.labeldown, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) //barcolor(barcolor ? color.green : color.red) goLong = buy and tmb and cross_UP goShort = sell and tms and cross_DN plotshape(goLong, location=location.bottom, style=shape.triangleup, color=color.lime, size=size.small) plotshape(goShort, location=location.top, style=shape.triangledown, color=color.red, size=size.small) percentAsPoints(pcnt) => strategy.position_size != 0 ? math.round(pcnt / 100.0 * strategy.position_avg_price / syminfo.mintick) : float(na) percentAsPrice(pcnt) => strategy.position_size != 0 ? (pcnt / 100.0 + 1.0) * strategy.position_avg_price : float(na) current_position_size = math.abs(strategy.position_size) initial_position_size = math.abs(ta.valuewhen(strategy.position_size[1] == 0.0, strategy.position_size, 0)) TP = strategy.position_avg_price + percentAsPoints(TPPerc) * syminfo.mintick * strategy.position_size / math.abs(strategy.position_size) SL = strategy.position_avg_price - percentAsPoints(SLPerc) * syminfo.mintick * strategy.position_size / math.abs(strategy.position_size) var long = false var short = false if direction == 'Long' long := goLong short := false if direction == 'Short' short := goShort long := false if direction == 'Both' long := goLong short := goShort if long and strategy.opentrades == 0 strategy.entry(id='Long', direction=strategy.long) if short and strategy.opentrades == 0 strategy.entry(id='Short', direction=strategy.short) if strategy.position_size > 0 strategy.exit('TPSL', from_entry='Long', qty=initial_position_size, limit=TP, stop=SL) if strategy.position_size < 0 strategy.exit('TPSL2', from_entry='Short', qty=initial_position_size, limit=TP, stop=SL)