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

منافع کی شرح تھیوری اتار چڑھاؤ انڈیکس کی مقدار کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-02-05 13:54:34
ٹیگز:

img

جائزہ

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

حکمت عملی کا اصول

یہ حکمت عملی مارکیٹ کے وقت کا اندازہ کرنے کے لئے حقیقی وقت میں متعدد تکنیکی اشارے کو یکجا کرتی ہے۔ اہم اقدامات یہ ہیں:

  1. مختلف حرکت پذیر اوسطوں کا حساب لگائیں ، بشمول ایس ایم اے ، ای ایم اے ، ہل ایم اے اور وی ڈبلیو ایم اے۔ طویل / مختصر سطح کا تعین کرنے کے لئے موجودہ قیمت سے موازنہ کریں۔
  2. آسکیلیٹرز کی ایک سیریز کا حساب لگائیں جن میں آر ایس آئی، سی سی آئی، ایم اے سی ڈی، ولیمز فی صد آر، اسٹوکاسٹکس وغیرہ شامل ہیں۔ آسکیلیٹرز کی لمبی/مختصر حالت، طویل/مختصر سطح کی درجہ بندی کے درمیان فرق کا فیصلہ کریں۔
  3. تکنیکی اشارے کی درجہ بندی کا طریقہ حتمی تجارتی سگنل پیدا کرنے کے لئے دو پہلوؤں سے اوپر کو مستحکم کرتا ہے۔ 0.5 سے زیادہ سگنل کی مطلق قیمت مضبوط سگنل ہے ، 0.1-0.5 کمزور سگنل ہے۔
  4. آخری سگنل کے مطابق، حکمت عملی طویل یا مختصر جا سکتی ہے۔ اس کے علاوہ سٹاپ نقصان اور منافع نکالنے کا منطق بھی مقرر کرتا ہے۔

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

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

  1. متعدد تکنیکی اشارے کو یکجا کرتے ہوئے ، درجہ بندی کے طریقے مارکیٹ کے وقت کا اندازہ کرنے میں زیادہ جامع اور قابل اعتماد ہیں
  2. متحرک سٹاپ نقصان کو اپنانا اور منافع حاصل کرنا، نقصان کے خطرے کو روکنے میں مدد ملتی ہے
  3. اپنی مرضی کے مطابق درجہ بندی کے اجزاء اپنی مرضی کے مطابق آپریشن کی اجازت دیتا ہے
  4. طویل اور مختصر پوزیشنوں دونوں کی حمایت کرتا ہے، زیادہ سے زیادہ مارکیٹ کے ماحول کو اپنانے
  5. منتخب کر سکتے ہیں کہ آیا مخصوص ٹریڈنگ سمت کو چالو کرنے کے لئے، غیر ضروری تجارت کو کم

خطرے کا تجزیہ

  1. درجہ بندی کے طریقوں میں خود کچھ موضوعیت ہے
  2. کچھ اوسیلیٹرز نئی اونچائیوں / نچلی سطحوں پر درست نہیں ہیں
  3. درجہ بندی کے طریقوں میں تکنیکی اشارے وزن کی ترتیب کا اندازہ کرنے کی ضرورت
  4. بڑے پیمانے پر اشارے کمپیوٹنگ بوجھ میں اضافہ کرتے ہیں، کارکردگی کو متاثر کرسکتے ہیں
  5. طویل مدتی P&L پر توجہ دیں، زیادہ تجارت سے بچیں

اہم حل تاریخی ڈیٹا بیک ٹیسٹ کی بنیاد پر اشارے کے وزن کو بہتر بنانا ہے۔ اشارے کی تعداد کو کم کرنے سے کارکردگی میں بھی اضافہ ہوسکتا ہے۔

اصلاح کی سمت

حکمت عملی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے۔

  1. اشارے کی صداقت کا اندازہ کریں، درجہ بندی کے طریقوں میں انتخاب کو بہتر بنائیں
  2. وزن اور سگنل کی طاقت کی حد کو ایڈجسٹ کریں
  3. بہتر خطرے کے کنٹرول کے لئے سٹاپ نقصان اور منافع لینے کے پیرامیٹرز کو بہتر بنائیں
  4. مختلف مصنوعات کے لئے بہترین پیرامیٹرز مقرر کریں
  5. درجہ بندی سگنل کے فیصلے میں مدد کے لئے ML میں اضافہ کریں

پیرامیٹر کی اصلاح کے ذریعے، حکمت عملی زیادہ واپسی کے ساتھ زیادہ مصنوعات کے لئے بہتر اپنانے کر سکتے ہیں.

خلاصہ

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


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Ratings", shorttitle="Ratings", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_value = 0.1, overlay=true)

//Settings
useLong = input(true, title = "Long")
useShort = input(true, title = "Short")
res = input("", title="Indicator Timeframe", type=input.resolution)
ratingSignal = input(defval = "All", title = "Rating is based on", options = ["MAs", "Oscillators", "All"])
startTime = input(defval = timestamp("01 Jan 2000 00:00 +0000"), title = "Start Time", type = input.time, inline = "time1")
finalTime = input(defval = timestamp("31 Dec 2099 23:59 +0000"), title = "Final Time", type = input.time, inline = "time1")
trueTime = true

// Awesome Oscillator
AO() => 
    sma(hl2, 5) - sma(hl2, 34)
// Stochastic RSI
StochRSI() =>
    rsi1 = rsi(close, 14)
    K = sma(stoch(rsi1, rsi1, rsi1, 14), 3)
    D = sma(K, 3)
    [K, D]
// Ultimate Oscillator
tl() => close[1] < low ? close[1]: low
uo(ShortLen, MiddlLen, LongLen) =>
    Value1 = sum(tr, ShortLen)
    Value2 = sum(tr, MiddlLen)
    Value3 = sum(tr, LongLen)
    Value4 = sum(close - tl(), ShortLen)
    Value5 = sum(close - tl(), MiddlLen)
    Value6 = sum(close - tl(), LongLen)
    float UO = na
    if Value1 != 0 and Value2 != 0 and Value3 != 0
        var0 = LongLen / ShortLen
        var1 = LongLen / MiddlLen
        Value7 = (Value4 / Value1) * (var0)
        Value8 = (Value5 / Value2) * (var1)
        Value9 = (Value6 / Value3)
        UO := (Value7 + Value8 + Value9) / (var0 + var1 + 1)
    UO
// Ichimoku Cloud
donchian(len) => avg(lowest(len), highest(len))
ichimoku_cloud() =>
    conversionLine = donchian(9)
    baseLine = donchian(26)
    leadLine1 = avg(conversionLine, baseLine)
    leadLine2 = donchian(52)
    [conversionLine, baseLine, leadLine1, leadLine2]
    
calcRatingMA(ma, src) => na(ma) or na(src) ? na : (ma == src ? 0 : ( ma < src ? 1 : -1 ))
calcRating(buy, sell) => buy ? 1 : ( sell ? -1 : 0 )
calcRatingAll() =>
    //============== MA =================
    SMA10 = sma(close, 10)
    SMA20 = sma(close, 20)
    SMA30 = sma(close, 30)
    SMA50 = sma(close, 50)
    SMA100 = sma(close, 100)
    SMA200 = sma(close, 200)
    
    EMA10 = ema(close, 10)
    EMA20 = ema(close, 20)
    EMA30 = ema(close, 30)
    EMA50 = ema(close, 50)
    EMA100 = ema(close, 100)
    EMA200 = ema(close, 200)
    
    HullMA9 = hma(close, 9)
    
    // Volume Weighted Moving Average (VWMA)
    VWMA = vwma(close, 20)
    
    [IC_CLine, IC_BLine, IC_Lead1, IC_Lead2] = ichimoku_cloud()
    
    // ======= Other =============
    // Relative Strength Index, RSI
    RSI = rsi(close,14)
    
    // Stochastic
    lengthStoch = 14
    smoothKStoch = 3
    smoothDStoch = 3
    kStoch = sma(stoch(close, high, low, lengthStoch), smoothKStoch)
    dStoch = sma(kStoch, smoothDStoch)
    
    // Commodity Channel Index, CCI
    CCI = cci(close, 20)
    
    // Average Directional Index
    float adxValue = na, float adxPlus = na, float adxMinus = na
    [P, M, V] = dmi(14, 14)
    adxValue := V
    adxPlus := P
    adxMinus := M
    // Awesome Oscillator
    ao = AO()
    
    // Momentum
    Mom = mom(close, 10)
    // Moving Average Convergence/Divergence, MACD
    [macdMACD, signalMACD, _] = macd(close, 12, 26, 9)
    // Stochastic RSI
    [Stoch_RSI_K, Stoch_RSI_D] = StochRSI()
    // Williams Percent Range
    WR = wpr(14)
    
    // Bull / Bear Power
    BullPower = high - ema(close, 13)
    BearPower = low - ema(close, 13)
    // Ultimate Oscillator
    UO = uo(7,14,28)
    if not na(UO)
        UO := UO * 100
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    PriceAvg = ema(close, 50)
    DownTrend = close < PriceAvg
    UpTrend = close > PriceAvg
    // calculate trading recommendation based on SMA/EMA
    float ratingMA = 0
    float ratingMAC = 0
    
    if not na(SMA10)
        ratingMA := ratingMA + calcRatingMA(SMA10, close)
        ratingMAC := ratingMAC + 1
    if not na(SMA20)
        ratingMA := ratingMA + calcRatingMA(SMA20, close)
        ratingMAC := ratingMAC + 1
    if not na(SMA30)
        ratingMA := ratingMA + calcRatingMA(SMA30, close)
        ratingMAC := ratingMAC + 1
    if not na(SMA50)
        ratingMA := ratingMA + calcRatingMA(SMA50, close)
        ratingMAC := ratingMAC + 1
    if not na(SMA100)
        ratingMA := ratingMA + calcRatingMA(SMA100, close)
        ratingMAC := ratingMAC + 1
    if not na(SMA200)
        ratingMA := ratingMA + calcRatingMA(SMA200, close)
        ratingMAC := ratingMAC + 1
    if not na(EMA10)
        ratingMA := ratingMA + calcRatingMA(EMA10, close)
        ratingMAC := ratingMAC + 1
    if not na(EMA20)
        ratingMA := ratingMA + calcRatingMA(EMA20, close)
        ratingMAC := ratingMAC + 1
    if not na(EMA30)
        ratingMA := ratingMA + calcRatingMA(EMA30, close)
        ratingMAC := ratingMAC + 1
    if not na(EMA50)
        ratingMA := ratingMA + calcRatingMA(EMA50, close)
        ratingMAC := ratingMAC + 1
    if not na(EMA100)
        ratingMA := ratingMA + calcRatingMA(EMA100, close)
        ratingMAC := ratingMAC + 1
    if not na(EMA200)
        ratingMA := ratingMA + calcRatingMA(EMA200, close)
        ratingMAC := ratingMAC + 1
    
    if not na(HullMA9)
        ratingHullMA9 = calcRatingMA(HullMA9, close)
        ratingMA := ratingMA + ratingHullMA9
        ratingMAC := ratingMAC + 1
    
    if not na(VWMA)
        ratingVWMA = calcRatingMA(VWMA, close)
        ratingMA := ratingMA + ratingVWMA
        ratingMAC := ratingMAC + 1
    
    float ratingIC = na
    if not (na(IC_Lead1) or na(IC_Lead2) or na(close) or na(close[1]) or na(IC_BLine) or na(IC_CLine))
        ratingIC := calcRating(
         IC_Lead1 > IC_Lead2 and close > IC_Lead1 and close < IC_BLine and close[1] < IC_CLine and close > IC_CLine,
         IC_Lead2 > IC_Lead1 and close < IC_Lead2 and close > IC_BLine and close[1] > IC_CLine and close < IC_CLine)
    if not na(ratingIC)
        ratingMA := ratingMA + ratingIC
        ratingMAC := ratingMAC + 1
    
    ratingMA := ratingMAC > 0 ? ratingMA / ratingMAC : na
    
    float ratingOther = 0
    float ratingOtherC = 0
    
    ratingRSI = RSI
    if not(na(ratingRSI) or na(ratingRSI[1]))
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + calcRating(ratingRSI < 30 and ratingRSI[1] < ratingRSI, ratingRSI > 70 and ratingRSI[1] > ratingRSI)
    
    if not(na(kStoch) or na(dStoch) or na(kStoch[1]) or na(dStoch[1]))
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + calcRating(kStoch < 20 and dStoch < 20 and kStoch > dStoch and kStoch[1] < dStoch[1], kStoch > 80 and dStoch > 80 and kStoch < dStoch and kStoch[1] > dStoch[1])
    
    ratingCCI = CCI
    if not(na(ratingCCI) or na(ratingCCI[1]))
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + calcRating(ratingCCI < -100 and ratingCCI > ratingCCI[1], ratingCCI > 100 and ratingCCI < ratingCCI[1])
    
    if not(na(adxValue) or na(adxPlus[1]) or na(adxMinus[1]) or na(adxPlus) or na(adxMinus))
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + calcRating(adxValue > 20 and adxPlus[1] < adxMinus[1] and adxPlus > adxMinus, adxValue > 20 and adxPlus[1] > adxMinus[1] and adxPlus < adxMinus)
    
    if not(na(ao) or na(ao[1]))
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + calcRating(crossover(ao,0) or (ao > 0 and ao[1] > 0 and ao > ao[1] and ao[2] > ao[1]), crossunder(ao,0) or (ao < 0 and ao[1] < 0 and ao < ao[1] and ao[2] < ao[1]))
    
    if not(na(Mom) or na(Mom[1]))
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + calcRating(Mom > Mom[1], Mom < Mom[1])
    
    if not(na(macdMACD) or na(signalMACD))
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + calcRating(macdMACD > signalMACD, macdMACD < signalMACD)
    
    float ratingStoch_RSI = na
    if not(na(DownTrend) or na(UpTrend) or na(Stoch_RSI_K) or na(Stoch_RSI_D) or na(Stoch_RSI_K[1]) or na(Stoch_RSI_D[1]))
        ratingStoch_RSI := calcRating(
         DownTrend and Stoch_RSI_K < 20 and Stoch_RSI_D < 20 and Stoch_RSI_K > Stoch_RSI_D and Stoch_RSI_K[1] < Stoch_RSI_D[1],
         UpTrend and Stoch_RSI_K > 80 and Stoch_RSI_D > 80 and Stoch_RSI_K < Stoch_RSI_D and Stoch_RSI_K[1] > Stoch_RSI_D[1])
    if not na(ratingStoch_RSI)
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + ratingStoch_RSI
    
    float ratingWR = na
    if not(na(WR) or na(WR[1]))
        ratingWR := calcRating(WR < -80 and WR > WR[1], WR > -20 and WR < WR[1])
    if not na(ratingWR)
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + ratingWR
    
    float ratingBBPower = na
    if not(na(UpTrend) or na(DownTrend) or na(BearPower) or na(BearPower[1]) or na(BullPower) or na(BullPower[1]))
        ratingBBPower := calcRating(
         UpTrend and BearPower < 0 and BearPower > BearPower[1],
         DownTrend and BullPower > 0 and BullPower < BullPower[1])
    if not na(ratingBBPower)
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + ratingBBPower
    
    float ratingUO = na
    if not(na(UO))
        ratingUO := calcRating(UO > 70, UO < 30)
    if not na(ratingUO)
        ratingOtherC := ratingOtherC + 1
        ratingOther := ratingOther + ratingUO
    
    ratingOther := ratingOtherC > 0 ? ratingOther / ratingOtherC : na
    
    float ratingTotal = 0
    float ratingTotalC = 0
    if not na(ratingMA)
        ratingTotal := ratingTotal + ratingMA
        ratingTotalC := ratingTotalC + 1
    if not na(ratingOther)
        ratingTotal := ratingTotal + ratingOther
        ratingTotalC := ratingTotalC + 1
    ratingTotal := ratingTotalC > 0 ? ratingTotal / ratingTotalC : na
    
    [ratingTotal, ratingOther, ratingMA, ratingOtherC, ratingMAC]
[ratingTotal, ratingOther, ratingMA, ratingOtherC, ratingMAC]  = security(syminfo.tickerid, res, calcRatingAll())
StrongBound = 0.5
WeakBound = 0.1
getSignal(ratingTotal, ratingOther, ratingMA) =>
    float _res = ratingTotal
    if ratingSignal == "MAs"
        _res := ratingMA
    if ratingSignal == "Oscillators"
        _res := ratingOther
    _res
tradeSignal = getSignal(ratingTotal, ratingOther, ratingMA)

dynSLpoints(factor) => factor * atr(14) / syminfo.mintick

//Trading
lotLong = useLong and trueTime ? na : 0
lotShort = useShort and trueTime ? na : 0
strategy.entry("long", strategy.long, lotLong, when = tradeSignal > StrongBound)
strategy.entry("short", strategy.short, lotShort, when = tradeSignal < -StrongBound)
strategy.exit("sl/tp", loss = dynSLpoints(3), trail_points = dynSLpoints(5), trail_offset = dynSLpoints(2))

//Cancel all
if time > finalTime
    strategy.close_all()
    strategy.cancel("long")
    strategy.cancel("short")

مزید