حرکت پذیر اوسط K-لائن ریگریشن حکمت عملی


تخلیق کی تاریخ: 2023-09-14 17:50:14 آخر میں ترمیم کریں: 2023-09-14 17:50:14
کاپی: 1 کلکس کی تعداد: 805
1
پر توجہ دیں
1617
پیروکار

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

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

بنیادی تجارتی منطق:

  1. اوسط K لائن کا حساب لگائیں ، جس میں اوپن ، بند ، اعلی اور کم سے کم قیمتوں کی اوسط اوسط شامل ہے

  2. حرکت پذیر اوسط K لائن کی حرکیات اور حرکیات کی لکیری رجعت کا حساب لگائیں

  3. خود K لائن کی لکیری رجعت کا حساب لگائیں

  4. سپر رجحانات کا حساب لگانا اور مجموعی طور پر رجحان کی سمت کا تعین کرنا

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

  6. جب پازیٹو سے منفی کی طرف موڑتا ہے، یا واپس لوٹتا ہے، تو اس کا فیصلہ نکلنے کا نقطہ ہے

اس حکمت عملی میں انڈیکس کی تجارت کا وقت طے کرنے کے لئے مارکیٹ کے طویل اور قلیل مدتی رجحانات اور رفتار کا اندازہ لگانے کے لئے متعدد تکنیکی اشارے کا استعمال کیا گیا ہے۔

اسٹریٹجک فوائد

  • مارکیٹ کی درمیانی اور طویل مدتی رجحانات کی عکاسی کرنے والی منتقل اوسط K لائن

  • رجعت تجزیہ فیصلہ رجحان موڑ

  • سپر رجحانات مجموعی سمت کا تعین کرنے میں معاون ہیں

  • کثیر پیمائش کا مجموعہ فیصلہ کی درستگی کو بہتر بناتا ہے

اسٹریٹجک رسک

  • پیرامیٹرز کی اصلاح پیچیدہ ہے

  • کثیر پیکیجنگ کے لئے مشکل توازن

  • کم سگنل اور کم ٹرانزیکشن

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 15m
basePeriod: 5m
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("MACandles-LinearRegression-Strategy", shorttitle="MALinReg - Strategy",
                     overlay=false, initial_capital = 100000, 
                     default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, 
                     commission_value = 0.01)
resolution = ""
MAType = input(title="Moving Average Type (MA Candles)", defval="hma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
LoopbackBars = input(60, title="Length (MA Candles)", step=10)

MMAType = input(title="Moving Average Type (Momentum)", defval="ema", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
MLength = input(20, title="MA Length (Momentum)", step=10)

lb = input(40  , title="Look Back Period Percentile High/Low", step=10, minval=10, maxval=100)
ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%")
pl = input(1.01, title="Lowest Percentile - 1.10=90%, 1.05=95%, 1.01=99%")
mult = input(3.0    , minval=1, maxval=5, title="Bollinger Band Standard Devaition Up")

aggressiveLong = input(true)
longTrades = input(true)
useVixFix = input(false)
i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true


f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

f_getMACandles(resolution, MAType, LoopbackBars)=>
    oOpen = f_getMovingAverage(open, MAType, LoopbackBars)
    oClose = f_getMovingAverage(close, MAType, LoopbackBars)
    oHigh = f_getMovingAverage(high, MAType, LoopbackBars)
    oLow = f_getMovingAverage(low, MAType, LoopbackBars)
    [oOpen, oClose, oHigh, oLow]

f_getVixFixLinReg(oClose, oLow, MLength)=>
    wvf = ((highest(oClose, MLength)-oLow)/(highest(oClose, MLength)))*100
    
    sDev = mult * stdev(wvf, MLength)
    midLine = sma(wvf, MLength)
    lowerBand = midLine - sDev
    upperBand = midLine + sDev
    
    rangeHigh = (highest(wvf, lb)) * ph
    rangeLow = (lowest(wvf, lb)) * pl
    
    
    col = wvf >= upperBand or wvf >= rangeHigh ? color.lime : color.gray
    
    val = linreg(wvf, MLength, 0)
    absVal = abs(val)
    linRegColor = val>val[1]? (val > 0 ? color.green : color.orange): (val > 0 ? color.lime : color.red)
    
    vixFixState = (col == color.lime) ? 1: 0
    vixFixState := strategy.position_size == 0? max(vixFixState, nz(vixFixState[1],0)) : vixFixState
    [val, absVal, wvf, col, linRegColor, vixFixState]
    
f_getMACandlesLinReg(oClose, MMAType, MLength, mult, lb, ph, pl)=>
    ma = f_getMovingAverage(oClose, MMAType, MLength)
    
    maDiff = oClose  -  ma
    val = linreg(maDiff, MLength,0)
    absVal = abs(val)
    linRegColor = iff( val > 0,
                 iff( val > nz(val[1]), color.green, color.lime),
                 iff( val < nz(val[1]), color.red, color.orange))
    
    
    sDev = mult * stdev(maDiff, MLength)
    midLine = sma(maDiff, MLength)
    lowerBand = midLine - sDev
    upperBand = midLine + sDev
    
    rangeHigh = (highest(maDiff, lb)) * ph
    rangeLow = (lowest(maDiff, lb)) * pl
    
    col = maDiff >= upperBand or maDiff >= rangeHigh ? color.lime : maDiff <= lowerBand or maDiff <= rangeLow ? color.orange : color.silver
    absMaDiff = abs(maDiff)
    [val, absVal, maDiff, absMaDiff, col, linRegColor]

f_getSupertrend(resolution, oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, AtrMult, wicks)=>
    truerange = max(oHigh, oClose[1]) - min(oLow, oClose[1])
    
    averagetruerange = f_getMovingAverage(truerange, AtrMAType, AtrLength)
    atr = averagetruerange * AtrMult

    longWicks = wicks
    shortWicks = wicks
    longStop = oClose - atr
    longStopPrev = nz(longStop[1], longStop)
    longStop := (longWicks ? oLow[1] : oClose[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop
    
    shortStop = oClose + atr
    shortStopPrev = nz(shortStop[1], shortStop)
    shortStop := (shortWicks ? oHigh[1] : oClose[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
    
    dir = 1
    dir := nz(dir[1], dir)
    dir := dir == -1 and (longWicks ? oHigh : oClose) > shortStopPrev ? 1 : dir == 1 and (shortWicks[1]? oLow : oClose) < longStopPrev ? -1 : dir
    
    [dir, longStop, shortStop]

f_getMACandlesAndSupertrend(MAType, LoopbackBars, AtrMult, wicks)=>
    oOpen = f_getMovingAverage(open, MAType, LoopbackBars)
    oClose = f_getMovingAverage(close, MAType, LoopbackBars)
    oHigh = f_getMovingAverage(high, MAType, LoopbackBars)
    oLow = f_getMovingAverage(low, MAType, LoopbackBars)
    [dir, longStop, shortStop] = f_getSupertrend(resolution, oOpen, oClose, oHigh, oLow, MAType, LoopbackBars, AtrMult, wicks)
    dir

[oOpen, oClose, oHigh, oLow] = f_getMACandles(resolution, MAType, LoopbackBars)
dir = f_getMACandlesAndSupertrend("sma", 200, 1, false)
colorByPreviousClose = false
candleColor = colorByPreviousClose ?
                 (oClose[1] < oClose ? color.green : oClose[1] > oClose ? color.red : color.silver) : 
                 (oOpen < oClose ? color.green : oOpen > oClose ? color.red : color.silver)


[vval, vabsVal, wvf, vcol, vlinRegColor, vixFixState] = f_getVixFixLinReg(oClose, oLow, MLength)
[val, absVal, maDiff, absMaDiff, col, linRegColor] = f_getMACandlesLinReg(oClose, MMAType, MLength, mult, lb, ph, pl)


plot(useVixFix?na:absMaDiff, title="Momentum", style=plot.style_histogram, linewidth = 4, color=col)
plot(useVixFix?wvf:na, title="VIX Fix", style=plot.style_histogram, linewidth = 4, color=vcol)
plot(useVixFix?na:-absVal, title="Linear Regression (Momentum)", style=plot.style_histogram, linewidth=4, color=linRegColor)
plot(useVixFix?-vabsVal:na, title="Linear Regression (VIX Fix)", style=plot.style_histogram, linewidth=4, color=vlinRegColor)

exitColor = longTrades? color.orange : color.silver
exitPreviousColor = longTrades? color.silver : color.lime
longCondition = (useVixFix? (vixFixState == 1 and vlinRegColor == color.lime) :
                     ((linRegColor == color.orange and linRegColor[1] == color.red) or (linRegColor == color.green and linRegColor[1] != color.green and aggressiveLong)))  and inDateRange and dir>0
exitLongCondition = (col == exitColor and col[1] == exitColor and col[2] == exitPreviousColor and (linRegColor != color.green or not aggressiveLong))

strategy.entry("Long", strategy.long, when=longCondition, oca_name="oca_buy")
strategy.close("Long", when=exitLongCondition)