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


تخلیق کی تاریخ: 2024-01-25 14:35:13 آخر میں ترمیم کریں: 2024-01-25 14:35:13
کاپی: 2 کلکس کی تعداد: 1182
1
پر توجہ دیں
1617
پیروکار

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

جائزہ

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

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

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

  1. اوسط زاویہ: قیمت کے رجحان کی سمت کا تعین کرنے کے لئے یورک اوسط اور اشاریہ کی حرکت پذیری اوسط کے حساب سے زاویہ کا حساب لگائیں۔ زاویہ 0 سے زیادہ بڑھتی ہوئی رجحان کے لئے ، 0 سے کم کم رجحان کے لئے ہے۔

  2. قیمتوں میں تبدیلی کی شرح: حالیہ 12 K لائنوں کے اختتامی قیمتوں میں تبدیلی کی شرح کا حساب لگائیں ، اتار چڑھاؤ کے ذریعہ غیر موثر سگنل کو فلٹر کریں۔

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

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

طاقت کا تجزیہ

یہ حکمت عملی مندرجہ ذیل فوائد رکھتی ہے:

  1. اوسط لکیری اسکیلپنگ کا استعمال کرتے ہوئے رجحانات کا تعین کرنے کے لئے بہت قابل اعتماد ہے، جیتنے کی شرح زیادہ ہے.

  2. قیمتوں میں تبدیلی کی شرح کے اشارے مؤثر طریقے سے اتار چڑھاؤ کو فلٹر کرنے اور غیر موثر تجارت سے بچنے کے لئے استعمال کیا جاتا ہے۔

  3. جیوریک اوسط لائن نے تیزی سے ردعمل کا اظہار کیا ، جبکہ ای ایم اے نے ایک مستحکم رجحان کا فیصلہ کیا ، دونوں ایک دوسرے کی تکمیل کرتے ہیں۔

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

خطرے کا تجزیہ

اس حکمت عملی کے کچھ خطرات بھی ہیں:

  1. جب قیمت میں شدید اتار چڑھاؤ ہوتا ہے تو ، اوسط لائن میں غلط سگنل پیدا ہونے کا امکان زیادہ ہوتا ہے۔ آپ کو بہتر بنانے کے پیرامیٹرز کے ذریعہ اس خطرے کو کم کرنا چاہئے۔

  2. اس کے نتیجے میں غیر ضروری تجارت کی ایک بڑی تعداد پیدا ہوسکتی ہے۔ اس میں غیر فعال تجارت کو کم کرنے کے لئے اضافی فلٹرنگ شرائط شامل کی جاسکتی ہیں۔

  3. جب قیمتوں میں اچانک اضافے کا سبب بنتا ہے تو ، اسٹاپ نقصان کو شکست دی جاسکتی ہے ، اور اسٹاپ نقصان کی جگہ کو مناسب طریقے سے چھوڑ دیا جاسکتا ہے۔

اصلاح کی سمت

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

  1. اوسط لائن پیرامیٹرز کو بہتر بنائیں ، بہترین پیرامیٹرز کا مجموعہ تلاش کریں ، اور حکمت عملی کی استحکام کو بہتر بنائیں۔

  2. غیر فعال تجارت کو مزید کم کرنے کے لئے فلٹرنگ شرائط جیسے اتار چڑھاؤ ، حجم وغیرہ میں اضافہ کریں۔

  3. دوسرے اشارے کے ساتھ مل کر اسٹاپ نقصان کا تعین کریں ، تاکہ اسٹاپ نقصان کو زیادہ ذہین بنایا جاسکے۔

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Based on ma angles code by Duyck which also uses Everget Jurik MA calulation and angle calculation by KyJ
strategy("Trend Angle BF", overlay=false)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
src=input(ohlc4,title="source")

// definition of "Jurik Moving Average", by Everget
jma(_src,_length,_phase,_power) =>
    phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5
    beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2)
    alpha = pow(beta, _power)
    jma = 0.0
    e0 = 0.0
    e0 := (1 - alpha) * _src + alpha * nz(e0[1])
    e1 = 0.0
    e1 := (_src - e0) * (1 - beta) + beta * nz(e1[1])
    e2 = 0.0
    e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1])
    jma := e2 + nz(jma[1])

//// //// Determine Angle by KyJ //// //// 
angle(_src) =>
    rad2degree=180/3.14159265359  //pi 
    ang=rad2degree*atan((_src[0] - _src[1])/atr(14)) 

jma_line=jma(src,10,50,1)
ma=ema(src,input(56))
jma_slope=angle(jma_line)
ma_slope=angle(ma)

///////////// Rate Of Change ///////////// 
source = close
roclength = input(12, minval=1)
pcntChange = input(2, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Strategy ///////////////
long = ma_slope>=0 and isMoving()
short = ma_slope<=0 and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(900.0, title='Take Profit %') / 100 
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp) 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long",  strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)
    strategy.exit("Long Ex", "Long", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("Short Ex", "Short", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
    
///////////// Plotting /////////////
hline(0, title='Zero line', color=color.purple, linewidth=1)
plot(ma_slope,title="ma slope", linewidth=2,color=ma_slope>=0?color.lime:color.red)
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)