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

رجحان زاویہ منتقل اوسط کراس اوور حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-25 14:35:13
ٹیگز:

img

جائزہ

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

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

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

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

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

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

اس حکمت عملی کے فوائد:

  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) 


مزید