
EMAC اشاریہ منتقل اوسط کراس اصلاح کی حکمت عملی بنیادی EMAC حکمت عملی پر پیرامیٹرز کی اصلاح کے بعد ورژن ہے۔ اس حکمت عملی میں رجحان کا فیصلہ ، متعدد اوسط لائن فلٹرنگ اور اسٹاپ نقصان کا اختتام ہوتا ہے جس کا مقصد وسط اور لمبی لائن رجحانات کو پکڑنے کے لئے رجحان کی پیروی کرنا ہے۔
حالیہ رجحانات کی سمت کا تعین کریں: پچھلے 26 ادوار میں اختتامی قیمتوں میں اضافے اور کمی کا حساب لگائیں ، اور اس کا تعین کریں کہ یہ اوپر ، نیچے ، اتار چڑھاؤ ہے۔
ایک سے زیادہ اوسط لائن فلٹرنگ: 10 سائیکل ، 20 سائیکل ، اور 34 سائیکل ای ایم اے کا حساب لگائیں ، جب وہ 50 سائیکل ایس ایم اے سے گزرتے ہیں تو خریدنے کا اشارہ دیتے ہیں۔
اے ٹی آر اسٹاپ: جب انٹری سگنل ظاہر ہوتا ہے تو ، اسٹاپ کی جگہ کو انٹری کالم کی کم یا اونچائی کم 2.5 اے ٹی آر کے طور پر طے کیا جاتا ہے۔
متحرک رکاوٹ: قیمتوں میں اضافے کے ساتھ آہستہ آہستہ اوپر کی طرف بڑھنے والی رکاوٹ لائن۔
ٹارگٹ اسٹاپ: جب انٹری سگنل ظاہر ہوتا ہے تو ، ہدف کی پوزیشن اس وقت کی بندش کی قیمت کے علاوہ 3 اے ٹی آر پر طے کی جاتی ہے۔
ایم اے میڈین لائن ریڈیکٹ اسٹاپ نقصان سے باہر نکلنا: جب قیمت 10 دن کے ای ایم اے سے باہر نکلتی ہے تو فعال اسٹاپ نقصان سے باہر نکلنا
ایک سے زیادہ اوسط لائن فلٹرنگ سگنل کی وشوسنییتا میں اضافہ کرتی ہے اور جھوٹے بریک آؤٹ سے گمراہ ہونے سے بچتی ہے۔
اے ٹی آر اسٹاپ کا استعمال کرتے ہوئے ، مارکیٹ میں اتار چڑھاؤ کے مطابق معقول اسٹاپ فاصلہ طے کیا جاسکتا ہے۔
حرکت پذیر روکنے سے روکنے کی لائن آہستہ آہستہ اوپر کی طرف بڑھتی ہے ، جس سے منافع کا ایک حصہ محفوظ ہوتا ہے۔
اہداف کو روکنے کے لئے، مناسب منافع کے اہداف مقرر کریں، لالچ سے بچیں، اور منافع کو ضائع کرنے سے بچیں.
ایم اے ری سیٹ آؤٹ آؤٹ کو روکنے کے لئے وقت کی اجازت دیتا ہے جب رجحان تبدیل ہوجاتا ہے.
زلزلے کے حالات میں ، ای ایم اے اوسط لائن متعدد کراس پارسروں کی تشکیل کا شکار ہے ، جس سے لگاتار نقصان کا خطرہ پیدا ہوسکتا ہے۔ اس امکان کو کم کرنے کے لئے ای ایم اے پیرامیٹرز کو مناسب طریقے سے بڑھاوا دیا جاسکتا ہے ، یا ایم اے گولڈ فورک فلٹرنگ کے حالات میں اضافہ کیا جاسکتا ہے۔
جب اے ٹی آر کی تعداد زیادہ ہو تو ، روکنے کا فاصلہ بہت بڑا ہوتا ہے ، اور نقصان کا خطرہ بڑھ جاتا ہے۔ اے ٹی آر کی چلتی اوسط کو اپنانے یا اے ٹی آر پر ایک سکڑنے والے تناسب فیکٹر سے ضرب دینے پر غور کیا جاسکتا ہے۔
رات کے وقفے کے خطرے کو مدنظر نہیں رکھا گیا ہے۔ رات کے وقفے کے وقت کے فیصلے کی منطق کو شامل کیا جاسکتا ہے ، تاکہ سگنل کو غیر تجارت کے وقت ظاہر ہونے سے بچایا جاسکے۔
بڑے بازار کی حالت کے اثرات کو مدنظر نہیں رکھا گیا۔ بڑے بازار کے رجحانات کے بارے میں فیصلے کو حکمت عملی کی ایک اہم شرط کے طور پر شامل کیا جاسکتا ہے ، تاکہ بڑے بازار میں منفی صورتحال میں ہونے والے نقصان کو کم کیا جاسکے۔
مختلف لمبائیوں کے ای ایم اے پیرامیٹرز کے مجموعے کی جانچ کی جاسکتی ہے تاکہ مختلف اقسام کے لئے زیادہ مناسب اوسط لمبائی کی لمبائی تلاش کی جاسکے
اسٹاپ نقصان کے فاصلے کو بہتر بنانے کے لئے اے ٹی آر کے چلنے والے اوسط یا فیکٹر سکریپشن کے طریقوں کی جانچ کی جاسکتی ہے۔
رات کے وقفے کے وقت کے فیصلے کی منطق کو شامل کیا جاسکتا ہے تاکہ راتوں رات کے خطرے سے بچایا جاسکے۔
بڑے بازاروں کے رجحانات کے بارے میں فیصلے میں شامل ہوسکتے ہیں ، بڑے بازاروں کے رجحانات کے خلاف منفی ہونے پر سوئچنگ کی شرائط طے کریں۔
کئی سالوں کے تاریخی اعداد و شمار کو ریورس ٹیسٹ کرکے پیرامیٹرز کا مجموعہ منتخب کیا جاسکتا ہے ، تاکہ حکمت عملی کو بیک اپ میں زیادہ سے زیادہ استحکام ہو۔
ای ایم اے سی انڈیکس منتقل اوسط کراس لائن آپٹیمائزیشن حکمت عملی رجحانات کے فیصلے ، ایک سے زیادہ اوسط فلٹرنگ اور متحرک اسٹاپ نقصان کو روکنے کے ساتھ جوڑتی ہے ، جس کا مقصد وسط اور لمبی لائن رجحانات کی پیروی کرنا ہے۔ اصل ورژن کے مقابلے میں پیرامیٹرز کی اصلاح کی گئی ہے ، جس سے بہتر ڈسپلے کی کارکردگی کی توقع کی جاسکتی ہے۔ تاہم ، اس حکمت عملی کو مزید بہتر بنانے اور بہتر بنانے کی ضرورت ہے ، جس میں متعدد مارکیٹ کے حالات کا جواب دینے کے لئے مزید منطقی فیصلے شامل کیے جائیں ، جس سے حقیقی تجارت میں ڈسپلے کا خطرہ کم ہوجائے ، حکمت عملی کی استحکام اور منافع بخش صلاحیت میں اضافہ ہو۔
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
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 = true
//R Size (Risk Amount)
rStaticOrPercent = input(title="R Static or Percent", defval="Percent", 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="Red", 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(34, 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="No", 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="No", 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="No", 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="No", 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="No", 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)