قیمت کے انحراف پر مبنی رجحان کی تجارتی حکمت عملی


تخلیق کی تاریخ: 2024-02-02 18:00:55 آخر میں ترمیم کریں: 2024-02-02 18:00:55
کاپی: 1 کلکس کی تعداد: 695
1
پر توجہ دیں
1617
پیروکار

قیمت کے انحراف پر مبنی رجحان کی تجارتی حکمت عملی

جائزہ

یہ حکمت عملی ایک رجحان سازی ٹریڈنگ حکمت عملی ہے جو قیمت کے پھیلاؤ کے اشارے پر مبنی ہے۔ یہ متعدد اشارے استعمال کرتا ہے جو قیمت کے پھیلاؤ کے اشارے کا پتہ لگاتا ہے ، جیسے RSI ، MACD ، Stochastics ، اور اس کی تصدیق موری ریاضی oscillator کے ذریعے کی جاتی ہے۔ جب قیمت کے پھیلاؤ کا اشارہ ہوتا ہے تو ، اگر oscillator بھی اس بات کی تصدیق کرتا ہے کہ موجودہ رجحان کی سمت ہے۔

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

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

اس حکمت عملی میں شامل ہونے کے لیے درج ذیل شرائط ہیں:

  1. قیمت کے پھیلاؤ کے سگنل کا پتہ لگانا ، بشمول باقاعدہ پھیلاؤ اور پوشیدہ پھیلاؤ
  2. موری ریاضی oscillators اسی رجحان کے علاقے میں ہیں

باہر نکلنے کی شرائط کے لئے oscillator کے واپس وسط لائن سے گزرنے کے لئے برابر.

طاقت کا تجزیہ

اس حکمت عملی میں قیمتوں کے پھیلاؤ کی تھیوری اور رجحان کی تصدیق کا امتزاج کیا گیا ہے ، جس کے درج ذیل فوائد ہیں:

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

خطرے کا تجزیہ

اس کے علاوہ ، یہ بھی کہا گیا ہے کہ:

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

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

اصلاح کی سمت

اس حکمت عملی میں مزید اصلاحات کی گنجائش موجود ہے:

  1. مشین لرننگ الگورتھم کو شامل کریں اور پیرامیٹرز کو ریئل ٹائم میں بہتر بنائیں
  2. خود کار طریقے سے روکنے والی تکنیکوں کو شامل کرنا، جیسے ٹریکنگ سٹاپ، اوسط سٹاپ وغیرہ
  3. زیادہ اشارے اور فلٹرنگ کے حالات کے ساتھ، بہتر شور کی شرح
  4. متحرک طور پر oscillator پیرامیٹرز کو ایڈجسٹ کرنے کے لئے، رجحانات کے فیصلے کو بہتر بنانے کے
  5. خطرے کے انتظام کو بہتر بنانا، زیادہ سے زیادہ واپسی کی حد مقرر کرنا

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//
// Title:   [STRATEGY][UL]Price Divergence Strategy V1
// Author:  JustUncleL
// Date:    23-Oct-2016
// Version: v1.0
//
// Description:
//  A trend trading strategy the uses Price Divergence detection signals, that
//  are confirmed by the "Murrey's Math Oscillator" (Donchanin Channel based).
//
//  *** USE AT YOUR OWN RISK ***
//
// Mofidifications:
//  1.0 - original
//
// References:
//  Strategy Based on:
//  - [RS]Price Divergence Detector V2 by RicardoSantos
//  - UCS_Murrey's Math Oscillator by Ucsgears
//  Some Code borrowed from:
//  - "Strategy Code Example by JayRogers"  
//  Information on Divergence Trading:
//  - http://www.babypips.com/school/high-school/trading-divergences
//
strategy(title='[STRATEGY][UL]Price Divergence Strategy v1.0', pyramiding=0, overlay=true, initial_capital=10000, calc_on_every_tick=false,
         currency=currency.USD,default_qty_type=strategy.percent_of_equity,default_qty_value=10)
//  ||  General Input:
method = input(title='Method (0=rsi, 1=macd, 2=stoch, 3=volume, 4=acc/dist, 5=fisher, 6=cci):',  defval=1, minval=0, maxval=6)
SHOW_LABEL = input(title='Show Labels', type=bool, defval=true)
SHOW_CHANNEL = input(title='Show Channel', type=bool, defval=false)
uHid = input(true,title="Use Hidden Divergence in Strategy")
uReg = input(true,title="Use Regular Divergence in Strategy")
//  ||  RSI / STOCH / VOLUME / ACC/DIST Input:
rsi_smooth = input(title='RSI/STOCH/Volume/ACC-DIST/Fisher/cci Smooth:',  defval=5)
//  ||  MACD Input:
macd_src = input(title='MACD Source:', defval=close)
macd_fast = input(title='MACD Fast:',  defval=12)
macd_slow = input(title='MACD Slow:',  defval=26)
macd_smooth = input(title='MACD Smooth Signal:',  defval=9)
//  ||  Functions:
f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0]
f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0]
f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0

//  ||••>   START MACD FUNCTION
f_macd(_src, _fast, _slow, _smooth)=>
    _fast_ma = sma(_src, _fast)
    _slow_ma = sma(_src, _slow)
    _macd = _fast_ma-_slow_ma
    _signal = ema(_macd, _smooth)
    _hist = _macd - _signal
//  ||<••   END MACD FUNCTION

//  ||••>   START ACC/DIST FUNCTION
f_accdist(_smooth)=>_return=sma(cum(close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume), _smooth)
//  ||<••   END ACC/DIST FUNCTION

//  ||••>   START FISHER FUNCTION
f_fisher(_src, _window)=>
    _h = highest(_src, _window)
    _l = lowest(_src, _window)
    _value0 = .66 * ((_src - _l) / max(_h - _l, .001) - .5) + .67 * nz(_value0[1])
    _value1 = _value0 > .99 ? .999 : _value0 < -.99 ? -.999 : _value0
    _fisher = .5 * log((1 + _value1) / max(1 - _value1, .001)) + .5 * nz(_fisher[1])
//  ||<••   END FISHER FUNCTION

method_high = method == 0 ? rsi(high, rsi_smooth) : 
  method == 1 ? f_macd(macd_src, macd_fast, macd_slow, macd_smooth) :
  method == 2 ? stoch(close, high, low, rsi_smooth) :
  method == 3 ? sma(volume, rsi_smooth) :
  method == 4 ? f_accdist(rsi_smooth) :
  method == 5 ? f_fisher(high, rsi_smooth) :
  method == 6 ? cci(high, rsi_smooth) :
  na
    
method_low = method == 0 ? rsi(low, rsi_smooth) :
  method == 1 ? f_macd(macd_src, macd_fast, macd_slow, macd_smooth) :
  method == 2 ? stoch(close, high, low, rsi_smooth) :
  method == 3 ? sma(volume, rsi_smooth) :
  method == 4 ? f_accdist(rsi_smooth) :
  method == 5 ? f_fisher(low, rsi_smooth) :
  method == 6 ? cci(low, rsi_smooth) :
  na

fractal_top = f_fractalize(method_high) > 0 ? method_high[2] : na
fractal_bot = f_fractalize(method_low) < 0 ? method_low[2] : na

high_prev = valuewhen(fractal_top, method_high[2], 1) 
high_price = valuewhen(fractal_top, high[2], 1)
low_prev = valuewhen(fractal_bot, method_low[2], 1) 
low_price = valuewhen(fractal_bot, low[2], 1)

regular_bearish_div = fractal_top and high[2] > high_price and method_high[2] < high_prev
hidden_bearish_div = fractal_top and high[2] < high_price and method_high[2] > high_prev
regular_bullish_div = fractal_bot and low[2] < low_price and method_low[2] > low_prev
hidden_bullish_div = fractal_bot and low[2] > low_price and method_low[2] < low_prev

plot(title='H F', series=fractal_top ? high[2] : na, color=regular_bearish_div or hidden_bearish_div ? maroon : not SHOW_CHANNEL ? na : silver, offset=-2)
plot(title='L F', series=fractal_bot ? low[2] : na, color=regular_bullish_div or hidden_bullish_div ? green : not SHOW_CHANNEL ? na : silver, offset=-2)
plot(title='H D', series=fractal_top ? high[2] : na, style=circles, color=regular_bearish_div or hidden_bearish_div ? maroon : not SHOW_CHANNEL ? na : silver, linewidth=3, offset=-2)
plot(title='L D', series=fractal_bot ? low[2] : na, style=circles, color=regular_bullish_div or hidden_bullish_div ? green : not SHOW_CHANNEL ? na : silver, linewidth=3, offset=-2)

plotshape(title='+RBD', series=not SHOW_LABEL ? na : regular_bearish_div ? high[2] : na, text='R', style=shape.labeldown, location=location.absolute, color=maroon, textcolor=white, offset=-2)
plotshape(title='+HBD', series=not SHOW_LABEL ? na : hidden_bearish_div ? high[2] : na, text='H', style=shape.labeldown, location=location.absolute, color=maroon, textcolor=white, offset=-2)
plotshape(title='-RBD', series=not SHOW_LABEL ? na : regular_bullish_div ? low[2] : na, text='R', style=shape.labelup, location=location.absolute, color=green, textcolor=white, offset=-2)
plotshape(title='-HBD', series=not SHOW_LABEL ? na : hidden_bullish_div ? low[2] : na, text='H', style=shape.labelup, location=location.absolute, color=green, textcolor=white, offset=-2)

// Code borrowed from UCS_Murrey's Math Oscillator by Ucsgears
//  - UCS_MMLO
// Inputs
length = input(100, minval = 10, title = "MMLO Look back Length")
quad   = input(2, minval = 1, maxval = 4, step = 1, title = "Mininum Quadrant for MMLO Support")
mult = 0.125

// Donchanin Channel
hi = highest(high, length)
lo = lowest(low, length)
range = hi - lo
multiplier = (range) * mult
midline = lo + multiplier * 4

oscillator = (close - midline)/(range/2)

a = oscillator > 0
b = oscillator > 0 and oscillator > mult*2
c = oscillator > 0 and oscillator > mult*4
d = oscillator > 0 and oscillator > mult*6

z = oscillator < 0
y = oscillator < 0 and oscillator < -mult*2
x = oscillator < 0 and oscillator < -mult*4
w = oscillator < 0 and oscillator < -mult*6


//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => ((uReg and regular_bullish_div) or (uHid and hidden_bullish_div)) and (quad==1? a[1]: quad==2?b[1]: quad==3?c[1]: quad==4?d[1]: false)// functions can be used to wrap up and work out complex conditions
exitLong() => oscillator <= 0
strategy.entry(id = "Buy", long = true, when = enterLong() )// use function or simple condition to decide when to get in
strategy.close(id = "Buy", when = exitLong() )// ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => ((uReg and regular_bearish_div) or (uHid and hidden_bearish_div)) and (quad==1? z[1]: quad==2?y[1]: quad==3?x[1]: quad==4?w[1]: false)
exitShort() => oscillator >= 0
strategy.entry(id = "Sell", long = false, when = enterShort())
strategy.close(id = "Sell", when = exitShort() )

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)


//EOF