وسائل لوڈ ہو رہے ہیں... لوڈنگ...

کثیر ٹائم فریم ایکسپونینشل موونگ ایوریج کراس اوور حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-07-30 12:02:23
ٹیگز:ای ایم اےSLٹی پیٹی ایف

img

جائزہ

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

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

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

  1. یہ تیز رفتار لائن کے طور پر 9 مدت کے ای ایم اے، سست لائن کے طور پر 50 مدت کے ای ایم اے، اور 15 منٹ کے ٹائم فریم پر 100 مدت کے ای ایم اے کو اعلی ٹائم فریم ریفرنس کے طور پر استعمال کرتا ہے۔

  2. خریدنے کے سگنل کے حالات:

    • تیز EMA سست EMA کے اوپر عبور کرتا ہے، اور تیز EMA اعلی ٹائم فریم EMA سے اوپر ہے؛ یا
    • تیز EMA اعلی ٹائم فریم EMA کے اوپر کراس کرتا ہے۔
  3. فروخت سگنل کے حالات:

    • تیز EMA سست EMA سے نیچے گزرتا ہے، اور تیز EMA اعلی ٹائم فریم EMA سے نیچے ہے؛ یا
    • فاسٹ ای ایم اے اعلی ٹائم فریم ای ایم اے سے نیچے عبور کرتا ہے۔
  4. تجارت کا انتظام:

    • مقررہ سٹاپ نقصان (SL) اور لے منافع (TP) کی سطح مقرر کرتا ہے.
    • جب قیمت پہلی منافع لینے کی سطح (TP1) تک پہنچ جاتی ہے تو ، یہ پوزیشن کا 25٪ بند کر دیتا ہے اور اسٹاپ نقصان کو بریک اینڈ پر منتقل کرتا ہے۔
    • باقی پوزیشن اس وقت تک چلتی رہے گی جب تک کہ دوسری ٹیک منافع کی سطح (TP2) یا سٹاپ نقصان نہ ہو جائے۔
  5. ٹریڈنگ ٹائم کنٹرول:

    • مخصوص ٹریڈنگ اوقات اور ٹریڈنگ دنوں کی ترتیب کی اجازت دیتا ہے۔

حکمت عملی کے فوائد

  1. ملٹی ٹائم فریم تجزیہ: مختلف ٹائم فریم سے ای ایم اے کو یکجا کرنے سے غلط سگنل کم ہونے اور تجارت کے معیار کو بہتر بنانے میں مدد ملتی ہے۔

  2. رجحان کی پیروی: ای ایم اے کراس اوورز اور متعلقہ پوزیشنوں کے ذریعے مارکیٹ کے رجحانات کو مؤثر طریقے سے پکڑتا ہے۔

  3. رسک مینجمنٹ: فکسڈ اسٹاپ نقصان اور قدم بہ قدم منافع لینے کی حکمت عملی کا استعمال کرتا ہے ، جو ممکنہ نقصانات کو محدود کرتا ہے جبکہ منافع کو چلانے کی اجازت دیتا ہے۔

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

  5. آٹومیشن: حکمت عملی کو ٹریڈنگ ویو پلیٹ فارم اور پائن کنیکٹر کا استعمال کرتے ہوئے مکمل طور پر خودکار کیا جاسکتا ہے۔

  6. ٹائم مینجمنٹ: غیر موافق مارکیٹ کے حالات میں تجارت سے بچنے کے لیے مخصوص ٹریڈنگ اوقات اور دن طے کرنے کی صلاحیت۔

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

  1. تاخیر: ای ایم اے فطری طور پر تاخیر والے اشارے ہیں اور وہ اتار چڑھاؤ والی منڈیوں میں کافی تیزی سے رد عمل ظاہر نہیں کرسکتے ہیں۔

  2. جھوٹے سگنل: مختلف مارکیٹوں میں، ای ایم اے کراس اوورز اکثر جھوٹے سگنل پیدا کر سکتے ہیں، جس کی وجہ سے اوور ٹریڈنگ ہوتی ہے۔

  3. فکسڈ سٹاپ نقصان: فکسڈ پوائنٹ سٹاپ نقصان کا استعمال تمام مارکیٹ کے حالات کے لئے موزوں نہیں ہو سکتا، بعض اوقات بہت بڑا یا بہت چھوٹا ہو سکتا ہے۔

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

  5. مارکیٹ کی موافقت: اگرچہ یہ حکمت عملی کچھ کرنسی کے جوڑوں پر اچھی کارکردگی کا مظاہرہ کرتی ہے ، لیکن یہ دوسروں پر اتنی موثر نہیں ہوسکتی ہے۔

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

  1. متحرک پیرامیٹر ایڈجسٹمنٹ: مارکیٹ کی اتار چڑھاؤ کی بنیاد پر متحرک طور پر ای ایم اے کی مدت، سٹاپ نقصان اور منافع لینے کی سطح کو ایڈجسٹ کرنے پر غور کریں۔

  2. اضافی فلٹرنگ شرائط: تجارتی سگنل کو فلٹر کرنے اور جھوٹے مثبت کو کم کرنے کے لئے اضافی تکنیکی یا جذباتی اشارے متعارف کروائیں۔

  3. اسٹاپ نقصان کی بہتر حکمت عملی: مارکیٹ میں اتار چڑھاؤ کو بہتر طور پر اپنانے کے لئے ٹریلر اسٹاپ یا اے ٹی آر پر مبنی متحرک اسٹاپ نقصانات کو نافذ کریں۔

  4. تجارتی اوقات کو بہتر بنائیں: بہترین تجارتی اوقات اور تاریخوں کو تلاش کرنے کے لئے زیادہ تفصیلی وقت کا تجزیہ کریں۔

  5. بہتر پوزیشن سائزنگ: مارکیٹ کی اتار چڑھاؤ اور اکاؤنٹ کے خطرے کی بنیاد پر پوزیشن سائز کو ایڈجسٹ کریں۔

  6. کثیر کرنسی کنکشن تجزیہ: اسی طرح کے مارکیٹ کے خطرات سے زیادہ نمائش سے بچنے کے لئے متعدد کرنسی کے جوڑوں کے مابین کنکشن پر غور کریں۔

  7. مشین لرننگ انٹیگریشن: پیرامیٹر کے انتخاب اور سگنل جنریشن کے عمل کو بہتر بنانے کے لئے مشین لرننگ الگورتھم کا استعمال کریں۔

نتیجہ

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


/*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

متعلقہ

مزید