মুনাফা হার তত্ত্ব উদ্বায়ীতা সূচক পরিমাণ নির্ধারণের কৌশল

লেখক:চাওঝাং, তারিখঃ 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. দীর্ঘমেয়াদী লাভ ও ক্ষতির দিকে মনোযোগ দিন, অত্যধিক লেনদেন এড়ান

মূল সমাধানটি হল historicalতিহাসিক ডেটা ব্যাকটেস্টের ভিত্তিতে সূচক ওজনকে অনুকূল করা। সূচক সংখ্যা হ্রাস করাও দক্ষতা বাড়িয়ে তুলতে পারে।

অপ্টিমাইজেশান দিক

কৌশল নিম্নলিখিত দিক থেকে অপ্টিমাইজ করা যেতে পারেঃ

  1. সূচকের বৈধতা মূল্যায়ন করুন, রেটিং পদ্ধতিতে নির্বাচনকে অনুকূল করুন
  2. ওজন এবং সংকেত শক্তি থ্রেশহোল্ড সামঞ্জস্য করুন
  3. ঝুঁকি নিয়ন্ত্রণের জন্য স্টপ লস এবং লাভের পরামিতিগুলিকে অনুকূল করুন
  4. বিভিন্ন পণ্যের জন্য সর্বোত্তম পরামিতি সেট করুন
  5. র্যাঙ্কিং সিগন্যালের বিচারকে সহায়তা করার জন্য এমএল বাড়ান

প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে, কৌশলটি উচ্চতর রিটার্ন সহ আরও বেশি পণ্যের সাথে আরও ভালভাবে মানিয়ে নিতে পারে।

সংক্ষিপ্তসার

কৌশলটি লং / শর্টের জন্য বাজার টাইমিং নির্ধারণের জন্য প্রযুক্তিগত সূচক রেটিং পদ্ধতিগুলিকে একত্রিত করে। সুবিধাগুলিতে কাস্টমাইজযোগ্যতা, গতিশীল এসএল / টিপি, অবস্থান দিক সক্ষম / নিষ্ক্রিয় অন্তর্ভুক্ত। ঝুঁকিগুলি মূলত রেটিং বিষয়গততা এবং অবৈধ সূচক থেকে আসে। ভবিষ্যতের অপ্টিমাইজেশনের স্থানটি প্যারামিটার নির্বাচন এবং দক্ষতার উন্নতিতে রয়েছে। সামগ্রিকভাবে কৌশলটি বাজারের টাইমিং বিচারের উচ্চ প্রয়োজনীয়তার সাথে বিনিয়োগকারীদের উপযুক্ত।


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

আরো