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

ملٹی ٹائم سائیکل انڈیکس منتقل اوسط کراس حکمت عملی

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

多时间周期指数移动平均交叉策略

جائزہ

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

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

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

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

  2. سگنل خریدنے کی شرط:

    • تیز EMA پر سست EMA ہوتا ہے اور تیز EMA اعلی وقت کے دورانیے کے EMA کے اوپر ہوتا ہے۔ یا
    • تیز رفتار ای ایم اے پر زیادہ وقت کے دوران ای ایم اے پہننا۔
  3. سگنل فروخت کرنے کی شرط:

    • تیز رفتار ای ایم اے سست رفتار ای ایم اے سے نیچے ہے اور تیز رفتار ای ایم اے اعلی وقت کے دورانیے کے ای ایم اے سے نیچے ہے؛ یا
    • تیز رفتار ای ایم اے کے تحت اعلی وقت کے دورانیے کے ای ایم اے کو منتقل کریں۔
  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

متعلقہ مواد

مزید معلومات