Oscillating K-line مقداری تجارتی حکمت عملی


تخلیق کی تاریخ: 2023-09-26 20:05:55 آخر میں ترمیم کریں: 2023-09-26 20:05:55
کاپی: 0 کلکس کی تعداد: 724
1
پر توجہ دیں
1617
پیروکار

جائزہ

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

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

یہ حکمت عملی پہلے اپنی مرضی کے مطابق فنکشن کو فون کرتی ہے f_getOscilatorValues مختلف oscillators کے اشارے کے لئے اقدار حاصل کرنے کے لئے، بشمول RSI، Stoch، MACD وغیرہ۔ اس کے بعد، f_getSupertrend فنکشن کے ذریعہ تاخیر سے تجاوز کرنے والے اشارے کی اقدار کا حساب لگانا، روکنے کے لئے استعمال کیا جاتا ہے.

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

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

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

حکمت عملی کا تجزیہ

یہ حکمت عملی مندرجہ ذیل فوائد رکھتی ہے:

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

  2. لاگو تاخیر سے تجاوز کرنے والی نقصان کی روک تھام کی حکمت عملی ، جو نقصانات میں توسیع سے پہلے نقصانات کو روک سکتی ہے ، اور ایک ہی نقصان کو محدود کرسکتی ہے۔

  3. اے ٹی آر کے حساب سے خطرے کی پیمائش کی بنیاد پر اسٹاپ نقصان اور اسٹاپ پوزیشن ، پوزیشن کے سائز کو متحرک طور پر ایڈجسٹ کیا جاسکتا ہے۔

  4. اعلی دورانیہ اوسط لائن کے ساتھ مل کر فلٹرنگ ، جوڑے سے بچنے کے لئے۔

  5. کچھ منافع کو چلانے اور کچھ منافع کو لاک کرنے کے لئے جزوی اسٹاپ حکمت عملی۔

  6. اسٹریٹجک نظریہ سادہ اور واضح ہے ، اس پر عمل درآمد آسان ہے ، اور یہ مقدار میں تجارت کرنے والے ابتدائی افراد کے لئے موزوں ہے۔

حکمت عملی کے خطرے کا تجزیہ

اس حکمت عملی کے کچھ خطرات بھی ہیں:

  1. oscillators اشارے میں تاخیر کا مسئلہ ہے ، جس کی وجہ سے انٹری سگنل میں تاخیر ہوسکتی ہے ، آؤٹ سگنل جلدی ہوجاتا ہے۔ اشارے کے پیرامیٹرز کو ایڈجسٹ کرکے اصلاح کی جاسکتی ہے ، یا رجحان کے بعد اشارے میں معاون فیصلہ شامل کیا جاسکتا ہے۔

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

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

  4. اعداد و شمار کے ملاپ کے خطرے کا پتہ لگانا۔ مختلف مارکیٹوں میں متعدد بار توثیق کی جانی چاہئے ، اور ملاپ سے بچنا چاہئے۔

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

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

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

  1. مختلف oscillators کے اشارے کے پیرامیٹرز کے مجموعے کی جانچ کریں ، ایسے مجموعے کو منتخب کریں جو بہتر معیار کے اشارے فراہم کرسکیں ، جیسے کہ تیز رفتار K لائن کے لئے اسٹوچ اشارے وغیرہ۔

  2. کچھ اسٹاپس کو منتقل اسٹاپس میں تبدیل کرنے کی کوشش کریں ، اسٹاپ پوزیشن کو اے ٹی آر یا منتقل اوسط کے مطابق ترتیب دیں

  3. اعلی دورانیہ کے رجحانات کا فیصلہ کرنے کے لئے مشین لرننگ الگورتھم شامل کریں ، اعلی دورانیہ کے اوسط لائن فلٹرنگ کو تبدیل کریں ، اور فیصلہ کی درستگی کو بہتر بنائیں۔

  4. اضافی توانائی کے اشارے جیسے شرائط کو فلٹر کرنے کے لئے ، غیر ضروری واپسی کی تجارت سے بچنے کے لئے۔

  5. انڈیکیٹرز کو مربوط اور وزن میں بہتر بنانے کے ل the ، موجودہ نسل کے لئے سب سے موزوں انڈیکیٹرز کا مجموعہ منتخب کریں۔

  6. مشین لرننگ ونڈ کنٹرول ماڈیولز کو شامل کریں ، اور اسٹاپ نقصان ، اسٹاپ پوزیشن ، پوزیشن ، وغیرہ کو متحرک طور پر بہتر بنائیں۔

  7. ٹریڈنگ سگنل جس میں ٹریڈنگ سگنل شامل ہیں جن میں ٹریڈنگ سگنل شامل ہیں جن میں ٹریڈنگ سگنل شامل ہیں جن میں ٹریڈنگ سگنل شامل ہیں۔

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("Oscilator candles - strategy", overlay=false, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

oscilatorType = input(title="Oscliator Type", defval="stoch", options=["rsi", "stoch", "cog", "macd", "tsi", "cci", "cmo", "mfi"])
length = input(3)
shortlength = input(3)
longlength = input(9)

showSupertrend = input(true)
AtrMAType = input(title="Moving Average Type", defval="rma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
AtrLength = input(30, step=10)
stopMultiplier  = input(4)
targetMultiplier  = input(3)
wicks = input(true)
considerWicksForDelayByStep = input(false)
colorByPreviousClose = input(true)

useHTFPivot = input(false)
resolution = input("12M", type=input.resolution)
HTFMultiplier = input(4, title="Higher Timeframe multiplier (Used when resolution is set to Same as Symbol)", minval=2, step=1)
PivotLength = input(2, step=1)

tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time)
inDateRange = true

f_getOscilatorValues(oscilatorType, length, shortlength, longlength)=>
    oOpen = rsi(open, length)
    oClose = rsi(close, length)
    oHigh = rsi(high, length)
    oLow = rsi(low, length)
    if(oscilatorType == "tsi")
        oOpen := tsi(open, shortlength, longlength)
        oClose := tsi(close, shortlength, longlength)
        oHigh := tsi(high, shortlength, longlength)
        oLow := tsi(low, shortlength, longlength)
    if(oscilatorType == "stoch")
        oOpen := stoch(open, longlength, shortlength, length)
        oClose := stoch(close, longlength, shortlength, length)
        oHigh := stoch(high, longlength, shortlength, length)
        oLow := stoch(low, longlength, shortlength, length)
    if(oscilatorType == "cci")
        oOpen := cci(open, length)
        oClose := cci(close, length)
        oHigh := cci(high, length)
        oLow := cci(low, length)
    if(oscilatorType == "cog")
        oOpen := cog(open, length)
        oClose := cog(close, length)
        oHigh := cog(high, length)
        oLow := cog(low, length)
    if(oscilatorType == "cmo")
        oOpen := cmo(open, length)
        oClose := cmo(close, length)
        oHigh := cmo(high, length)
        oLow := cmo(low, length)
    if(oscilatorType == "mfi")
        oOpen := mfi(open, length)
        oClose := mfi(close, length)
        oHigh := mfi(high, length)
        oLow := mfi(low, length)
    if(oscilatorType == "macd")
        [macdLineOpen, signalLineOpen, histLineOpen] = macd(open, shortlength, longlength, length)
        [macdLineClose, signalLineClose, histLineClose] = macd(close, shortlength, longlength, length)
        [macdLineHigh, signalLineHigh, histLineHigh] = macd(high, shortlength, longlength, length)
        [macdLineLow, signalLineLow, histLineLow] = macd(low, shortlength, longlength, length)
        oOpen := macdLineOpen
        oClose := macdLineClose
        oHigh := macdLineHigh
        oLow := macdLineLow
    [oOpen, oClose, oHigh, oLow]

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_getSupertrend(oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, stopMultiplier, wicks)=>
    truerange = max(oHigh, oClose[1]) - min(oLow, oClose[1])
    
    averagetruerange = f_getMovingAverage(truerange, AtrMAType, AtrLength)
    atr = averagetruerange * stopMultiplier

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


f_getBuySellStops(oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, considerWicks, considerWicksForDelayByStep, stopMultiplier, targetMultiplier)=>
    barState = 0
    source = oClose
    
    truerange = max(oHigh, oClose[1]) - min(oLow, oClose[1])
    
    atr = f_getMovingAverage(truerange, AtrMAType, AtrLength)

    buyStop = source - atr * stopMultiplier
    sellStop = source + atr * stopMultiplier
    buyStopDerived = buyStop
    sellStopDerived = sellStop
    highTarget = considerWicks ? oHigh : source
    lowTarget = considerWicks ? oLow : source
    
    highTargetDelayByStep = considerWicksForDelayByStep ? oHigh : source
    lowTargetDelayByStep = considerWicksForDelayByStep ? oLow : source
    
    barState := highTarget > sellStopDerived[1] ? 1 : lowTarget < buyStopDerived[1] ? -1 : nz(barState[1],0)
    
    buyMultiplier = (barState == 1)? stopMultiplier : targetMultiplier
    sellMultiplier = (barState == -1)? stopMultiplier : targetMultiplier
    buyStop := source - atr * buyMultiplier
    sellStop := source + atr * sellMultiplier
    buyStop := barState == 1? max(buyStop, buyStop[1]) : barState == -1? min(buyStop, buyStop[1]) : buyStop
    sellStop := barState == 1? max(sellStop, sellStop[1]) : barState == -1? min(sellStop, sellStop[1]) : sellStop
    
    buyStopDerived := buyStop
    sellStopDerived := sellStop
    
    buyStopDerived := highTargetDelayByStep < sellStopDerived[1] and lowTargetDelayByStep > buyStopDerived[1] ? buyStopDerived[1] : buyStopDerived
    sellStopDerived := highTargetDelayByStep < sellStopDerived[1] and lowTargetDelayByStep > buyStopDerived[1] ? sellStopDerived[1] : sellStopDerived

    [buyStopDerived, sellStopDerived, barState]


f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on, gaps=barmerge.gaps_off)

f_multiple_resolution(HTFMultiplier) => 
    target_Res_In_Min = timeframe.multiplier * HTFMultiplier * (
      timeframe.isseconds   ? 1. / 60. :
      timeframe.isminutes   ? 1. :
      timeframe.isdaily     ? 1440. :
      timeframe.isweekly    ? 7. * 24. * 60. :
      timeframe.ismonthly   ? 30.417 * 24. * 60. : na)

    target_Res_In_Min     <= 0.0417       ? "1S"  :
      target_Res_In_Min   <= 0.167        ? "5S"  :
      target_Res_In_Min   <= 0.376        ? "15S" :
      target_Res_In_Min   <= 0.751        ? "30S" :
      target_Res_In_Min   <= 1440         ? tostring(round(target_Res_In_Min)) :
      tostring(round(min(target_Res_In_Min / 1440, 365))) + "D"
    
f_getPivotHighLow(oOpen, oClose, oHigh, oLow, HTFMultiplier, resolution, PivotLength)=>
    derivedResolution = resolution == ""? f_multiple_resolution(HTFMultiplier) : resolution
    HTFHigh = f_secureSecurity(syminfo.tickerid, derivedResolution, oHigh)
    HTFLow = f_secureSecurity(syminfo.tickerid, derivedResolution, oLow)
    CLOSEprev = f_secureSecurity(syminfo.tickerid, derivedResolution, oClose)
    pivothi = pivothigh(HTFHigh, PivotLength, PivotLength)
    pivotlo = pivotlow(HTFLow, PivotLength, PivotLength)
    pivothi := na(pivothi)? nz(pivothi[1]) : pivothi
    pivotlo := na(pivotlo)? nz(pivotlo[1]) : pivotlo
    [pivothi, pivotlo]
    
[oOpen, oClose, oHigh, oLow] = f_getOscilatorValues(oscilatorType, length, shortlength, longlength)
[dir, trailingStop] = f_getSupertrend(oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, stopMultiplier, wicks)

candleColor = colorByPreviousClose ?
                 (oClose[1] < oClose ? color.green : oClose[1] > oClose ? color.red : color.silver) : 
                 (oOpen < oClose ? color.green : oOpen > oClose ? color.red : color.silver)
plotcandle(oOpen, oHigh, oLow, oClose, 'Oscilator Candles', color = candleColor)

[buyStopDerived, sellStopDerived, barState] = f_getBuySellStops(oOpen, oClose, oHigh, oLow, AtrMAType, AtrLength, wicks, considerWicksForDelayByStep, stopMultiplier, targetMultiplier)

trailingStopDerived = barState == 1? buyStopDerived : sellStopDerived

plot(showSupertrend?trailingStopDerived:na, title="TrailingStop", style=plot.style_linebr, linewidth=1, color= barState == 1 ? color.green : color.red)

[pivotHigh, pivotLow] = f_getPivotHighLow(open, close, high, low, HTFMultiplier, resolution, PivotLength)

buyCondition = (barState == 1) and (close > pivotHigh or not useHTFPivot)
exitBuyConditin = (barState == -1)
sellCondition = (barState == -1) and (close < pivotLow or not useHTFPivot)
exitSellCondition = (barState == 1)

// strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca")
strategy.entry("Sell", strategy.short, when=sellCondition and inDateRange, oca_name="oca")
strategy.close("Buy", when = exitBuyConditin)
strategy.close( "Sell", when = exitSellCondition)