
یہ کثیر ٹائم فریم انڈیکس منتقل اوسط کراسنگ حکمت عملی ایک خودکار تجارتی نظام ہے جو EMA کراسنگ سگنل پر مبنی ہے۔ یہ مختلف ٹائم فریموں کے EMA کا استعمال کرتے ہوئے ٹریڈنگ سگنل تیار کرتا ہے ، اور خطرے کو سنبھالنے کے لئے اسٹاپ نقصان اور منافع بند کرنے کے طریقہ کار کو جوڑتا ہے۔ یہ حکمت عملی بنیادی طور پر تیز EMA اور سست EMA کے مابین کراسنگ پر انحصار کرتی ہے اور اعلی ٹائم فریم EMA کے مابین ممکنہ تجارتی مواقع کی نشاندہی کرتی ہے۔
اس حکمت عملی کا بنیادی اصول مارکیٹ کے رجحانات کی نشاندہی کرنے اور تجارتی سگنل پیدا کرنے کے لئے متعدد وقت کے ادوار کی اشاریہ منتقل اوسط ((EMA) کا استعمال کرنا ہے۔ خاص طور پر:
تیز رفتار لائن کے طور پر 9 سیکنڈ ای ایم اے ، سست رفتار لائن کے طور پر 50 سیکنڈ ای ایم اے ، اور 15 منٹ کی مدت کے دوران 100 سیکنڈ ای ایم اے کو اعلی مدت کی مدت کے حوالہ کے طور پر استعمال کریں۔
سگنل خریدنے کی شرائط:
سگنل فروخت کرنے کی شرائط:
ٹرانزیکشن مینجمنٹ:
ٹرانزیکشن وقت کنٹرول:
ملٹی ٹائم پیکیج تجزیہ: مختلف ٹائم پیکیجز کے ساتھ مل کر ای ایم اے ، جعلی سگنل کو کم کرنے اور تجارت کے معیار کو بہتر بنانے میں مدد کرتا ہے۔
رجحانات کا سراغ لگانا: ای ایم اے کراس اور پوزیشن تعلقات کے ذریعہ ، مارکیٹ کے رجحانات کو مؤثر طریقے سے پکڑنے کے قابل۔
خطرے کا انتظام: فکسڈ سٹاپ نقصان اور مرحلہ وار منافع کی حکمت عملی کا استعمال ، جو ممکنہ نقصان کو محدود کرتا ہے اور منافع کو بڑھنے کی اجازت دیتا ہے۔
لچکدار: مختلف مارکیٹوں اور ٹریڈنگ سٹائل کے مطابق ای ایم اے پیرامیٹرز ، اسٹاپ نقصان اور منافع کی سطح کو ایڈجسٹ کیا جاسکتا ہے۔
آٹومیشن: حکمت عملی ٹریڈنگ ویو پلیٹ فارم اور پائن کنیکٹر کے ذریعہ مکمل طور پر خودکار تجارت کی اجازت دیتی ہے۔
ٹائم مینجمنٹ: مارکیٹ کے منفی حالات میں تجارت سے بچنے کے لئے مخصوص تجارتی اوقات اور تجارتی دن طے کیے جاسکتے ہیں۔
تاخیر: EMA بنیادی طور پر ایک تاخیر کا اشارے ہے ، جو شدید اتار چڑھاؤ والی مارکیٹ میں دیر سے رد عمل ظاہر کرسکتا ہے۔
جھوٹے سگنل: افقی منڈیوں میں ، ای ایم اے کراسنگ سے اکثر جھوٹے سگنل پیدا ہوسکتے ہیں ، جس کی وجہ سے زیادہ تجارت ہوتی ہے۔
فکسڈ اسٹاپ: فکسڈ پوائنٹس کا استعمال کرتے ہوئے اسٹاپ تمام مارکیٹ کے حالات کے لئے موزوں نہیں ہوسکتا ہے ، اور بعض اوقات یہ بہت بڑا یا بہت چھوٹا ہوسکتا ہے۔
تاریخی اعداد و شمار پر انحصار: حکمت عملی کی تاثیر کا انحصار مارکیٹ کے ردعمل پر ہے جو پچھلے عرصے میں دیکھا گیا تھا اور مستقبل میں اس کی کارکردگی مختلف ہوسکتی ہے۔
مارکیٹ کی موافقت: حکمت عملی کچھ کرنسی کے جوڑوں پر اچھی کارکردگی کا مظاہرہ کرتی ہے ، لیکن دوسری کرنسی کے جوڑوں پر اس کا اثر کم ہوسکتا ہے۔
متحرک پیرامیٹرز ایڈجسٹمنٹ: مارکیٹ میں اتار چڑھاؤ کی متحرک تبدیلیوں کے مطابق ای ایم اے کی مدت ، اسٹاپ نقصان اور منافع کی سطح کو ایڈجسٹ کرنے پر غور کریں۔
فلٹرنگ کی شرائط میں اضافہ: اضافی تکنیکی اشارے یا مارکیٹ کے جذبات کے اشارے متعارف کرانے کے لئے ٹریڈنگ سگنل کو فلٹر کریں ، جعلی سگنل کو کم کریں۔
نقصان کی حکمت عملی کو بہتر بنائیں: مارکیٹ میں اتار چڑھاو کو بہتر طور پر اپنانے کے لئے ٹریکنگ اسٹاپ یا اے ٹی آر پر مبنی متحرک اسٹاپ کو لاگو کریں۔
ٹرانزیکشن کے اوقات کو بہتر بنائیں: ٹرانزیکشن کے بہترین اوقات اور تاریخوں کو تلاش کرنے کے لئے مزید تفصیلی ٹائمنگ تجزیہ کریں۔
حجم کے انتظام میں اضافہ: مارکیٹ میں اتار چڑھاؤ اور اکاؤنٹ کے خطرے کے مطابق پوزیشن کا سائز ایڈجسٹ کریں۔
کثیر کرنسی کی وابستگی کا تجزیہ: متعدد کرنسی کے جوڑوں کے مابین وابستگی کو مدنظر رکھتے ہوئے ، اسی طرح کے مارکیٹ کے خطرات سے زیادہ نمائش سے گریز کریں۔
مشین لرننگ انٹیگریشن: مشین لرننگ الگورتھم کا استعمال کرتے ہوئے پیرامیٹرز کے انتخاب اور سگنل جنریشن کے عمل کو بہتر بنانا۔
ایک کثیر ٹائم فریم انڈیکس موبائل اوسط کراسنگ حکمت عملی ایک خودکار تجارتی نظام ہے جس میں رجحانات کی نگرانی اور خطرے کا انتظام شامل ہے۔ مختلف ٹائم فریموں کے ای ایم اے کراسنگ سگنل کا فائدہ اٹھاتے ہوئے ، اس حکمت عملی کا مقصد مارکیٹ کے رجحانات کو پکڑنا اور مناسب وقت پر تجارت کرنا ہے۔ اگرچہ حکمت عملی مارکیٹ کے کچھ حالات میں اچھی کارکردگی کا مظاہرہ کرتی ہے ، لیکن اس میں کچھ موروثی خطرات اور حدود موجود ہیں۔ حکمت عملی کی استحکام اور موافقت کو مزید بڑھانے کے لئے ، متحرک پیرامیٹر ایڈجسٹمنٹ ، اضافی فلٹرنگ شرائط اور زیادہ پیچیدہ خطرے سے نمٹنے کی تکنیک کو متعارف کرانے پر غور کیا جاسکتا ہے۔
/*backtest
start: 2023-07-30 00:00:00
end: 2024-07-29 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Miles Multi TF EMA Strategy v 1", overlay=true)
Fast = input.int(9, "Fast EMA")
Xslow = input.int(50, "Slow EMA")
var bool inTrade = false // Ensure inTrade is declared and initialized
var int tradeDirection = 0
var float buy_slPrice = na
var float buy_tp1Price = na
var float buy_tp2Price = na
var float sell_slPrice = na
var float sell_tp1Price = na
var float sell_tp2Price = na
var bool tp1Hit = false
var bool buytp1Hit = false
var bool selltp1Hit = false
var float entryPrice = na
var float lastSignalBar = na
fastEMA = ta.ema(close, Fast)
XslowEMA = ta.ema(close, Xslow)
var int step = 0
// Example SL and TP settings (adjust according to your strategy)
slPips = input.int(150, "Stop Loss")
tp1Pips = input.int(75, "Take Profit 1")
tp2Pips = input.int(150, "Take Profit 2")
beoff = input.int(25, "Breakeven Offset")
// Define the higher time frame
higherTimeFrame = input.timeframe("15", "Higher Timeframe EMA")
// Fetch the EMA from the higher time frame
higherTimeFrameEMA = request.security(syminfo.tickerid, higherTimeFrame, ta.ema(close, 100))
// Input for trading start and end times, allowing end time to extend beyond midnight
startHour = input.int(1, "Start Hour", minval=0, maxval=23)
endHour = input.int(25, "End Hour", minval=0, maxval=47) // Extend maxval to 47 to allow specifying times into the next day
// Adjust endHour to be within 24-hour format using modulo operation
adjustedEndHour = endHour % 24
// Function to determine if the current time is within the trading hours
isTradingTime(currentHour) =>
if startHour < adjustedEndHour
currentHour >= startHour and currentHour < adjustedEndHour
else
currentHour >= startHour or currentHour < adjustedEndHour
// Get the current hour in the exchange's timezone
currentHour = hour(time, "Australia/Sydney")
// Check if the current time is within the trading hours
trading = isTradingTime(currentHour)
// Plot background color if within trading hours
bgcolor(trading ? color.new(color.blue, 90) : na)
// Inputs for trading days
tradeOnMonday = input.bool(true, "Trade on Monday")
tradeOnTuesday = input.bool(true, "Trade on Tuesday")
tradeOnWednesday = input.bool(true, "Trade on Wednesday")
tradeOnThursday = input.bool(true, "Trade on Thursday")
tradeOnFriday = input.bool(true, "Trade on Friday")
// Current time checks
currentDayOfWeek = dayofweek(time, "Australia/Sydney")
// Check if current time is within trading hours
isTradingHour = (currentHour >= startHour and currentHour < endHour)
// Check if trading is enabled for the current day of the week
isTradingDay = (currentDayOfWeek == dayofweek.monday and tradeOnMonday) or
(currentDayOfWeek == dayofweek.tuesday and tradeOnTuesday) or
(currentDayOfWeek == dayofweek.wednesday and tradeOnWednesday) or
(currentDayOfWeek == dayofweek.thursday and tradeOnThursday) or
(currentDayOfWeek == dayofweek.friday and tradeOnFriday)
// Combined check for trading time and day
isTradingTime = isTradingHour and isTradingDay
buySignal = false
sellSignal = false
// Conditions
if (step == 0 or step == 4) and ta.crossover(fastEMA, XslowEMA) and fastEMA > higherTimeFrameEMA
step := 1
if (step == 0 or step == 4) and ta.crossover(fastEMA, higherTimeFrameEMA)
step := 1
if step == 3 and ta.crossover(fastEMA, XslowEMA) and fastEMA > higherTimeFrameEMA
step := 3
if step == 2 and ta.crossover(fastEMA, XslowEMA) and fastEMA > higherTimeFrameEMA
step := 1
if (step == 0 or step == 3) and ta.crossunder(fastEMA, XslowEMA) and fastEMA < higherTimeFrameEMA
step := 2
if (step == 0 or step == 3) and ta.crossunder(fastEMA, higherTimeFrameEMA)
step := 2
if step == 4 and ta.crossunder(fastEMA, XslowEMA) and fastEMA < higherTimeFrameEMA
step := 4
if step == 1 and ta.crossunder(fastEMA, XslowEMA) and fastEMA < higherTimeFrameEMA
step := 2
// For buy signals
if step == 1 and isTradingTime and fastEMA > ta.ema(close, Xslow) and fastEMA > higherTimeFrameEMA
buySignal := true
inTrade := true
entryPrice := close
tradeDirection := 1
buytp1Hit := false
lastSignalBar := bar_index
buy_slPrice := entryPrice - slPips * syminfo.mintick
buy_tp1Price := entryPrice + tp1Pips * syminfo.mintick // Set TP1
buy_tp2Price := entryPrice + tp2Pips * syminfo.mintick // Set TP2
tp1Hit := false
step := 3
strategy.entry("Buy", strategy.long, stop=buy_slPrice, limit=buy_tp1Price)
if step == 2 and isTradingTime and fastEMA < ta.ema(close, Xslow) and fastEMA < higherTimeFrameEMA
sellSignal := true
inTrade := true
entryPrice := close
tradeDirection := -1
lastSignalBar := bar_index
selltp1Hit := false
sell_slPrice := entryPrice + slPips * syminfo.mintick
sell_tp1Price := entryPrice - tp1Pips * syminfo.mintick // Set TP1
sell_tp2Price := entryPrice - tp2Pips * syminfo.mintick // Set TP2
tp1Hit := false
step := 4
strategy.entry("Sell", strategy.short, stop=sell_slPrice, limit=sell_tp1Price)
// Move SL to breakeven once TP1 is hit and close 25% of the trade
if (ta.valuewhen(strategy.position_size != 0, strategy.position_size, 0) > 0)
if high >= buy_tp1Price and not tp1Hit
tp1Hit := true
buy_slPrice := entryPrice + beoff * syminfo.mintick
strategy.close("Buy", qty_percent = 25, comment = "TP1 Hit")
strategy.exit("Close", from_entry="Buy", stop=buy_slPrice, limit=buy_tp2Price)
if (ta.valuewhen(strategy.position_size != 0, strategy.position_size, 0) < 0)
if low <= sell_tp1Price and not tp1Hit
tp1Hit := true
sell_slPrice := entryPrice - beoff * syminfo.mintick
strategy.close("Sell", qty_percent = 25, comment = "TP1 Hit")
strategy.exit("Close", from_entry="Sell", stop=sell_slPrice, limit=sell_tp2Price)
// Managing the trade after it's initiated
if inTrade and tradeDirection == 1 and sellSignal
inTrade := false
tradeDirection := 0
buy_slPrice := na
buy_tp1Price := na
buy_tp2Price := na
tp1Hit := false
step := 2
if inTrade and tradeDirection == -1 and buySignal
inTrade := false
tradeDirection := 0
sell_slPrice := na
sell_slPrice := na
sell_tp2Price := na
tp1Hit := false
step := 1
if inTrade and tradeDirection == 1 and step == 1
step := 0
if inTrade and tradeDirection == -1 and step == 2
step := 0
if inTrade and tradeDirection == 1 and (bar_index - lastSignalBar) >= 1
if high >= buy_tp1Price and not tp1Hit
tp1Hit := true
buytp1Hit := true
lastSignalBar := bar_index
buy_slPrice := entryPrice + beoff * syminfo.mintick
step := 3
if low <= buy_slPrice and not tp1Hit and (bar_index - lastSignalBar) >= 1
strategy.close("Buy", qty_percent = 100, comment = "SL Hit")
inTrade := false
tradeDirection := 0
buy_slPrice := na
buy_tp1Price := na
buy_tp2Price := na
tp1Hit := false
buytp1Hit := false
step := 0
if inTrade and tradeDirection == 1 and tp1Hit and (bar_index - lastSignalBar) >= 1
if low <= buy_slPrice
inTrade := false
tradeDirection := 0
buy_slPrice := na
buy_tp1Price := na
buy_tp2Price := na
tp1Hit := false
buytp1Hit := false
step := 0
if high >= buy_tp2Price and (bar_index - lastSignalBar) >= 1
inTrade := false
tradeDirection := 0
buy_slPrice := na
buy_tp1Price := na
buy_tp2Price := na
tp1Hit := false
buytp1Hit := false
step := 0
if inTrade and tradeDirection == -1 and (bar_index - lastSignalBar) >= 1
if low <= sell_tp1Price and not tp1Hit
tp1Hit := true
lastSignalBar := bar_index
selltp1Hit := true
sell_slPrice := entryPrice - beoff * syminfo.mintick
step := 4
if high >= sell_slPrice and not tp1Hit and (bar_index - lastSignalBar) >= 1
strategy.close("Sell", qty_percent = 100, comment = "SL Hit")
inTrade := false
tradeDirection := 0
sell_slPrice := na
sell_tp1Price := na
sell_tp2Price := na
tp1Hit := false
selltp1Hit := false
step := 0
if inTrade and tradeDirection == -1 and tp1Hit and (bar_index - lastSignalBar) >= 1
if high >= sell_slPrice
inTrade := false
tradeDirection := 0
sell_slPrice := na
sell_tp1Price := na
sell_tp2Price := na
tp1Hit := false
selltp1Hit := false
step := 0
if low <= sell_tp2Price
inTrade := false
tradeDirection := 0
sell_slPrice := na
sell_tp1Price := na
sell_tp2Price := na
tp1Hit := false
selltp1Hit := false
step := 0