ڈائنامک پرائس آسکیلیٹر ٹرینڈ اسٹریٹجی


تخلیق کی تاریخ: 2023-11-23 10:45:02 آخر میں ترمیم کریں: 2023-11-23 10:45:02
کاپی: 1 کلکس کی تعداد: 588
1
پر توجہ دیں
1617
پیروکار

ڈائنامک پرائس آسکیلیٹر ٹرینڈ اسٹریٹجی

جائزہ

متحرک قیمت کا جھولنے والا (Dynamic Price Swing) ایک حکمت عملی ہے جس کا استعمال قیمت کے رجحانات کی نشاندہی کرنے کے لئے کیا جاتا ہے۔ یہ متحرک انٹریوں اور آؤٹ پٹ کو انجام دینے کے لئے منتقل اوسط ، قیمت چینلز اور فیبونیکی ریٹرو کو جوڑتا ہے۔ اس حکمت عملی کا فائدہ یہ ہے کہ قیمت کے رجحانات میں تبدیلی کی نشاندہی کرنے کے قابل ہو ، جس سے لچکدار آپریشن ممکن ہو۔

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

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

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

  2. قیمت کے اوپری اور نچلے چینل کو توڑنے کے اشارے کا اندازہ لگانے کے لئے استعمال کیا جاتا ہے ، جب قیمت اوپری چینل کو توڑتی ہے تو اس میں کمی ہوجاتی ہے ، اور جب وہ نچلے چینل کو توڑتی ہے تو اس میں اضافہ ہوتا ہے

  3. حرکت پذیری اوسط کراس کا استعمال کرتے ہوئے فیصلہ کرنے کے لئے سگنل ، گولڈ فورک زیادہ ، ڈیڈ فورک خالی

  4. فیبونیکی واپسی لائن کا استعمال کرتے ہوئے فیصلہ کن سگنل ، جب قیمت فیبونیکی اوپری لائن کو توڑتی ہے تو خالی ہوجاتی ہے ، جب فیبونیکی نچلی لائن کو توڑتی ہے تو زیادہ ہوجاتی ہے

ان اشارے کے مطابق فیصلہ کرنے کے بعد میدان میں داخل ہوں ، اور نقصان کو روکنے ، روکنے اور باہر نکلنے کا طریقہ کار ترتیب دیں۔

طاقت کا تجزیہ

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

  1. تیز رفتار ای ایم اے کا استعمال کرتے ہوئے بڑے رجحانات کا اندازہ لگائیں ، منفی تجارت سے بچیں ، نقصانات کو کم کریں
  2. قیمتوں میں اضافے کے مواقع کے لئے قیمتوں کے چینل کا تعین ، زیادہ منافع بخش صلاحیت
  3. اوسط منتقل کرنے کا فیصلہ آسان اور آسان ہے
  4. فیبونیکی کی واپسی نے حکمت عملی کو مزید دو جہتی بنانے کے لئے ایک اور اندازہ لگایا

خطرے کا تجزیہ

اس حکمت عملی کے کچھ خطرات بھی ہیں جن کے بارے میں آگاہ ہونا ضروری ہے:

  1. فاسٹ ای ایم اے اور سست ای ایم اے پیرامیٹرز کی غلط ترتیب سے فیصلے میں غلطی ہوسکتی ہے
  2. قیمتوں کے اوپری اور نچلے راستے کو توڑنے کے لئے غلط وقت کا انتخاب خطرے کی فہرست کو جنم دے سکتا ہے
  3. ایک بار جب آپ نے اپنے آپ کو ایک بار پھر دیکھا ہے تو ، آپ کو ایک بار پھر اپنے آپ کو ایک بار پھر دیکھنا چاہئے۔
  4. فیبونیکی نے بینڈوڈتھ کی غلط ترتیب کو واپس لے لیا

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

اصلاح کی سمت

اس حکمت عملی میں کچھ اصلاحات بھی ہیں:

  1. ای ایم اے کی مدت ، چینل کی چوڑائی ، اور متحرک اوسط کی مدت جیسے پیرامیٹرز کی جانچ اور اصلاح
  2. دیگر تکنیکی اشارے کے فیصلے کو شامل کریں ، جیسے آر ایس آئی ، برین بینڈ اور دیگر فیصلے کے قواعد
  3. ٹرانزیکشن حجم توانائی کے اشارے جیسے OBV کے ساتھ مل کر کامیابی کی وشوسنییتا کا اندازہ لگائیں
  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")