سرپل بریک آؤٹ چلتی اوسط حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-15 11:45:23
ٹیگز:

img

جائزہ

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

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

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

  1. سرپل چینلز: ٹرینڈ کی سمت کا تعین کرنے کے لئے اوپری اور نچلی بینڈ کو پلاٹ کریں۔ اوپری بینڈ سے اوپر قیمت توڑنے سے اوپر کا رجحان ظاہر ہوتا ہے ، جبکہ نچلی بینڈ سے نیچے توڑنے سے نیچے کا رجحان ظاہر ہوتا ہے۔

  2. شرح تبدیلی (ROC): قیمت میں تیزی کا پتہ لگائیں۔ مثبت حد سے اوپر ROC اشارہ کرتا ہے کہ قیمت میں تیزی سے اضافہ ہوتا ہے ، جبکہ منفی حد سے نیچے ROC اشارہ کرتا ہے کہ قیمت میں تیزی سے کمی واقع ہوتی ہے۔

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

مشترکہ سگنل رجحان کے خلاف تجارت سے بچنے اور قابل اعتماد کو بہتر بنانے میں مدد کرتے ہیں۔

فوائد

  1. زیادہ جیت کی شرح کے ساتھ قابل اعتماد سگنل رجحان اور رفتار کے درمیان معاہدے کی ضرورت ہے.

  2. پیرامیٹر ٹوننگ کے ذریعے اپنی مرضی کے مطابق ٹریڈنگ فریکوئنسی، مثال کے طور پر ROC پیرامیٹرز کو ایڈجسٹ کریں.

  3. انفرادی تجارتوں پر نیچے کے خطرے کو محدود کرنے کے لئے نقصان کو روکنے کے لئے.

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

خطرات

  1. کچھ تجارتی مواقع سے محروم اور سگنل کی وشوسنییتا کی ضرورت کی وجہ سے منافع کی صلاحیت کو محدود کرنا۔

  2. جب رجحان الٹ جاتا ہے تو پھنس جانے کے لئے کمزور، ممکنہ طور پر بڑے نقصانات کا باعث بنتا ہے.

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

  4. مقررہ سٹاپ نقصان فیصد بڑی منفی قیمت کے اتار چڑھاؤ پر شدید نقصانات کو روکنے کے قابل نہیں.

بہتر مواقع

  1. بہترین کارکردگی کے لئے ROC پیرامیٹرز کو بہتر بنائیں.

  2. خطرہ اور فائدہ کو متوازن کرنے کے لئے مختلف سٹاپ نقصان کی سطحوں کی جانچ کریں.

  3. سگنل کو بہتر بنانے کے لیے حجم، اتار چڑھاؤ کے اشارے جیسے دوسرے فلٹرز شامل کریں۔

  4. مختلف مارکیٹوں میں کارکردگی کا اندازہ کریں تاکہ بہترین فٹ مل سکے۔

  5. مختلف مارکیٹ کے حالات کے لئے متحرک پوزیشن سائزنگ متعارف کرانے.

نتیجہ

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


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SSL Chaikin BF 🚀", overlay=true, precision=2, 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

/////////////// Chaikin MF /////////////// 
_1 = input(false,  "═══════ Chaikin MF ═══════")
length = input(20, minval=1, title = "Chaikin SMA Length")
upperThreshold = input(0.04, step=0.01, title="Upper Threshold")
lowerThreshold = input(0.02, step=0.01, title="Lower Threshold")
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, length) / sum(volume, length)

/////////////// SSL Channels /////////////// 
_2 = 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

///////////// Rate Of Change ///////////// 
_3 = input(false,  "══════ Rate of Change ══════")
source = close
roclength = input(13, "ROC Length",  minval=1)
pcntChange = input(4, "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))

///////////////  Strategy  /////////////// 
long = sslUp > sslDown and isMoving() or crossover(mf, upperThreshold)
short = sslUp < sslDown and isMoving() or crossunder(mf, lowerThreshold)

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]) 

//////////////// Stop loss /////////////// 
_4 = input(false,  "════════ Stop Loss ═══════")
sl_inp = input(2.0, title='Stop Loss %') / 100

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("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
p1 = plot(sslDown, linewidth = 1, color=color.red)
p2 = plot(sslUp, linewidth = 1, color=color.lime)
fill(p1, p2,  color = sslDown < sslUp ? color.lime : color.red, transp=80)
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)
bgcolor(crossover(mf, upperThreshold) ? color.blue : crossunder(mf, lowerThreshold) ? color.orange : na, transp=30)

مزید