ویو رجحان اور وی ڈبلیو ایم اے پر مبنی رجحان کوانٹ حکمت عملی کے بعد

مصنف:چاؤ ژانگ، تاریخ: 2024-01-26 17:35:29
ٹیگز:

img

جائزہ

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

حکمت عملی منطق

یہ حکمت عملی بنیادی طور پر مندرجہ ذیل دو اشارے پر مبنی ہے:

  1. ویو ٹرینڈ آسکیلیٹر: یہ لیزی بیر کے ذریعہ ٹریڈنگ ویو میں پورٹ کیا گیا ایک آسکیلیٹر ہے ، جو قیمتوں میں اتار چڑھاؤ میں لہر کی نشاندہی کرتا ہے اور خرید / فروخت کے سگنل تیار کرتا ہے۔ مخصوص حساب کتاب یہ ہے: پہلے اوسط قیمت اے پی کا حساب لگائیں ، پھر اے پی کا ای ایم اے (جسے ای ایس اے کہا جاتا ہے) کا حساب لگائیں ، پھر اے پی اور ای ایس اے کے مابین فرق کی مطلق قیمت کا ای ایم اے (جسے ڈی کہا جاتا ہے) کا حساب لگائیں ، آخر کار مستقل مزاجی انڈیکس کا حساب لگائیں ci=(ap-esa) /(0.015*d) ، سی آئی کا ای ایم اے ویو ٹرینڈ (wt1) ہے ، اور wt1 کا 4 پیریڈ ایس ایم اے wt2 ہے۔ جب wt1 wt2 سے اوپر عبور کرتا ہے تو ، یہ خرید کا اشارہ ہے ، اور جب wt1 wt2 سے نیچے عبور کرتا ہے تو ، یہ فروخت کا اشارہ ہے۔

  2. وی ڈبلیو ایم اے اشارے: یہ ایک حجم وزن والی حرکت پذیر اوسط لائن ہے۔ اس بات کی بنیاد پر کہ قیمت وی ڈبلیو ایم اے بینڈ (وی ڈبلیو ایم اے کی اوپری اور نچلی بینڈ) کے اندر یا باہر ہے ، یہ +1 (بلس) ، 0 (غیر جانبدار) یا -1 (بیئرش) سگنل پیدا کرتی ہے۔

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

فوائد

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

خطرات

  • ویو ٹرینڈ سے ممکنہ غلط سگنل
  • ناقص حجم کے اعداد و شمار سے VWMA متاثر ہوسکتا ہے
  • اشارے کے حساب کے لئے طویل تاریخی اعداد و شمار کی ضرورت ہے
  • کوئی سٹاپ نقصان نہیں

اصلاح

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

نتیجہ

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


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at
// https://mozilla.org/MPL/2.0/
//
// Created by jadamcraig
// 
// This strategy benefits from extracts taken from the following
// studies/authors.  Thank you for developing and sharing your ideas in an open
// way!
//  * Wave Trend Strategy by thomas.gigure
//  * cRSI + Waves Strategy with VWMA overlay by Dr_Roboto
//
//@version=4

//==============================================================================
//==============================================================================
overlay = true  // plots VWMA (need to close and re-add)
//overlay = false // plots Wave Trend (need to close and re-add)

strategy("Wave Trend w/ VWMA overlay", overlay=overlay)
     
baseQty = input(defval=1, title="Base Quantity", type=input.float, minval=1)

useSessions = input(defval=true, title="Limit Signals to Trading Sessions?")
sess1_startHour = input(defval=8, title="Session 1: Start Hour",
     type=input.integer, minval=0, maxval=23)
sess1_startMinute = input(defval=25, title="Session 1: Start Minute",
     type=input.integer, minval=0, maxval=59)
sess1_stopHour = input(defval=10, title="Session 1: Stop Hour",
     type=input.integer, minval=0, maxval=23)
sess1_stopMinute = input(defval=25, title="Session 1: Stop Minute",
     type=input.integer, minval=0, maxval=59)
sess2_startHour = input(defval=12, title="Session 2: Start Hour",
     type=input.integer, minval=0, maxval=23)
sess2_startMinute = input(defval=55, title="Session 2: Start Minute",
     type=input.integer, minval=0, maxval=59)
sess2_stopHour = input(defval=14, title="Session 2: Stop Hour",
     type=input.integer, minval=0, maxval=23)
sess2_stopMinute = input(defval=55, title="Session 2: Stop Minute",
     type=input.integer, minval=0, maxval=59)
sess1_closeAll = input(defval=false, title="Close All at End of Session 1")
sess2_closeAll = input(defval=true, title="Close All at End of Session 2")

//==============================================================================
//==============================================================================
//                    Volume Weighted Moving Average (VWMA)
//==============================================================================
//==============================================================================
plotVWMA = overlay

// check if volume is available for this equity
useVolume = input(
     title="VWMA: Use Volume (uncheck if equity does not have volume)",
     defval=true)

vwmaLen = input(defval=21, title="VWMA: Length", type=input.integer, minval=1,
     maxval=200)
vwma = vwma(close, vwmaLen)
vwma_high = vwma(high, vwmaLen)
vwma_low = vwma(low, vwmaLen)

if not(useVolume)
    vwma := wma(close, vwmaLen)
    vwma_high := wma(high, vwmaLen)
    vwma_low := wma(low, vwmaLen)

// +1 when above, -1 when below, 0 when inside
vwmaSignal(priceOpen, priceClose, vwmaHigh, vwmaLow) =>
    sig = 0
    color = color.gray
    if priceClose > vwmaHigh
        sig := 1
        color := color.green
    else if priceClose < vwmaLow
        sig := -1
        color := color.red
    else
        sig := 0
        color := color.gray
    [sig,color]

[vwma_sig, vwma_color] = vwmaSignal(open, close, vwma_high, vwma_low)

priceAboveVWMA = vwma_sig ==  1 ? true : false
priceBelowVWMA = vwma_sig == -1 ? true : false
// plot(priceAboveVWMA?2.0:0,color=color.blue)
// plot(priceBelowVWMA?2.0:0,color=color.maroon)

//bandTrans = input(defval=70, title="VWMA Band Transparancy (100 invisible)",
//     type=input.integer, minval=0, maxval=100)
//fillTrans = input(defval=70, title="VWMA Fill Transparancy (100 invisible)",
//     type=input.integer, minval=0, maxval=100)
bandTrans = 60
fillTrans = 60

// ***** Plot VWMA *****
highband = plot(plotVWMA?fixnan(vwma_high):na, title='VWMA High band', 
     color = vwma_color, linewidth=1, transp=bandTrans)
lowband = plot(plotVWMA?fixnan(vwma_low):na, title='VWMA Low band',
     color = vwma_color, linewidth=1, transp=bandTrans)
fill(lowband, highband, title='VWMA Band fill', color=vwma_color,
     transp=fillTrans)
plot(plotVWMA?vwma:na, title='VWMA', color = vwma_color, linewidth=3,
     transp=bandTrans)

//==============================================================================
//==============================================================================
//                                  Wave Trend
//==============================================================================
//==============================================================================
plotWaveTrend = not(overlay)

n1 = input(10, "Wave Trend: Channel Length")
n2 = input(21, "Wave Trend: Average Length")
obLevel1 = input(60, "Wave Trend: Over Bought Level 1")
obLevel2 = input(53, "Wave Trend: Over Bought Level 2")
osLevel1 = input(-60, "Wave Trend: Over Sold Level 1")
osLevel2 = input(-53, "Wave Trend: Over Sold Level 2")

ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
 
wt1 = tci
wt2 = sma(wt1,4)

plot(plotWaveTrend?0:na, color=color.gray)
plot(plotWaveTrend?obLevel1:na, color=color.red)
plot(plotWaveTrend?osLevel1:na, color=color.green)
plot(plotWaveTrend?obLevel2:na, color=color.red, style=3)
plot(plotWaveTrend?osLevel2:na, color=color.green, style=3)

plot(plotWaveTrend?wt1:na, color=color.green)
plot(plotWaveTrend?wt2:na, color=color.red, style=3)
plot(plotWaveTrend?wt1-wt2:na, color=color.blue, transp=80)

//==============================================================================
//==============================================================================
//                               Order Management
//==============================================================================
//==============================================================================
// Define Long and Short Conditions
longCondition = crossover(wt1, wt2)
shortCondition = crossunder(wt1, wt2)

// Define Quantities
orderQty = baseQty * 2
if (longCondition)
    if (vwma_sig == 1)
        if ( strategy.position_size >= (baseQty * 4 * -1) and 
             strategy.position_size < 0 )
            orderQty := baseQty * 4 + abs(strategy.position_size)
        else
            orderQty := baseQty * 4
    else if (vwma_sig == 0)
        if ( strategy.position_size >= (baseQty * 2 * -1) and 
             strategy.position_size < 0 )
            orderQty := baseQty * 2 + abs(strategy.position_size)
        else
            orderQty := baseQty * 2
    else if (vwma_sig == -1)
        if ( strategy.position_size >= (baseQty * 1 * -1) and 
             strategy.position_size < 0 )
            orderQty := baseQty * 1 + abs(strategy.position_size)
        else
            orderQty := baseQty * 1
else if (shortCondition)
    if (vwma_sig == -1)
        if ( strategy.position_size <= (baseQty * 4) and 
             strategy.position_size > 0 )
            orderQty := baseQty * 4 + strategy.position_size
        else
            orderQty := baseQty * 4
    else if (vwma_sig == 0)
        if ( strategy.position_size <= (baseQty * 2) and 
             strategy.position_size > 2 )
            orderQty := baseQty * 2 + strategy.position_size
        else
            orderQty := baseQty * 2
    else if (vwma_sig == 1)
        if ( strategy.position_size <= (baseQty * 1) and 
             strategy.position_size > 0 )
            orderQty := baseQty * 1 + strategy.position_size
        else
            orderQty := baseQty * 1

// Determine if new trades are permitted
newTrades = false
if (useSessions)
    if ( hour == sess1_startHour and minute >= sess1_startMinute )
        newTrades := true
    else if ( hour > sess1_startHour and hour < sess1_stopHour )
        newTrades := true
    else if ( hour == sess1_stopHour and minute < sess1_stopMinute )
        newTrades := true
    else if ( hour == sess2_startHour and minute >= sess2_startMinute )
        newTrades := true
    else if ( hour > sess2_startHour and hour < sess2_stopHour )
        newTrades := true
    else if ( hour == sess2_stopHour and minute < sess2_stopMinute )
        newTrades := true
    else
        newTrades := false
else
    newTrades := true

// Long Signals
if ( longCondition  )
    strategy.order("Buy", strategy.long, orderQty)

// Short Signals
if ( shortCondition  )
    strategy.order("Sell", strategy.short, orderQty)

// Close open position at end of Session 1, if enabled
if (sess1_closeAll )
    strategy.close_all()
    
// Close open position at end of Session 2, if enabled
if (sess2_closeAll  )
    strategy.close_all()


مزید