Spiral Upward Breakthrough Moving Average Strategy


تخلیق کی تاریخ: 2024-01-15 11:45:23 آخر میں ترمیم کریں: 2024-01-15 11:45:23
کاپی: 0 کلکس کی تعداد: 540
1
پر توجہ دیں
1617
پیروکار

Spiral Upward Breakthrough Moving Average Strategy

جائزہ

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

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

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

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

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

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

اس طرح کے مجموعے سگنل کی وشوسنییتا کو بہتر بناتے ہیں اور واضح رجحانات کے بغیر اندھے تجارت سے بچنے میں مدد کرتے ہیں۔

اسٹریٹجک فوائد

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

  2. پیرامیٹرز کی اصلاح کے ذریعے ، حکمت عملی کی تجارت کی فریکوئنسی کو ایڈجسٹ کیا جاسکتا ہے۔ جیسے کہ پھیلاؤ کی شرح کے اشارے کے پیرامیٹرز کو ایڈجسٹ کرنا ، تاکہ پوزیشن کھولنے کی حساسیت کو کنٹرول کیا جاسکے۔

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

  4. دوبارہ داخلہ کے طریقہ کار سے رجحانات کا سراغ لگایا جاسکتا ہے ، جس سے منافع میں مزید اضافہ ہوتا ہے۔

اسٹریٹجک رسک

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

  2. اس طرح کی حکمت عملی کو آسانی سے قیدی بنایا جاسکتا ہے۔ جب قیمتوں میں تبدیلی آتی ہے تو ، اس سے زیادہ نقصان ہوسکتا ہے۔

  3. پیرامیٹرز کی غلط ترتیب سے ٹریڈنگ سگنل زیادہ کثرت یا کم سے کم ہوسکتے ہیں۔

  4. فکسڈ فی صد سٹاپ نقصان سے بڑے انفرادی نقصانات کو مکمل طور پر نہیں بچا جاسکتا ہے۔

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

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

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

  3. سگنل کے معیار کو بہتر بنانے کے لئے دیگر اشارے کے فلٹرز شامل کریں ، جیسے توانائی کے اشارے ، کمپن کے اشارے وغیرہ۔

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

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*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)