وسائل لوڈ ہو رہے ہیں... لوڈنگ...

کثیر ٹائم فریم چلتی اوسط کراس اوور حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-02-19 15:41:29
ٹیگز:

img

جائزہ

ملٹی ٹائم فریم موونگ ایوریج کراس اوور حکمت عملی ایک الگورتھم تجارتی حکمت عملی ہے جو رجحان کی سمت کا تعین کرنے کے لئے مختلف ٹائم فریم ادوار کے درمیان منتقل اوسط کراس اوور سگنل کا استعمال کرتی ہے۔ یہ حکمت عملی زیادہ قابل اعتماد تجارتی سگنل پیدا کرنے کے لئے رجحان ، رفتار اور اتار چڑھاؤ کے اشارے کو یکجا کرتی ہے۔

حکمت عملی منطق

اس حکمت عملی میں مارکیٹ کے رجحان کی سمت کا تعین کرنے کے لئے مختلف ادوار میں سی سی آئی اشارے کا حساب لگایا جاتا ہے ، جو سونے کے صلیب اور موت کے صلیبوں کا پتہ لگانے کے لئے ایم اے سی ڈی سگنلز کے ساتھ مل کر ہوتا ہے ، اور آخر میں اے ٹی آر اشارے کا استعمال کرتے ہوئے اسٹاپ نقصان / منافع حاصل کرنے کی سطح مقرر کرنے کے لئے ہوتا ہے ، تاکہ کم خریدیں اور زیادہ فروخت کریں۔

خاص طور پر ، یہ پہلے 20 پیریڈ سی سی آئی کا حساب لگاتا ہے تاکہ تیزی یا bearish رجحانات کا فیصلہ کیا جاسکے۔ پھر یہ چیک کرتا ہے کہ آیا تجارتی سگنل کی نشاندہی کرنے کے لئے ایم اے سی ڈی لائنیں عبور کررہی ہیں۔ اس کے بعد ، اے ٹی آر کا استعمال منافع میں مقفل کرنے کے لئے ٹریلنگ اسٹاپس پیدا کرنے کے لئے کیا جاتا ہے۔ آخر میں ، تمام سگنل کو انٹری اور آؤٹ پٹ سگنل پیدا کرنے کے لئے متحد کیا جاتا ہے۔

فوائد

  1. متعدد اشارے کا مجموعہ سگنل کی درستگی کو بہتر بناتا ہے

    سی سی آئی، ایم اے سی ڈی اور اے ٹی آر کا امتزاج ٹریڈنگ سگنلز کی وشوسنییتا میں اضافہ کرتا ہے کیونکہ یہ مجموعی طور پر رجحان، رفتار اور اتار چڑھاؤ کا جائزہ لیتا ہے۔

  2. ملٹی ٹائم فریم تجزیہ مارکیٹ کی رفتار کو پکڑتا ہے

    طویل مدتی سی سی آئی مجموعی رجحان کو پکڑتا ہے، جبکہ اعلی تعدد MACD مقامی موڑ کے مقامات کو تلاش کرتا ہے، جس سے حکمت عملی کو مارکیٹ میں بڑے اتار چڑھاؤ پر سرمایہ کاری کرنے کی اجازت ملتی ہے.

  3. اے ٹی آر پیچھے رکنے کنٹرول مؤثر طریقے سے خطرہ

    اے ٹی آر پر مبنی اسٹاپ نقصان مارکیٹ کی اتار چڑھاؤ کے مطابق ڈھال سکتا ہے ، جبکہ اس کی ٹریلنگ خصوصیت منافع میں مزید تالا لگاتا ہے کیونکہ مارکیٹ سازگار طور پر چلتی ہے۔

خطرات

  1. محدود اصلاح کی جگہ

    زیادہ تر پیرامیٹرز میں باریک باریک ایڈجسٹمنٹ کی جگہ ہوتی ہے ، جس سے کارکردگی کی بوتل کی گلی آسانی سے پہنچ جاتی ہے۔

  2. کمپیوٹنگ بوجھ میں اضافہ

    ایک ساتھ چلنے والے متعدد اشارے کمپیوٹنگ بوجھ کو بڑھا سکتے ہیں ، جس سے اعلی تعدد کی تجارت میں تاخیر ہوتی ہے۔

  3. کثرت سے سگنل، محدود خطرے کا کنٹرول

    سگنل کثرت سے ہوسکتے ہیں ، جبکہ رسک کنٹرول بنیادی طور پر اے ٹی آر ٹریلنگ اسٹاپ پر انحصار کرتا ہے ، جس میں انتہائی حرکتوں کے خلاف حدود ہیں۔

بہتری

  1. زیادہ موثر پیرامیٹر ٹیوننگ کے لئے مشین لرننگ کا اطلاق کریں

    بایزین اصلاحات، جینیاتی الگورتھم وغیرہ زیادہ ذہین اور موثر پیرامیٹر ٹوننگ کو قابل بناسکتے ہیں۔

  2. موافقت کو بہتر بنانے کے لئے فعال اشارے شامل کریں

    دیگر اشارے جیسے اتار چڑھاؤ، حجم، جذبات کو شامل کرنا حکمت عملی کو زیادہ مضبوط اور لچکدار بنا سکتا ہے.

  3. بہتر استحکام کے لیے رسک مینجمنٹ کو مضبوط کرنا

    زیادہ سائنسی سٹاپ نقصان کے قوانین کو ڈیزائن کیا جا سکتا ہے، اور پوزیشن سائزنگ جیسے مزید ماڈیول انتہائی واقعات کے خلاف حفاظت میں مدد کرسکتے ہیں.

نتیجہ

ملٹی ٹائم فریم موونگ ایوریج کراس اوور حکمت عملی قابل اعتماد رجحان کی گرفتاری اور موثر رسک کنٹرول کے حصول کے لئے سی سی آئی ، ایم اے سی ڈی اور اے ٹی آر کی طاقتوں کا استعمال کرتی ہے۔ یہ درست سگنل پیدا کرنے ، مارکیٹ کی تالوں کو سمجھنے اور رسک کا انتظام کرنے کے لئے رجحان ، رفتار اور اتار چڑھاؤ کا حساب لگاتا ہے۔ اگرچہ پیرامیٹر ٹیوننگ ، کمپیوٹنگ بوجھ اور رسک کنٹرول جیسے کچھ پہلوؤں کو مزید بہتر بنایا جاسکتا ہے ، لیکن یہ ایک ٹھوس الگورتھم ٹریڈنگ سسٹم ہے۔ مشینی سیکھنے ، مزید اشارے اور بہتر رسک مینجمنٹ کا استعمال کرتے ہوئے کچھ بہتری کے ساتھ ، اس کی کارکردگی نئی سطح تک پہنچ سکتی ہے۔


/*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)



مزید