موونگ ایوریج ٹرینڈ ویکٹر مقداری تجارتی حکمت عملی

SMMA MA EMA DEMA TEMA WMA VWMA HullMA LSMA ALMA SSMA TMA SL TP
تخلیق کی تاریخ: 2025-02-20 10:59:37 آخر میں ترمیم کریں: 2025-02-27 17:49:25
کاپی: 2 کلکس کی تعداد: 383
2
پر توجہ دیں
319
پیروکار

موونگ ایوریج ٹرینڈ ویکٹر مقداری تجارتی حکمت عملی موونگ ایوریج ٹرینڈ ویکٹر مقداری تجارتی حکمت عملی

جائزہ

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

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

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

اسٹریٹجک فوائد

  1. لچکدار اوسط انتخاب: 11 مختلف قسم کے متحرک اوسط کی حمایت کرتا ہے ، جس میں مختلف مارکیٹ کی خصوصیات کے مطابق سب سے زیادہ مناسب اوسط کی قسم کا انتخاب کیا جاسکتا ہے۔
  2. بہتر خطرے کا انتظام: بلٹ میں سٹاپ نقصان کا طریقہ کار، جو ہر تجارت کے خطرے کو مؤثر طریقے سے کنٹرول کرتا ہے۔
  3. کثیر دورانیہ کی موافقت: منٹ سے لے کر مہینے تک کے متعدد وقت کی مدت کی حمایت کرتا ہے ، اور پیرامیٹرز کو ایڈجسٹ کرکے دورانیہ کی ضرب کو بہتر بنایا جاسکتا ہے۔
  4. بصری معاونت: رجحانات کو رنگین نشان لگانے کی سہولت فراہم کرتا ہے ، جس سے مارکیٹ کے رجحانات کو بصری طور پر سمجھنے میں مدد ملتی ہے۔

اسٹریٹجک رسک

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

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

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-08-01 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Open Close Cross Strategy v6", 
     overlay=true, 
     pyramiding=0, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=10,
     calc_on_every_tick=false)

// === INPUTS ===
var bool useRes = input.bool(true, "Use Alternate Resolution?")
var int intRes = input.int(3, "Multiplier for Alternate Resolution")
var string basisType = input.string("SMMA", "MA Type: ", options=["SMA", "EMA", "DEMA", "TEMA", "WMA", "VWMA", "SMMA", "HullMA", "LSMA", "ALMA", "SSMA", "TMA"])
var int basisLen = input.int(8, "MA Period", minval=1)
var int offsetSigma = input.int(6, "Offset for LSMA / Sigma for ALMA", minval=0)
var float offsetALMA = input.float(0.85, "Offset for ALMA", minval=0, step=0.01)
var bool scolor = input.bool(false, "Show coloured Bars to indicate Trend?")
var int delayOffset = input.int(0, "Delay Open/Close MA (Forces Non-Repainting)", minval=0, step=1)
var string tradeType = input.string("BOTH", "What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])
var float slPoints = input.float(0, "Initial Stop Loss Points (zero to disable)", minval=0)
var float tpPoints = input.float(0, "Initial Target Profit Points (zero for disable)", minval=0)
var int ebar = input.int(10000, "Number of Bars for Back Testing", minval=0)
var bool dummy = input.bool(false, "- SET to ZERO for Daily or Longer Timeframes")

// Определение таймфрейма для alternate resolution
getAlternateResolution() =>
    timeframe.ismonthly ? str.tostring(timeframe.multiplier * intRes) + "M" :
         timeframe.isweekly ? str.tostring(timeframe.multiplier * intRes) + "W" :
         timeframe.isdaily ? str.tostring(timeframe.multiplier * intRes) + "D" :
         timeframe.isintraday ? str.tostring(timeframe.multiplier * intRes) : "60"

stratRes = getAlternateResolution()

// === MA Functions ===
variant(type, src, len, offSig, offALMA) =>
    float result = switch type
        "EMA" => ta.ema(src, len)
        "DEMA" => 2 * ta.ema(src, len) - ta.ema(ta.ema(src, len), len)
        "TEMA" => 3 * (ta.ema(src, len) - ta.ema(ta.ema(src, len), len)) + ta.ema(ta.ema(ta.ema(src, len), len), len)
        "WMA" => ta.wma(src, len)
        "VWMA" => ta.vwma(src, len)
        "SMMA" => ta.sma(src, len)  // Упрощенная версия SMMA
        "HullMA" => ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len)))
        "LSMA" => ta.linreg(src, len, offSig)
        "ALMA" => ta.alma(src, len, offALMA, offSig)
        "TMA" => ta.sma(ta.sma(src, len), len)
        "SSMA" => 
            a1 = math.exp(-1.414 * math.pi / len)
            b1 = 2 * a1 * math.cos(1.414 * math.pi / len)
            c2 = b1
            c3 = -a1 * a1
            c1 = 1 - c2 - c3
            c1 * (src + nz(src[1])) / 2 + c2 * nz(ta.sma(src, len)[1]) + c3 * nz(ta.sma(src, len)[2])
        => ta.sma(src, len)

// === Series Setup ===
closeSeries = variant(basisType, close[delayOffset], basisLen, offsetSigma, offsetALMA)
openSeries = variant(basisType, open[delayOffset], basisLen, offsetSigma, offsetALMA)

// Get Alternate resolution Series
closeSeriesAlt = useRes ? request.security(syminfo.tickerid, stratRes, closeSeries, barmerge.gaps_off, barmerge.lookahead_on) : closeSeries
openSeriesAlt = useRes ? request.security(syminfo.tickerid, stratRes, openSeries, barmerge.gaps_off, barmerge.lookahead_on) : openSeries

// === Plotting ===
color trendColor = closeSeriesAlt > openSeriesAlt ? color.green : color.red
color barColor = closeSeries > openSeriesAlt ? color.new(color.lime, 0) : color.new(color.red, 0)

// Перемещаем barcolor в глобальную область видимости
barcolor(scolor ? barColor : na)

var closePlot = plot(closeSeriesAlt, "Close Series", trendColor, 2, plot.style_line)
var openPlot = plot(openSeriesAlt, "Open Series", trendColor, 2, plot.style_line)
fill(closePlot, openPlot, color=trendColor)

// === Trade Conditions ===
xlong = ta.crossover(closeSeriesAlt, openSeriesAlt)
xshort = ta.crossunder(closeSeriesAlt, openSeriesAlt)
longCond = xlong
shortCond = xshort

// === Strategy Logic ===
float tp = tpPoints > 0 ? tpPoints : na
float sl = slPoints > 0 ? slPoints : na

var int lastPositionType = 0  // 1 для long, -1 для short, 0 для нет позиции

if ebar == 0 or (timenow - time) / (timeframe.multiplier * 60000) <= ebar and tradeType != "NONE"
    // Закрытие позиций
    if lastPositionType == 1 and shortCond
        strategy.close("long")
        lastPositionType := 0
        label.new(bar_index, high, "Exit Long", color=color.red, style=label.style_label_down, textcolor=color.white)
    
    if lastPositionType == -1 and longCond
        strategy.close("short")
        lastPositionType := 0
        label.new(bar_index, low, "Exit Short", color=color.green, style=label.style_label_up, textcolor=color.white)
    
    // Открытие новых позиций
    if longCond and tradeType != "SHORT" and lastPositionType == 0
        strategy.entry("long", strategy.long)
        lastPositionType := 1
        label.new(bar_index, low, "Long", color=color.green, style=label.style_label_up, textcolor=color.white)
    
    if shortCond and tradeType != "LONG" and lastPositionType == 0
        strategy.entry("short", strategy.short)
        lastPositionType := -1
        label.new(bar_index, high, "Short", color=color.red, style=label.style_label_down, textcolor=color.white)
    
    // Take Profit и Stop Loss
    if lastPositionType != 0
        strategy.exit("TP/SL", profit=tp, loss=sl)