ڈبل ریل کی کامیابی کی اوسط کراس اوور کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-12-07 15:32:51
ٹیگز:

img

جائزہ

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

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

ڈبل ریل کی کامیابی سے چلنے والی اوسط کراس اوور کی حکمت عملی مندرجہ ذیل حصوں پر مشتمل ہے:

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

  2. انٹری ماڈیول: جب تیز رفتار حرکت پذیر اوسط اوسط سے زیادہ ہوتا ہے تو طویل عرصے تک چلنے والا اوسط ، اور جب اس سے نیچے گزر جاتا ہے تو مختصر ہوجاتا ہے۔ اسے رجحان کی سمت کا تعین کرنے کی بھی ضرورت ہے۔

  3. آؤٹ پٹ ماڈیول: جب تیز رفتار حرکت پذیر اوسط اوسط سے نیچے گزرتا ہے تو پوزیشنیں بند کردیں۔

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

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

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

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

  1. ڈبل ریل کی ترتیب سے رجحان کو زیادہ درست طریقے سے طے کیا جاسکتا ہے اور کھوئے ہوئے مواقع سے بچا جاسکتا ہے۔

  2. چلتی اوسط کراس اوور فلٹر غلط بریک آؤٹ کی وجہ سے ریورس آپریشن کرنے کا امکان کم کرسکتا ہے۔

  3. پیرامیٹرز کو ایڈجسٹ کرکے خطرہ اور واپسی کو بہتر بنایا جاسکتا ہے۔

  4. حکمت عملی کا منطق سادہ اور واضح ہے، سمجھنے اور ٹریک کرنے میں آسان ہے.

خطرے کا تجزیہ

ڈبل ریل کی کامیابی سے چلنے والی اوسط کراس اوور حکمت عملی میں بھی کچھ خطرات ہیں ، بنیادی طور پر:

  1. ڈبل ریل کی ترتیب اب بھی مکمل طور پر رجحان کی غلط تشخیص کے امکان کو ختم نہیں کر سکتی.

  2. حرکت پذیر اوسط پیرامیٹرز کی غلط ترتیب سے تجارت کی کثرت یا ریورس آپریشنز میں بہت زیادہ اضافہ ہوسکتا ہے۔

  3. بہت زیادہ ڈھیلے سٹاپ نقصان کے مقامات مؤثر طریقے سے واحد نقصان کو کنٹرول نہیں کر سکتے ہیں.

اس کے مطابق حل یہ ہیں:

  1. دوہری ریل پیرامیٹرز کو مناسب طریقے سے ایڈجسٹ کریں تاکہ بریک آؤٹ فیصلے کی حد کو وسیع کیا جاسکے۔

  2. مناسب تجارتی تعدد کو یقینی بنانے کے لئے چلتی اوسط سائیکل پورٹ فولیو کو بہتر بنائیں۔

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

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

ڈبل ریل توڑنے والی چلتی اوسط کراس اوور حکمت عملی میں بھی مندرجہ ذیل اصلاح کی سمتیں ہیں:

  1. مثالی پورٹ فولیو تلاش کرنے کے لئے مختلف چلتی اوسط سائیکل پیرامیٹرز کی جانچ کریں.

  2. ایک کثیر متحرک اوسط فلٹرنگ نظام کی تعمیر کے لئے زیادہ چلتی اوسط شامل کرنے کی کوشش کریں.

  3. مختلف سٹاپ نقصان کے الگورتھم کی جانچ کریں، جیسے ٹریلنگ سٹاپ نقصان، آسکیلنگ سٹاپ نقصان وغیرہ.

  4. سرمایہ کے استعمال کی کارکردگی کو بہتر بنانے کے لئے مرکب میکانزم شامل کریں.

  5. فلٹرنگ کے لیے دیگر اشارے جیسے بولنگر بینڈ، KDJ وغیرہ کے ساتھ مل کر۔

خلاصہ

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


/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Author = Dustin Drummond https://www.tradingview.com/u/Dustin_D_RLT/
//Strategy based in part on original 10ema Basic Swing Trade Strategy by Matt Delong: https://www.tradingview.com/u/MattDeLong/
//Link to original 10ema Basic Swing Trade Strategy: https://www.tradingview.com/script/8yhGnGCM-10ema-Basic-Swing-Trade-Strategy/
//This is the Original EMAC - Exponential Moving Average Cross Strategy built as a class for reallifetrading dot com and so has all the default settings and has not been optimized
//I would not recomend using this strategy with the default settings and is for educational purposes only
//For the fully optimized version please come back around the same time tomorrow 6/16/21 for the EMAC - Exponential Moving Average Cross - Optimized
//EMAC - Exponential Moving Average Cross
strategy(title="EMAC - Exponential Moving Average Cross", shorttitle = "EMAC", overlay = true, calc_on_every_tick=false, default_qty_value = 100, initial_capital = 100000, default_qty_type = strategy.fixed, pyramiding = 0, process_orders_on_close=true)
//creates a time filter to prevent "too many orders error" and allows user to see Strategy results per year by changing input in settings in Stratey Tester
startYear = input(2015, title="Start Year", minval=1980, step=1)
timeFilter = (year >= startYear) and (month >= 1) and (dayofmonth >= 1)
//R Size (Risk Amount)
rStaticOrPercent = input(title="R Static or Percent", defval="Static", options=["Static", "Percent"])
rSizeStatic = input(2000, title="R Size Static", minval=1, step=100)
rSizePercent = input(3, title="R Size Percent", minval=.01, step=.01)
rSize = rStaticOrPercent == "Static" ? rSizeStatic : rStaticOrPercent == "Percent" ? (rSizePercent * .01 * strategy.equity) : 1
//Recent Trend Indicator "See the standalone version for detailed description"
res = input(title="Trend Timeframe", type=input.resolution, defval="W")
trend = input(26, minval=1, title="# of Bars for Trend")
trendMult = input(15, minval=0, title="Trend Growth %", step=.25) / 100
currentClose = security(syminfo.tickerid, res, close)
pastClose = security(syminfo.tickerid, res, close[trend])
//Trend Indicator
upTrend = (currentClose >= (pastClose * (1 + trendMult)))
downTrend = (currentClose <= (pastClose * (1 - trendMult)))
sidewaysUpTrend = (currentClose < (pastClose * (1 + trendMult)) and (currentClose > pastClose))
sidewaysDownTrend = (currentClose > (pastClose * (1 - trendMult)) and (currentClose < pastClose))
//Plot Trend on Chart
plotshape(upTrend, "Up Trend", style=shape.square, location=location.top, color=color.green, size=size.small)
plotshape(downTrend, "Down Trend", style=shape.square, location=location.top, color=color.red, size=size.small)
plotshape(sidewaysUpTrend, "Sideways Up Trend", style=shape.square, location=location.top, color=color.yellow, size=size.small)
plotshape(sidewaysDownTrend, "Sideways Down Trend", style=shape.square, location=location.top, color=color.orange, size=size.small)
//What trend signals to use in entrySignal
trendRequired = input(title="Trend Required", defval="Orange", options=["Green", "Yellow", "Orange", "Red"])
goTrend = trendRequired == "Orange" ? upTrend or sidewaysUpTrend or sidewaysDownTrend : trendRequired == "Yellow" ? upTrend or sidewaysUpTrend : trendRequired == "Green" ? upTrend : trendRequired == "Red" ? upTrend or sidewaysUpTrend or sidewaysDownTrend or downTrend : na
//MAs Inputs Defalt is 10 EMA, 20 EMA, 50 EMA, 100 SMA and 200 SMA
ma1Length = input(10, title="MA1 Period", minval=1, step=1)
ma1Type = input(title="MA1 Type", defval="EMA", options=["SMA", "EMA", "WMA"])
ma2Length = input(20, title="MA2 Period", minval=1, step=1)
ma2Type = input(title="MA2 Type", defval="EMA", options=["SMA", "EMA", "WMA"])
ma3Length = input(50, title="MA3 Period", minval=1, step=1)
ma3Type = input(title="MA3 Type", defval="EMA", options=["SMA", "EMA", "WMA"])
ma4Length = input(100, title="MA4 Period", minval=1, step=1)
ma4Type = input(title="MA4 Type", defval="SMA", options=["SMA", "EMA", "WMA"])
ma5Length = input(200, title="MA5 Period", minval=1, step=1)
ma5Type = input(title="MA5 Type", defval="SMA", options=["SMA", "EMA", "WMA"])
//MAs defined
ma1 = ma1Type == "EMA" ? ema(close, ma1Length) : ma1Type == "SMA" ? sma(close, ma1Length) : wma(close, ma1Length)
ma2 = ma2Type == "EMA" ? ema(close, ma2Length) : ma2Type == "SMA" ? sma(close, ma2Length) : wma(close, ma2Length)
ma3 = ma3Type == "EMA" ? ema(close, ma3Length) : ma3Type == "SMA" ? sma(close, ma3Length) : wma(close, ma3Length)
ma4 = ma4Type == "SMA" ? sma(close, ma4Length) : ma4Type == "EMA" ? ema(close, ma4Length) : wma(close, ma4Length)
ma5 = ma5Type == "SMA" ? sma(close, ma5Length) : ma5Type == "EMA" ? ema(close, ma5Length) : wma(close, ma5Length)
//Plot MAs
plot(ma1, title="MA1", color=color.yellow, linewidth=1, style=plot.style_line)
plot(ma2, title="MA2", color=color.purple, linewidth=1, style=plot.style_line)
plot(ma3, title="MA3", color=#00FFFF, linewidth=1, style=plot.style_line)
plot(ma4, title="MA4", color=color.blue, linewidth=2, style=plot.style_line)
plot(ma5, title="MA5", color=color.orange, linewidth=2, style=plot.style_line)
//Allows user to toggle on/off ma1 > ma2 filter
enableShortMAs = input(title="Enable Short MA Cross Filter", defval="Yes", options=["Yes", "No"])
shortMACross = enableShortMAs == "Yes" and ma1 > ma2 or enableShortMAs == "No"
//Allows user to toggle on/off ma4 > ma5 filter
enableLongMAs = input(title="Enable Long MA Cross Filter", defval="Yes", options=["Yes", "No"])
longMACross = enableLongMAs == "Yes" and ma4 >= ma5 or enableLongMAs == "No"
//Entry Signals
entrySignal = (strategy.position_size <= 0 and close[1] < ma1[1] and close > ma1 and close > ma2 and close > ma3 and shortMACross and ma1 > ma3 and longMACross and goTrend)
secondSignal = (strategy.position_size > 0 and close[1] < ma1[1] and close > ma1 and close > ma2 and close > ma3 and shortMACross and ma1 > ma3 and longMACross and goTrend)
plotshape(entrySignal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(secondSignal, style=shape.triangleup, location=location.belowbar, color=color.lime, size=size.small)
//ATR for Stops
atrValue = (atr(14))
//to test ATR enable next line
//plot(atrValue, linewidth=1, color=color.black, style=plot.style_line)
atrMult = input(2.5, minval=.25, step=.25, title="Stop ATR Multiple")
//Only target3Mult is used in current strategy target1 and target2 might be used in the future with pyramiding
//target1Mult = input(1.0, minval=.25, step=.25, title="Targert 1 Multiple")
//target2Mult = input(2.0, minval=.25, step=.25, title="Targert 2 Multiple")
target3Mult = input(3.0, minval=.25, step=.25, title="Target Multiple")
enableAtrStop = input(title="Enable ATR Stops", defval="Yes", options=["Yes", "No"])
//Intitial Recomended Stop Location
atrStop = entrySignal and ((high - (atrMult * atrValue)) < low) ? (high - (atrMult * atrValue)) : low
//oneAtrStop is used for testing only enable next 2 lines to test
//oneAtrStop = entrySignal ? (high - atrValue) : na
//plot(oneAtrStop, "One ATR Stop", linewidth=2, color=color.orange, style=plot.style_linebr)
initialStop = entrySignal and enableAtrStop == "Yes" ? atrStop : entrySignal ? low : na
//Stops changed to stoploss to hold value for orders the next line is old code "bug"
//plot(initialStop, "Initial Stop", linewidth=2, color=color.red, style=plot.style_linebr)
//Set Initial Stop and hold value "debug code"
stoploss = valuewhen(entrySignal, initialStop, 0)
plot(stoploss, title="Stop", linewidth=2, color=color.red)
enableStops = input(title="Enable Stops", defval="Yes", options=["Yes", "No"])
yesStops = enableStops == "Yes" ? 1 : enableStops == "No" ? 0 : na
//Calculate size of trade based on R Size
//Original buggy code: 
//positionSize = (rSize/(close - initialStop))
//Added a minimum order size of 1 "debug code"
positionSize = (rSize/(close - initialStop)) > 1 ? (rSize/(close - initialStop)) : 1
//Targets
//Enable or Disable Targets
enableTargets = input(title="Enable Targets", defval="Yes", options=["Yes", "No"])
yesTargets = enableTargets == "Yes" ? 1 : enableTargets == "No" ? 0 : na
//Only target3 is used in current strategy target1 and target2 might be used in the future with pyramiding
//target1 = entrySignal ? (close + ((close - initialStop) * target1Mult)) : na
//target2 = entrySignal ? (close + ((close - initialStop) * target2Mult)) : na
target3 = entrySignal ? (close + ((close - initialStop) * target3Mult)) : na
//plot(target1, "Target 1", linewidth=2, color=color.green, style=plot.style_linebr)
//plot(target2, "Target 2", linewidth=2, color=color.green, style=plot.style_linebr)
plot(target3, "Target 3", linewidth=2, color=color.green, style=plot.style_linebr)
//Set Target and hold value "debug code"
t3 = valuewhen(entrySignal, target3, 0)
//To test t3 and see plot enable next line
//plot(t3, title="Target", linewidth=2, color=color.green)
//MA1 Cross Exit
enableEarlyExit = input(title="Enable Early Exit", defval="Yes", options=["Yes", "No"])
earlyExit = enableEarlyExit == "Yes" ? 1 : enableEarlyExit == "No" ? 0 : na
ma1CrossExit = strategy.position_size > 0 and close < ma1
//Entry Order
strategy.order("Entry", long = true, qty = positionSize, when = (strategy.position_size <= 0 and entrySignal and timeFilter))
//Early Exit Order
strategy.close_all(when = ma1CrossExit and timeFilter and earlyExit, comment = "MA1 Cross Exit")
//Stop and Target Orders
//strategy.cancel orders are needed to prevent bug with Early Exit Order
strategy.order("Stop Loss", false, qty = strategy.position_size, stop=stoploss, oca_name="Exit",when = timeFilter and yesStops, comment = "Stop Loss")
strategy.cancel("Stop Loss", when = ma1CrossExit and timeFilter and earlyExit)
strategy.order("Target", false, qty = strategy.position_size, limit=t3, oca_name="Exit",  when = timeFilter and yesTargets, comment = "Target")
strategy.cancel("Target", when = ma1CrossExit and timeFilter and earlyExit)

مزید