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

کشش ثقل کے مرکز SSL چینل رجحان کی پیروی کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-09-19 21:30:23
ٹیگز:

جائزہ

یہ حکمت عملی قیمت کے رجحانات کا تعین کرنے اور بریکآؤٹس کی پیروی کرنے کے لئے مرکز کشش ثقل اشارے اور ایس ایس ایل چینل اشارے کو جوڑتی ہے۔ یہ رجحان کی پیروی کرنے والی حکمت عملی کی قسم سے تعلق رکھتی ہے۔ یہ خطرات کو کنٹرول کرنے کے لئے متحرک اے ٹی آر اسٹاپ نقصان کا بھی استعمال کرتی ہے۔

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

  1. مرکزِ کشش ثقل کے اشارے کا حساب لگائیں، اوپر اور نیچے کی بانڈیں اوپر اور نیچے کے رجحانات کی حدود ہیں۔

  2. ایس ایس ایل چینل اشارے کا حساب لگائیں، جس کے اندر حد ہے، باہر رجحان کی سمت ہے.

  3. جب قیمت اوپری بینڈ یا چینل کو توڑتی ہے تو ، اپ ٹرینڈ کا تعین کریں اور طویل ہوجائیں۔ جب قیمت نچلی بینڈ یا چینل کو توڑتی ہے تو ، ڈاؤن ٹرینڈ کا تعین کریں اور مختصر ہوجائیں۔

  4. متحرک اے ٹی آر سٹاپ نقصان کا استعمال کریں ٹریک سٹاپ نقصان کی سطحوں کو روکنے اور بڑھے ہوئے نقصان سے بچنے کے لئے.

  5. اصل ٹریڈنگ سگنل پیدا کرنے کے لئے بیک ٹیسٹ مدت کے ساتھ مل کر.

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

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

  1. دو اشارے کا استعمال رجحانات کا تعین کرنے میں درستگی کو بہتر بناتا ہے۔

  2. مرکز کشش ثقل رجحان کی تبدیلیوں کے لئے حساس ہے، ایس ایس ایل چینل واضح طور پر رجحان کی سمت کی وضاحت کرتا ہے.

  3. متحرک اے ٹی آر سٹاپ نقصان کو مارکیٹ کی اتار چڑھاؤ کی بنیاد پر لچکدار طریقے سے ایڈجسٹ کیا جاتا ہے۔

  4. سادہ اور واضح حکمت عملی کے قواعد، سمجھنے اور لاگو کرنے میں آسان.

  5. پیرامیٹرز کے لئے بڑی اصلاح کی جگہ، مختلف مارکیٹوں کے لئے ایڈجسٹ کیا جا سکتا ہے.

  6. حکمت عملی کی کارکردگی کی توثیق کرنے کے لئے مکمل بیک ٹسٹ فعالیت.

خطرے کا تجزیہ

  1. کچھ معاملات میں مرکز کشش ثقل اور ایس ایس ایل دونوں ناکام ہوسکتے ہیں ، جس سے غلط سگنل پیدا ہوتے ہیں۔ تصدیق کے لئے دوسرے اشارے شامل کرسکتے ہیں۔

  2. متحرک سٹاپ نقصان بہت جارحانہ ہو سکتا ہے، سٹاپ نقصان کی حد کو نرم کر سکتا ہے.

  3. غلط بیک ٹسٹ مدت کا انتخاب خراب حکمت عملی کے نتائج کا باعث بن سکتا ہے ، مختلف مارکیٹ کے مراحل پر بیک ٹسٹ کرنے کی ضرورت ہے۔

  4. تجارتی اخراجات کے اثرات پر مکمل طور پر غور کرنے کی ضرورت ہے۔

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

  1. زیادہ سے زیادہ جوڑے تلاش کرنے کے لئے مختلف پیرامیٹر مجموعے کی جانچ کریں.

  2. متحرک سٹاپ نقصان ATR مدت اور ضارب پیرامیٹرز کو بہتر بنائیں.

  3. سگنل فلٹرنگ کے لئے دیگر اشارے متعارف کروائیں، مثال کے طور پر MACD، KDJ.

  4. رجحان کی سمت کی پیشن گوئی میں مدد کے لئے مشین سیکھنے کے ماڈل شامل کریں.

  5. پیسے کے انتظام کو بہتر بنائیں، پوزیشن سائزنگ کے قوانین مقرر کریں.

  6. مخصوص مصنوعات کے لئے ٹھیک ٹھیک پیرامیٹرز.

خلاصہ

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


/*backtest
start: 2023-08-19 00:00:00
end: 2023-09-13 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Thanks to HPotter for the original code for Center of Gravity Backtest
strategy("CoG SSL BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
_0 = input(false,  "════════ Test Period ═══════")
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

/////////////// SSL Channels /////////////// 
_1 = input(false,  "═════════ SSL ══════════")
len1=input(title="SMA Length 1", defval=12)
len2=input(title="SMA Length 2", defval=13)

smaHigh = sma(high, len1)
smaLow = sma(low, len2)

Hlv = 0
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh

///////////// Center of Gravity /////////////
_2 = input(false,  "═════════ CoG ══════════")
Length = input(25, minval=1)
m = input(5, minval=0)
Percent = input(6, minval=0, title="COG %")

xLG = linreg(close, Length, m)
xLG1r = xLG + ((close * Percent) / 100)
xLG1s = xLG - ((close * Percent) / 100)

pos = 0.0
pos := iff(close > xLG1r, 1, iff(close < xLG1s, -1, nz(pos[1], 0))) 
possig = iff(pos == 1, 1, iff(pos == -1, -1, pos))

///////////// Rate Of Change ///////////// 
_3 = input(false,  "══════ Rate of Change ══════")
source = close
roclength = input(2, "ROC Length",  minval=1)
pcntChange = input(10, "ROC % Change", minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Srategy ///////////////
long = possig == 1 or (sslUp > sslDown and isMoving())
short = possig == -1 or (sslUp < sslDown 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])

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

/////////////// Dynamic ATR Stop Losses ///////////////
_4 = input(false,  "════════ Stop Loss ═══════")
atrLkb = input(1, minval=1, title='ATR Stop Period')
atrMult = input(2, step=0.25, title='ATR Stop Multiplier') 
atr1 = atr(atrLkb)

longStop = 0.0
longStop :=  short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop[1]
shortStop = 0.0
shortStop := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop[1]

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L",  strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=longStop, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=shortStop, when=since_shortEntry > 0)

/////////////// Plotting ///////////////
p1 = plot(sslDown, linewidth = 1, color=color.red, title="SSL down")
p2 = plot(sslUp, linewidth = 1, color=color.lime, title="SSL up")
fill(p1, p2,  color = not isMoving() ? color.white : sslDown < sslUp ? color.lime : color.red, transp=80)
plot(xLG1r, color=color.lime, title="LG1r")
plot(xLG1s, color=color.red, title="LG1s")
plot(strategy.position_size <= 0 ? na : longStop, title="Long Stop Loss", color=color.yellow, style=plot.style_circles, linewidth=1)
plot(strategy.position_size >= 0 ? na : shortStop, title="Short Stop Loss", color=color.orange, style=plot.style_circles, linewidth=1)
bgcolor(long ? color.green : short ? color.red : not isMoving() ? color.white : na, transp=80)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)

مزید