تجارتی اوقات کے ساتھ مل کر کثیر ٹائم فریم چلتی اوسط مقداری تجارتی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-12 11:50:37
ٹیگز:

img

جائزہ

یہ حکمت عملی متعدد حرکت پذیر اوسط اشارے کا استعمال کرتی ہے اور مقداری تجارت کو نافذ کرنے کے لئے تجارتی اوقات پر مبنی انٹری اور آؤٹ ٹائمنگ کو یکجا کرتی ہے۔

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

اس حکمت عملی میں 9 اقسام کے حرکت پذیر اوسط شامل ہیں جن میں ایس ایم اے ، ای ایم اے ، ڈبلیو ایم اے وغیرہ شامل ہیں۔ طویل اندراج کے ل the ، بند قیمت منتخب شدہ حرکت پذیر اوسط سے اوپر کی طرف بڑھتی ہے جبکہ پچھلا بند حرکت پذیر اوسط سے نیچے تھا۔ مختصر اندراج کے ل the ، بند قیمت حرکت پذیر اوسط سے نیچے کی طرف بڑھتی ہے جبکہ پچھلا بند اوپر تھا۔ تمام تجارت صرف پیر کو کھلی جاتی ہیں۔ باہر نکلنے کے قواعد یا تو مقرر ہیں منافع / اسٹاپ نقصان لے لو یا اتوار کے اختتام سے پہلے تمام پوزیشنوں کو بند کرو۔

فوائد کا تجزیہ

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

خطرے کا تجزیہ

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

ان خطرات سے نمٹنے کے لئے ، متحرک اوسط پیرامیٹرز کو مختلف ادوار کے دوران لمبائی کو کم کرنے کے لئے استعمال کیا جاسکتا ہے۔ نیز اضافی اندراج کے دنوں کی اجازت دی جاسکتی ہے ، جیسے بدھ یا جمعرات کو۔

اصلاح کی ہدایات

اسٹریٹیجی کو مندرجہ ذیل طریقوں سے بہتر بنایا جاسکتا ہے:

  1. متحرک طور پر سطحوں کو ایڈجسٹ کرنے کے لئے انکولی سٹاپ نقصان / منافع لینے کے الگورتھم شامل کریں.

  2. مشین لرننگ ماڈلز کو شامل کریں تاکہ متضاد مارکیٹوں میں رجحانات کو بہتر اندازہ لگایا جاسکے۔

  3. مزید تجارتی مواقع حاصل کرنے کے لیے انٹری اور ایگزٹ منطق کو بہتر بنائیں۔

خلاصہ

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


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
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/
// © exlux99

//@version=5
strategy('Time MA strategy ', overlay=true)

longEntry = input.bool(true, group="Type of Entries")
shortEntry = input.bool(false, group="Type of Entries")


//==========DEMA
getDEMA(src, len) =>
    dema = 2 * ta.ema(src, len) - ta.ema(ta.ema(src, len), len)
    dema
//==========HMA
getHULLMA(src, len) =>
    hullma = ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len)))
    hullma
//==========KAMA
getKAMA(src, len, k1, k2) =>
    change = math.abs(ta.change(src, len))
    volatility = math.sum(math.abs(ta.change(src)), len)
    efficiency_ratio = volatility != 0 ? change / volatility : 0
    kama = 0.0
    fast = 2 / (k1 + 1)
    slow = 2 / (k2 + 1)
    smooth_const = math.pow(efficiency_ratio * (fast - slow) + slow, 2)
    kama := nz(kama[1]) + smooth_const * (src - nz(kama[1]))
    kama
//==========TEMA
getTEMA(src, len) =>
    e = ta.ema(src, len)
    tema = 3 * (e - ta.ema(e, len)) + ta.ema(ta.ema(e, len), len)
    tema
//==========ZLEMA
getZLEMA(src, len) =>
    zlemalag_1 = (len - 1) / 2
    zlemadata_1 = src + src - src[zlemalag_1]
    zlema = ta.ema(zlemadata_1, len)
    zlema
//==========FRAMA
getFRAMA(src, len) =>
    Price = src
    N = len
    if N % 2 != 0
        N := N + 1
        N
    N1 = 0.0
    N2 = 0.0
    N3 = 0.0
    HH = 0.0
    LL = 0.0
    Dimen = 0.0
    alpha = 0.0
    Filt = 0.0
    N3 := (ta.highest(N) - ta.lowest(N)) / N
    HH := ta.highest(N / 2 - 1)
    LL := ta.lowest(N / 2 - 1)
    N1 := (HH - LL) / (N / 2)
    HH := high[N / 2]
    LL := low[N / 2]
    for i = N / 2 to N - 1 by 1
        if high[i] > HH
            HH := high[i]
            HH
        if low[i] < LL
            LL := low[i]
            LL
    N2 := (HH - LL) / (N / 2)
    if N1 > 0 and N2 > 0 and N3 > 0
        Dimen := (math.log(N1 + N2) - math.log(N3)) / math.log(2)
        Dimen
    alpha := math.exp(-4.6 * (Dimen - 1))
    if alpha < .01
        alpha := .01
        alpha
    if alpha > 1
        alpha := 1
        alpha
    Filt := alpha * Price + (1 - alpha) * nz(Filt[1], 1)
    if bar_index < N + 1
        Filt := Price
        Filt
    Filt
//==========VIDYA
getVIDYA(src, len) =>
    mom = ta.change(src)
    upSum = math.sum(math.max(mom, 0), len)
    downSum = math.sum(-math.min(mom, 0), len)
    out = (upSum - downSum) / (upSum + downSum)
    cmo = math.abs(out)
    alpha = 2 / (len + 1)
    vidya = 0.0
    vidya := src * alpha * cmo + nz(vidya[1]) * (1 - alpha * cmo)
    vidya
//==========JMA
getJMA(src, len, power, phase) =>
    phase_ratio = phase < -100 ? 0.5 : phase > 100 ? 2.5 : phase / 100 + 1.5
    beta = 0.45 * (len - 1) / (0.45 * (len - 1) + 2)
    alpha = math.pow(beta, power)
    MA1 = 0.0
    Det0 = 0.0
    MA2 = 0.0
    Det1 = 0.0
    JMA = 0.0
    MA1 := (1 - alpha) * src + alpha * nz(MA1[1])
    Det0 := (src - MA1) * (1 - beta) + beta * nz(Det0[1])
    MA2 := MA1 + phase_ratio * Det0
    Det1 := (MA2 - nz(JMA[1])) * math.pow(1 - alpha, 2) + math.pow(alpha, 2) * nz(Det1[1])
    JMA := nz(JMA[1]) + Det1
    JMA
//==========T3
getT3(src, len, vFactor) =>
    ema1 = ta.ema(src, len)
    ema2 = ta.ema(ema1, len)
    ema3 = ta.ema(ema2, len)
    ema4 = ta.ema(ema3, len)
    ema5 = ta.ema(ema4, len)
    ema6 = ta.ema(ema5, len)
    c1 = -1 * math.pow(vFactor, 3)
    c2 = 3 * math.pow(vFactor, 2) + 3 * math.pow(vFactor, 3)
    c3 = -6 * math.pow(vFactor, 2) - 3 * vFactor - 3 * math.pow(vFactor, 3)
    c4 = 1 + 3 * vFactor + math.pow(vFactor, 3) + 3 * math.pow(vFactor, 2)
    T3 = c1 * ema6 + c2 * ema5 + c3 * ema4 + c4 * ema3
    T3
//==========TRIMA
getTRIMA(src, len) =>
    N = len + 1
    Nm = math.round(N / 2)
    TRIMA = ta.sma(ta.sma(src, Nm), Nm)
    TRIMA


src = input.source(close, title='Source', group='Parameters')
len = input.int(17, minval=1, title='Moving Averages', group='Parameters')
out_ma_source = input.string(title='MA Type', defval='ALMA', options=['SMA', 'EMA', 'WMA', 'ALMA', 'SMMA', 'LSMA', 'VWMA', 'DEMA', 'HULL', 'KAMA', 'FRAMA', 'VIDYA', 'JMA', 'TEMA', 'ZLEMA', 'T3', 'TRIM'], group='Parameters')
out_ma = out_ma_source == 'SMA' ? ta.sma(src, len) : out_ma_source == 'EMA' ? ta.ema(src, len) : out_ma_source == 'WMA' ? ta.wma(src, len) : out_ma_source == 'ALMA' ? ta.alma(src, len, 0.85, 6) : out_ma_source == 'SMMA' ? ta.rma(src, len) : out_ma_source == 'LSMA' ? ta.linreg(src, len, 0) : out_ma_source == 'VWMA' ? ta.vwma(src, len) : out_ma_source == 'DEMA' ? getDEMA(src, len) : out_ma_source == 'HULL' ? ta.hma(src, len) : out_ma_source == 'KAMA' ? getKAMA(src, len, 2, 30) : out_ma_source == 'FRAMA' ? getFRAMA(src, len) : out_ma_source == 'VIDYA' ? getVIDYA(src, len) : out_ma_source == 'JMA' ? getJMA(src, len, 2, 50) : out_ma_source == 'TEMA' ? getTEMA(src, len) : out_ma_source == 'ZLEMA' ? getZLEMA(src, len) : out_ma_source == 'T3' ? getT3(src, len, 0.7) : out_ma_source == 'TRIM' ? getTRIMA(src, len) : na


plot(out_ma)

long = close> out_ma and close[1] < out_ma and dayofweek==dayofweek.monday
short = close< out_ma and close[1] > out_ma and dayofweek==dayofweek.monday


stopPer = input.float(10.0, title='LONG Stop Loss % ', group='Fixed Risk Management') / 100
takePer = input.float(30.0, title='LONG Take Profit %', group='Fixed Risk Management') / 100

stopPerShort = input.float(5.0, title='SHORT Stop Loss % ', group='Fixed Risk Management') / 100
takePerShort = input.float(10.0, title='SHORT Take Profit %', group='Fixed Risk Management') / 100


longStop = strategy.position_avg_price * (1 - stopPer)
longTake = strategy.position_avg_price * (1 + takePer)

shortStop = strategy.position_avg_price * (1 + stopPerShort)
shortTake = strategy.position_avg_price * (1 - takePerShort)

// strategy.risk.max_intraday_filled_orders(2) // After 10 orders are filled, no more strategy orders will be placed (except for a market order to exit current open market position, if there is any).

if(longEntry)
    strategy.entry("long",strategy.long,when=long )
    strategy.exit('LONG EXIT', "long", limit=longTake, stop=longStop)
    strategy.close("long",when=dayofweek==dayofweek.sunday)

if(shortEntry)
    strategy.entry("short",strategy.short,when=short )
    strategy.exit('SHORT EXIT', "short", limit=shortTake, stop=shortStop)
    strategy.close("short",when=dayofweek==dayofweek.sunday)



مزید