دوہری حرکت پذیر اوسط کراس اوور الگورتھمک ٹریڈنگ کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-10-30 15:27:34
ٹیگز:

img

جائزہ

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

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

  1. مختلف پیرامیٹرز کے ساتھ VWAP چلتی اوسط کے دو گروپوں کا حساب لگائیں ، جو بالترتیب طویل مدتی اور قلیل مدتی رجحانات کی نمائندگی کرتے ہیں۔

    • سست Tenkansen اور Kijunsen طویل مدتی رجحان کا حساب
    • فاسٹ Tenkansen اور Kijunsen مختصر مدت کے رجحان کا حساب
  2. Tenkansen اور Kijunsen کے اوسط کو سست اور تیز رفتار اوسط کے طور پر لے لو.

  3. بلنگر بینڈ کا حساب لگانا تاکہ استحکام اور بریکآؤٹس کی نشاندہی کی جاسکے۔

    • درمیانی لائن تیز اور سست ایم اے کا اوسط ہے
    • اوپری اور نچلے بینڈ کو بریک آؤٹ کا پتہ لگانے کے لئے استعمال کیا جاتا ہے
  4. حجم توانائی کا تعین کرنے کے لئے TSV کا حساب لگائیں

    • 0 سے زیادہ TSV تیزی سے حجم کی نشاندہی کرتا ہے
    • اس کے ای ایم اے سے زیادہ ٹی ایس وی مضبوطی کی رفتار کا اشارہ کرتا ہے
  5. زیادہ خریدنے اور زیادہ فروخت کی حالتوں کی نشاندہی کرنے کے لئے RSI کا حساب لگائیں

    • RSI 30 سے نیچے خریدنے کے لئے oversold زون ہے
    • RSI 70 سے اوپر فروخت کے لئے overbought زون ہے
  6. داخلے کی شرائط:

    • تیز رفتار ایم اے آہستہ آہستہ ایم اے سے عبور کرتا ہے
    • اوپری بولنگر بینڈ کے اوپر قریب کراس
    • TSV 0 سے زیادہ اور EMA
    • RSI 30 سے کم
  7. باہر نکلنے کے حالات:

    • تیز رفتار ایم اے آہستہ آہستہ ایم اے سے نیچے گزرتا ہے
    • RSI 70 سے زیادہ

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

  1. دوہری حرکت پذیر اوسط نظام طویل اور قلیل مدتی رجحانات دونوں کو پکڑتا ہے

  2. آر ایس آئی زیادہ خریدے گئے زون خریدنے اور زیادہ فروخت والے زون فروخت کرنے سے گریز کرتا ہے

  3. TSV کافی حجم کو یقینی بناتا ہے جو رجحان کی حمایت کرتا ہے

  4. بولنگر بینڈ اہم بریک آؤٹ پوائنٹس کی نشاندہی کرتے ہیں

  5. اشارے کا امتزاج جھوٹے بریک آؤٹس کو فلٹر کرنے میں مدد کرتا ہے

خطرے کا تجزیہ

  1. ایم اے سسٹم جھوٹے سگنلز کا شکار ہیں، دوسرے اشارے کے ساتھ فلٹرنگ کی ضرورت ہے

  2. آر ایس آئی پیرامیٹرز کو بہتر بنانے کی ضرورت ہے، دوسری صورت میں خرید / فروخت پوائنٹس کو یاد کر سکتے ہیں

  3. TSV بھی پیرامیٹرز کے لئے بہت حساس ہے، محتاط جانچ کی ضرورت ہے

  4. توڑنے BB اوپری بینڈ جھوٹے توڑنے ہو سکتا ہے، تصدیق کی ضرورت ہے

  5. بہت سے اشارے کو بہتر بنانا مشکل ہے، بہت زیادہ فٹ ہونے کا خطرہ ہے

  6. ٹرین / ٹیسٹ کے ناکافی اعداد و شمار وکر فٹنگ کا سبب بن سکتا ہے

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

  1. بہترین پیرامیٹر مجموعے تلاش کرنے کے لئے زیادہ ادوار کی جانچ کریں

  2. RSI کے ساتھ تبدیل یا یکجا کرنے کے لئے MACD، KD جیسے دیگر اشارے کی کوشش کریں

  3. پیرامیٹر کی اصلاح کے لئے واک فارورڈ تجزیہ کا استعمال کریں

  4. ایک ہی تجارت کے نقصان کو کنٹرول کرنے کے لئے سٹاپ نقصان شامل کریں

  5. سگنل کی پیشن گوئی میں مدد کے لئے مشین لرننگ ماڈلز پر غور کریں

  6. مختلف مارکیٹوں کے لئے پیرامیٹرز کو ایڈجسٹ کریں، ایک پیرامیٹر سیٹ پر زیادہ فٹ نہیں

نتیجہ

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


/*backtest
start: 2022-10-23 00:00:00
end: 2023-10-29 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4

// Credits

// "Vwap with period" code which used in this strategy to calculate the leadLine was written by "neolao" active on https://tr.tradingview.com/u/neolao/
// "TSV" code which used in this strategy was written by "liw0" active on https://www.tradingview.com/u/liw0. The code is corrected by "vitelot" December 2018.
// "Vidya" code which used in this strategy was written by "everget" active on https://tr.tradingview.com/u/everget/

strategy("HYE Combo Market [Strategy] (Vwap Mean Reversion + Trend Hunter)", overlay = true, initial_capital = 1000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, commission_value = 0.025)
  
//Strategy inputs

source = input(title = "Source", defval = close, group = "Mean Reversion Strategy Inputs")
smallcumulativePeriod = input(title = "Small VWAP", defval = 8, group = "Mean Reversion Strategy Inputs")
bigcumulativePeriod = input(title = "Big VWAP", defval = 10, group = "Mean Reversion Strategy Inputs")
meancumulativePeriod = input(title = "Mean VWAP", defval = 50, group = "Mean Reversion Strategy Inputs")
percentBelowToBuy = input(title = "Percent below to buy %", defval = 2, group = "Mean Reversion Strategy Inputs")
rsiPeriod = input(title = "Rsi Period", defval = 2, group = "Mean Reversion Strategy Inputs")
rsiEmaPeriod = input(title = "Rsi Ema Period", defval = 5, group = "Mean Reversion Strategy Inputs") 
rsiLevelforBuy = input(title = "Maximum Rsi Level for Buy", defval = 30, group = "Mean Reversion Strategy Inputs")
slowtenkansenPeriod = input(9, minval=1, title="Slow Tenkan Sen VWAP Line Length", group = "Trend Hunter Strategy Inputs")
slowkijunsenPeriod = input(13, minval=1, title="Slow Kijun Sen VWAP Line Length", group = "Trend Hunter Strategy Inputs")
fasttenkansenPeriod = input(3, minval=1, title="Fast Tenkan Sen VWAP Line Length", group = "Trend Hunter Strategy Inputs")
fastkijunsenPeriod = input(7, minval=1, title="Fast Kijun Sen VWAP Line Length", group = "Trend Hunter Strategy Inputs")
BBlength = input(20, minval=1, title= "Bollinger Band Length", group = "Trend Hunter Strategy Inputs")
BBmult = input(2.0, minval=0.001, maxval=50, title="Bollinger Band StdDev", group = "Trend Hunter Strategy Inputs")
tsvlength  = input(20, minval=1, title="TSV Length", group = "Trend Hunter Strategy Inputs")
tsvemaperiod = input(7, minval=1, title="TSV Ema Length", group = "Trend Hunter Strategy Inputs")
length = input(title="Vidya Length", type=input.integer, defval=20, group = "Trend Hunter Strategy Inputs") 
src = input(title="Vidya Source", type=input.source, defval= hl2 , group = "Trend Hunter Strategy Inputs")

// Vidya Calculation 

getCMO(src, length) =>
    mom = change(src)
    upSum = sum(max(mom, 0), length)
    downSum = sum(-min(mom, 0), length)
    out = (upSum - downSum) / (upSum + downSum)
    out

cmo = abs(getCMO(src, length))

alpha = 2 / (length + 1)

vidya = 0.0
vidya := src * alpha * cmo + nz(vidya[1]) * (1 - alpha * cmo)

// Make input options that configure backtest date range 

startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31, group = "Strategy Date Range")
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12, group = "Strategy Date Range")
startYear = input(title="Start Year", type=input.integer,
     defval=2000, minval=1800, maxval=2100, group = "Strategy Date Range")

endDate = input(title="End Date", type=input.integer, 
     defval=31, minval=1, maxval=31, group = "Strategy Date Range")
endMonth = input(title="End Month", type=input.integer,
     defval=12, minval=1, maxval=12, group = "Strategy Date Range") 
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100, group = "Strategy Date Range")
     
inDateRange = true
// Mean Reversion Strategy Calculation 

typicalPriceS = (high + low + close) / 3
typicalPriceVolumeS = typicalPriceS * volume
cumulativeTypicalPriceVolumeS = sum(typicalPriceVolumeS, smallcumulativePeriod)
cumulativeVolumeS = sum(volume, smallcumulativePeriod)
smallvwapValue = cumulativeTypicalPriceVolumeS / cumulativeVolumeS

typicalPriceB = (high + low + close) / 3
typicalPriceVolumeB = typicalPriceB * volume
cumulativeTypicalPriceVolumeB = sum(typicalPriceVolumeB, bigcumulativePeriod)
cumulativeVolumeB = sum(volume, bigcumulativePeriod)
bigvwapValue = cumulativeTypicalPriceVolumeB / cumulativeVolumeB 

typicalPriceM = (high + low + close) / 3
typicalPriceVolumeM = typicalPriceM * volume
cumulativeTypicalPriceVolumeM = sum(typicalPriceVolumeM, meancumulativePeriod)
cumulativeVolumeM = sum(volume, meancumulativePeriod)
meanvwapValue = cumulativeTypicalPriceVolumeM / cumulativeVolumeM

rsiValue = rsi(source, rsiPeriod)
rsiEMA   = ema(rsiValue, rsiEmaPeriod)
buyMA = ((100 - percentBelowToBuy) / 100) * bigvwapValue[0]

inTrade = strategy.position_size > 0
notInTrade = strategy.position_size <= 0

if(crossunder(smallvwapValue, buyMA) and rsiEMA < rsiLevelforBuy and close < meanvwapValue and inDateRange and notInTrade)
    strategy.entry("BUY-M", strategy.long)

if(close > meanvwapValue or not inDateRange)
    strategy.close("BUY-M")
    
// Trend Hunter Strategy Calculation

// Slow Tenkan Sen Calculation

typicalPriceTS = (high + low + close) / 3
typicalPriceVolumeTS = typicalPriceTS * volume
cumulativeTypicalPriceVolumeTS = sum(typicalPriceVolumeTS, slowtenkansenPeriod)
cumulativeVolumeTS = sum(volume, slowtenkansenPeriod)
slowtenkansenvwapValue = cumulativeTypicalPriceVolumeTS / cumulativeVolumeTS

// Slow Kijun Sen Calculation

typicalPriceKS = (high + low + close) / 3
typicalPriceVolumeKS = typicalPriceKS * volume
cumulativeTypicalPriceVolumeKS = sum(typicalPriceVolumeKS, slowkijunsenPeriod)
cumulativeVolumeKS = sum(volume, slowkijunsenPeriod)
slowkijunsenvwapValue = cumulativeTypicalPriceVolumeKS / cumulativeVolumeKS

// Fast Tenkan Sen Calculation

typicalPriceTF = (high + low + close) / 3
typicalPriceVolumeTF = typicalPriceTF * volume
cumulativeTypicalPriceVolumeTF = sum(typicalPriceVolumeTF, fasttenkansenPeriod)
cumulativeVolumeTF = sum(volume, fasttenkansenPeriod)
fasttenkansenvwapValue = cumulativeTypicalPriceVolumeTF / cumulativeVolumeTF

// Fast Kijun Sen Calculation

typicalPriceKF = (high + low + close) / 3
typicalPriceVolumeKF = typicalPriceKS * volume
cumulativeTypicalPriceVolumeKF = sum(typicalPriceVolumeKF, fastkijunsenPeriod)
cumulativeVolumeKF = sum(volume, fastkijunsenPeriod)
fastkijunsenvwapValue = cumulativeTypicalPriceVolumeKF / cumulativeVolumeKF

// Slow LeadLine Calculation
 
lowesttenkansen_s = lowest(slowtenkansenvwapValue, slowtenkansenPeriod)
highesttenkansen_s = highest(slowtenkansenvwapValue, slowtenkansenPeriod)

lowestkijunsen_s = lowest(slowkijunsenvwapValue, slowkijunsenPeriod)
highestkijunsen_s = highest(slowkijunsenvwapValue, slowkijunsenPeriod)

slowtenkansen = avg(lowesttenkansen_s, highesttenkansen_s)
slowkijunsen = avg(lowestkijunsen_s, highestkijunsen_s)
slowleadLine = avg(slowtenkansen, slowkijunsen)

// Fast LeadLine Calculation 
 
lowesttenkansen_f = lowest(fasttenkansenvwapValue, fasttenkansenPeriod)
highesttenkansen_f = highest(fasttenkansenvwapValue, fasttenkansenPeriod)

lowestkijunsen_f = lowest(fastkijunsenvwapValue, fastkijunsenPeriod)
highestkijunsen_f = highest(fastkijunsenvwapValue, fastkijunsenPeriod) 

fasttenkansen = avg(lowesttenkansen_f, highesttenkansen_f)
fastkijunsen = avg(lowestkijunsen_f, highestkijunsen_f)
fastleadLine = avg(fasttenkansen, fastkijunsen)

// BBleadLine Calculation
 
BBleadLine = avg(fastleadLine, slowleadLine)

// Bollinger Band Calculation
 
basis = sma(BBleadLine, BBlength)
dev = BBmult * stdev(BBleadLine, BBlength)
upper = basis + dev  
lower = basis - dev 

// TSV Calculation

tsv = sum(close>close[1]?volume*(close-close[1]):close<close[1]?volume*(close-close[1]):0,tsvlength)
tsvema = ema(tsv, tsvemaperiod)

// Rules for Entry & Exit  

if(fastleadLine > fastleadLine[1] and slowleadLine > slowleadLine[1] and tsv > 0 and tsv > tsvema and close > upper and close > vidya and inDateRange and notInTrade)
    strategy.entry("BUY-T", strategy.long)
 
if((fastleadLine < fastleadLine[1] and slowleadLine < slowleadLine[1]) or not inDateRange)
    strategy.close("BUY-T")

// Plots 

plot(meanvwapValue, title="MEAN VWAP", linewidth=2, color=color.yellow)

//plot(vidya, title="VIDYA", linewidth=2, color=color.green)

//colorsettingS = input(title="Solid Color Slow Leadline", defval=false, type=input.bool)
//plot(slowleadLine, title = "Slow LeadLine", color = colorsettingS ? color.aqua : slowleadLine > slowleadLine[1] ? color.green : color.red, linewidth=3)

//colorsettingF = input(title="Solid Color Fast Leadline", defval=false, type=input.bool)
//plot(fastleadLine, title = "Fast LeadLine", color = colorsettingF ? color.orange : fastleadLine > fastleadLine[1] ? color.green : color.red, linewidth=3)

//p1 = plot(upper, "Upper BB", color=#2962FF)
//p2 = plot(lower, "Lower BB", color=#2962FF)
//fill(p1, p2, title = "Background", color=color.blue)

//plot(smallvwapValue, color=#13C425, linewidth=2)
//plot(bigvwapValue, color=#CA1435, linewidth=2)


مزید