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

متحرک قیمت سوئنگ آسکیلیٹر حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-23 10:45:02
ٹیگز:

img

جائزہ

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

اصول

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

  1. قیمت کے رجحان کی سمت کا تعین کرنے کے لئے تیز EMA اور سست EMA کا استعمال کریں تاکہ رجحان کے خلاف تجارت کو روکنے کے لئے

  2. بریک آؤٹ سگنل کا تعین کرنے کے لئے قیمت کی اوپری اور نچلی چینل کی حدود کا استعمال کریں ، جب قیمت اوپری حد چینل سے گزرتی ہے تو مختصر ہوجائیں ، اور جب یہ نچلی حد چینل سے گزرتی ہے تو طویل ہوجائیں

  3. حرکت پذیر اوسط کراس اوورز کو بطور فیصلے کے اشارے استعمال کریں، سونے کے صلیبوں پر طویل اور موت کے صلیبوں پر مختصر جائیں

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

ان اشارے کی بنیاد پر مارکیٹ میں داخل ہونے، سٹاپ نقصان اور منافع لینے کے باہر نکلنے کے طریقہ کار کا تعین کرنے کے بعد مقرر کیا جاتا ہے.

فوائد کا تجزیہ

اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ یہ قیمتوں کے رجحانات میں تبدیلیوں کی نشاندہی کرنے کے لئے متعدد اشارے کو جوڑتا ہے۔ اہم فوائد یہ ہیں:

  1. اہم رجحان کا تعین کرنے کے لئے تیز اور سست ای ایم اے کا استعمال رجحان کے خلاف تجارت کو روکتا ہے اور نقصانات کو کم کرسکتا ہے

  2. قیمت چینل فیصلے زیادہ منافع کی صلاحیت کے ساتھ قیمت توڑنے کے مواقع کو پکڑ سکتے ہیں

  3. منتقل اوسط کراس اوور فیصلے سادہ اور عملی ہیں، لاگو کرنے میں آسان ہیں

  4. فبونیکی retracements حکمت عملی زیادہ تین جہتی بنانے کے لئے فیصلہ کرنے کا ایک اور طریقہ شامل کریں

خطرے کا تجزیہ

اس حکمت عملی کے کچھ خطرات کو نوٹ کرنا ضروری ہے:

  1. تیز اور سست EMAs کے لئے غلط پیرامیٹرز کی ترتیبات غلط فیصلوں کا باعث بن سکتی ہیں

  2. قیمت چینل کی اوپری اور نچلی حدود کو توڑنے کا غلط وقت نقصان کے احکامات کا باعث بن سکتا ہے

  3. چلتی اوسط کراس کا انتخاب بھی محتاط ہونا چاہئے

  4. فبونیکی ریٹریکشن بینڈز کی غلط چوڑائی کی ترتیبات بھی فیصلے کے اثر کو متاثر کریں گی

پیرامیٹر کی اصلاح کے ذریعے ان خطرات کو کم کیا جا سکتا ہے.

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

اس حکمت عملی کے لئے کچھ سمتیں ہیں جن کو بہتر بنایا جاسکتا ہے:

  1. EMA سائیکل، چینل کی چوڑائی، اور چلتی اوسط مدت جیسے پیرامیٹرز کی جانچ اور اصلاح کریں

  2. دیگر تکنیکی اشارے جیسے آر ایس آئی اور بولنگر بینڈ کے لئے فیصلے کے قواعد شامل کریں

  3. بریکآؤٹس کی وشوسنییتا کا تعین کرنے کے لئے ٹریڈنگ حجم توانائی کے اشارے جیسے او بی وی کو یکجا کریں

  4. خودکار طور پر بہترین پیرامیٹرز تلاش کرنے کے لئے مشین لرننگ اور دیگر ٹیکنالوجیز کا استعمال کریں

نتیجہ

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


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 1m
basePeriod: 1m
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/
//@version=4

// ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗██████╗     ██████╗ ██╗   ██╗    
//██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗    ██╔══██╗╚██╗ ██╔╝                       
//██║     ██████╔╝█████╗  ███████║   ██║   █████╗  ██║  ██║    ██████╔╝ ╚████╔╝                        
//██║     ██╔══██╗██╔══╝  ██╔══██║   ██║   ██╔══╝  ██║  ██║    ██╔══██╗  ╚██╔╝                         
//╚██████╗██║  ██║███████╗██║  ██║   ██║   ███████╗██████╔╝    ██████╔╝   ██║                          
// ╚═════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝   ╚═╝   ╚══════╝╚═════╝     ╚═════╝    ╚═╝                          
                                                                                                     
//███████╗ ██████╗ ██╗     ██╗   ██╗████████╗██╗ ██████╗ ███╗   ██╗███████╗ ██╗ █████╗ ███████╗ █████╗ 
//██╔════╝██╔═══██╗██║     ██║   ██║╚══██╔══╝██║██╔═══██╗████╗  ██║██╔════╝███║██╔══██╗╚════██║██╔══██╗
//███████╗██║   ██║██║     ██║   ██║   ██║   ██║██║   ██║██╔██╗ ██║███████╗╚██║╚██████║    ██╔╝╚█████╔╝
//╚════██║██║   ██║██║     ██║   ██║   ██║   ██║██║   ██║██║╚██╗██║╚════██║ ██║ ╚═══██║   ██╔╝ ██╔══██╗
//███████║╚██████╔╝███████╗╚██████╔╝   ██║   ██║╚██████╔╝██║ ╚████║███████║ ██║ █████╔╝   ██║  ╚█████╔╝
//╚══════╝ ╚═════╝ ╚══════╝ ╚═════╝    ╚═╝   ╚═╝ ╚═════╝ ╚═╝  ╚═══╝╚══════╝ ╚═╝ ╚════╝    ╚═╝   ╚════╝ 
                                                                                                     

strategy(shorttitle='DPS',title='Dynamic Price Swing', overlay=true, scale=scale.left, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.18, calc_on_every_tick=true)


// -----------------  Strategy Inputs -------------------------------------------------------------
//Backtest dates with auto finish date of today
start = input(defval = timestamp("22 June 2021 00:00 -0500"), title = "Start Time")
finish = input(defval = timestamp("31 December 2021 00:00 -0600"), title = "End Time")
window()  => true       // create function "within window of time"

// Strategy Selection - Long, Short, or Both
stratinfo = input(true, "Long/Short for Mixed Market, Long for Bull, Short for Bear")
strat = input(title="Trade Types", defval="Long/Short", options=["Long Only", "Long/Short", "Short Only"])
strat_val = strat == "Long Only" ? 1 : strat == "Long/Short" ? 0 : -1

// Risk Management Inputs
sl= input(10.0, "Stop Loss %", minval = 0, maxval = 100, step = 0.01)
stoploss = sl/100
tp = input(20.0, "Target Profit %", minval = 0, maxval = 100, step = 0.01)
TargetProfit = tp/100
ld = input(2, "Stop Trading After This Many Losing Days", type=input.integer, minval=0, maxval=100, step=1)
// strategy.risk.max_cons_loss_days(count=ld)
ml = input(10, "Maximum % of Equity Lost to Halt Trading", type=input.integer, minval=1, maxval=100, step=1)
// strategy.risk.max_drawdown(value=ml, type=strategy.percent_of_equity)

// Price Movement Inputs
PriceInfo = input(true, "Number of bars to look back on to calculate price swings.")
lkbk = input(5,"Max Lookback Period")
high_source = input(high,"High Source")
low_source= input(low,"Low Source")

// Trend Inputs
TrendInfo = input(true, "Trend uses Fast and Slow EMA to prevent going the wrong direction")
length = input(14, "RSI Length", minval=1)
fastLength = input(12, minval=1, title="EMA Fast Length")
slowLength = input(26, minval=1, title="EMA Slow Length")

// Trigger Selection
usePrice = input(true, "Use Average Price Channel Only")
useMA = input(false, "Use Price Moving Average Only")
useFib = input(false, "Use Price Fibonacci Average Only")


// Trend Direction Calculation
rsi_ema = ema(rsi(close, length), length)
emaA = ema(rsi_ema, fastLength)                                     
emaFast = 2 * emaA - ema(emaA, fastLength)
emaB = ema(rsi_ema, slowLength)                                     
emaSlow = 2 * emaB - ema(emaB, slowLength) 


bullishRule =emaFast > emaSlow and rsi_ema >=rsi_ema[1]
bearishRule =emaFast < emaSlow and rsi_ema <= rsi_ema[1]


// Price Channel

lasthigh = highest(high_source, lkbk)
lastlow = lowest(low_source, lkbk)


// Fibonacci and Moving Average
MA1 = sma(close,5),HA1 = sma(high,5),LA1 = sma(low,5),
MA2 = sma(close,8),HA2 = sma(high,8),LA2 = sma(low,8),
MA3 = sma(close,13),HA3 = sma(high,13),LA3 = sma(low,13),
MA4 = sma(close,21),HA4 = sma(high,21),LA4 = sma(low,21),
MA5 = sma(close,34),HA5 = sma(high,34),LA5 = sma(low,34),
MA6 = sma(close,55),HA6 = sma(high,55),LA6 = sma(low,55),
MA7 = sma(close,89),HA7 = sma(high,89),LA7 = sma(low,89),

CMA = (MA1+MA2+MA3+MA4+MA5+MA6+MA7)/7,
HMA = (HA1+HA2+HA3+HA4+HA5+HA6+HA7)/7,
HMA2 = CMA + (atr(lkbk)*1.618)

LMA = (LA1+LA2+LA3+LA4+LA5+LA6+LA7)/7,
LMA2 = CMA - (atr(lkbk)*1.618)


plot(CMA, title="CMA", color=color.new(#00ffaa, 70), linewidth=2)
plot(HMA, title="HMA", color=color.maroon, linewidth=2)
plot(HMA2, title="HMA Fib", color=color.red, linewidth=3)
plot(LMA, title="LMA", color=color.green, linewidth=2)
plot(LMA2, title="LMA Fib", color=color.teal, linewidth=3)

    

// -------------------------------- Entry and Exit Logic ------------------------------------

// Entry Logic

Channel_Sell = close >= lasthigh[1] and bearishRule and window()
Channel_Buy =  close <= lastlow[1] and bullishRule and window()

MA_Sell = high>HMA and window()
MA_Buy = low<LMA and window()

Fib_Sell = high>HMA2 and window()
Fib_Buy = low<LMA2 and window()

qty = strategy.equity/close


// Strategy Entry and Exit with built in Risk Management
if(strategy.opentrades==0 and strat_val>-1)
    GoLong = usePrice ? Channel_Buy : useMA ? MA_Buy : useFib ? Fib_Buy : false
    if (GoLong)
        strategy.entry("LONG", strategy.long, qty)

if(strategy.opentrades==0 and strat_val<1)
    GoShort = usePrice ? Channel_Sell : useMA ? MA_Sell : useFib ? Fib_Sell : false
    if (GoShort) 
        strategy.entry("SHORT", strategy.short, qty)


longStopPrice  = strategy.position_avg_price * (1 - stoploss)
longTakePrice  = strategy.position_avg_price * (1 + TargetProfit)
shortStopPrice = strategy.position_avg_price * (1 + stoploss)
shortTakePrice = strategy.position_avg_price * (1 - TargetProfit)

if (strategy.position_size > 0)
    strategy.exit(id="Exit Long", from_entry = "LONG", stop = longStopPrice, limit = longTakePrice)
    
if (strategy.position_size < 0)
    strategy.exit(id="Exit Short", from_entry = "SHORT", stop = shortStopPrice, limit = shortTakePrice)

CloseShort= usePrice ? Channel_Buy : useMA ? MA_Buy : useFib ? Fib_Buy : false
CloseLong = usePrice ? Channel_Sell : useMA ? MA_Sell : useFib ? Fib_Sell : false

if(CloseLong and strategy.position_size > 0)
    strategy.close("LONG")
        

if(CloseShort and strategy.position_size < 0)
    strategy.close("SHORT")


مزید