موافقت پذیر چلتی اوسط پر مبنی حکمت عملی کے بعد رجحان

مصنف:چاؤ ژانگ، تاریخ: 2024-01-30 16:30:20
ٹیگز:

img

جائزہ

اس حکمت عملی میں کاوفمین موافقت پذیر چلتی اوسط (KAMA) اشارے کو استعمال کیا جاتا ہے تاکہ تجارتی نظام کے بعد رجحان کو ڈیزائن کیا جاسکے۔ یہ رجحانات کو تیزی سے ٹریک کرسکتا ہے جب وہ تشکیل دیتے ہیں اور ہلکی مارکیٹوں کے دوران شور کو فلٹر کرسکتے ہیں۔ اسی وقت ، نظام مضبوط رسک کنٹرول کی صلاحیتوں کے ساتھ اسٹاپ نقصان کے طریقہ کار کے طور پر پیرابولک SAR (PSAR) اور اوسط حقیقی رینج ٹریلنگ اسٹاپ کو بھی مربوط کرتا ہے۔

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

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

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

  • اسٹاپ نقصان کے ل the ، یہ نظام تین اختیاری اسٹاپ نقصان کے طریقے فراہم کرتا ہے: کیما الٹ ، پی ایس اے آر الٹ ، اور اے ٹی آر ٹریلنگ اسٹاپ۔ سرمایہ کار استعمال کرنے کے لئے ایک یا اس کا ایک مجموعہ منتخب کرسکتے ہیں۔

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

  • KAMA اشارے کا منفرد ڈیزائن نظام کو تیزی سے ابھرتے ہوئے رجحانات کو پکڑنے، ہلچل مارکیٹوں کے دوران تجارت کو روکنے، مؤثر طریقے سے تجارتی تعدد کو کنٹرول کرنے، اور غیر ضروری سلائپ اور کمیشن کی لاگت کو کم کرنے کی اجازت دیتا ہے.

  • اس سسٹم میں متعدد اسٹاپ نقصان کے میکانزم شامل ہیں۔ سرمایہ کار ایک ہی نقصان کو مؤثر طریقے سے کنٹرول کرنے کے لئے اپنی ذاتی رسک ترجیحات کے مطابق مناسب اسٹاپ نقصان اسکیم کا انتخاب کرسکتے ہیں۔

  • یہ نظام مکمل طور پر اشارے اور سٹاپ نقصان کی لائنوں پر مبنی ہے، جس سے ٹرانزیکشن کی تبدیلی کی وجہ سے عام غلط اندراج کے مسائل سے بچنے میں مدد ملتی ہے۔

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

خطرے کا تجزیہ

  • یہ نظام نظام کے خطرات پر غور نہیں کرتا اور انتہائی مارکیٹ کے حالات میں نقصانات کو مؤثر طریقے سے کنٹرول نہیں کرسکتا ہے۔

  • نظام PARAMETERS مختلف مصنوعات اور تعدد کے مطابق ایڈجسٹ کرنے کی ضرورت ہو سکتی ہے، دوسری صورت میں یہ بہت زیادہ جارحانہ یا بہت زیادہ محتاط نتائج پیدا کرے گا.

  • اگر اسٹاپ نقصان کے لئے صرف KAMA اشارے پر انحصار کیا جائے تو ، ہلکی مارکیٹوں کے دوران whipsaws میں پھنس جانا آسان ہے۔ اس کو حل کرنے کے لئے PSAR یا ATR ٹریلنگ اسٹاپ کے ساتھ مل کر کام کرنے کی ضرورت ہے۔

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

  • رجحان فلٹرنگ اشارے جیسے ADX یا ضمنی اتار چڑھاؤ کو شامل کریں تاکہ ہلکے اور رجحان کی منتقلی کے مراحل کے دوران غلط سگنل پیدا کرنے سے بچیں۔

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

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

  • حکمت عملی کو دیگر مصنوعات جیسے کرپٹو کرنسیوں میں منتقل کرنے کی کوشش کریں۔ اس کے لئے پیرامیٹرز کو ایڈجسٹ کرنا یا دیگر معاون اشارے شامل کرنا ضروری ہوسکتا ہے۔

خلاصہ

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


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BenHampson
// @version=4
// Credit to:
// - ChuckBanger for much of the KAMA code
// - cheatcountry for the KAMA Filter code
// - millerrh for much of the ATR Stop code
// - racer8 for much of the Position Sizing code

// I have combined aspects of their work and built upon it to form a strategy I like. 
// The KAMA, with its filter, is used for entry.
// An ATR trailing stop loss, PSAR, and the KAMA can all optionally be used as exits, or you can use a combination of the three.

strategy(title="KAMA Strategy - Kaufman's Adaptive Moving Average", shorttitle="KAMA Strategy", overlay=true)

src = input(title="Source", type=input.source, defval=close)

// Exits
KAMA1SL = input(title = 'KAMA 1 Stop Loss', type = input.bool, defval = true)
ATRTSL = input(title = 'ATR Trailing Stop Loss', type = input.bool, defval = false)
PSARSL = input(title = 'PSAR Stop Loss', type = input.bool, defval = false)

// KAMA 1 (Fastest)
length1 = input(title="KAMA 1: Length", type=input.integer, defval=14)
fastLength1 = input(title="KAMA 1: Fast KAMA Length", type=input.integer, defval=2)
slowLength1 = input(title="KAMA 1: Slow KAMA Length", type=input.integer, defval=20)

length2 = input(title="KAMA 2: Length 2", type=input.integer, defval=15)
fastLength2 = input(title="KAMA 2: Fast KAMA Length", type=input.integer, defval=3)
slowLength2 = input(title="KAMA 2: Slow KAMA Length", type=input.integer, defval=22)

length3 = input(title="KAMA 3: Length 3", type=input.integer, defval=16)
fastLength3 = input(title="KAMA 3: Fast KAMA Length", type=input.integer, defval=4)
slowLength3 = input(title="KAMA 3: Slow KAMA Length", type=input.integer, defval=24)

length4 = input(title="KAMA 4: Length", type=input.integer, defval=17)
fastLength4 = input(title="KAMA 4: Fast KAMA Length", type=input.integer, defval=5)
slowLength4 = input(title="KAMA 4: Slow KAMA Length", type=input.integer, defval=26)

// KAMA 5 (Medium)
length5 = input(title="KAMA 5: Length", type=input.integer, defval=18)
fastLength5 = input(title="KAMA 5: Fast KAMA Length", type=input.integer, defval=6)
slowLength5 = input(title="KAMA 5: Slow KAMA Length", type=input.integer, defval=28)

length6 = input(title="KAMA 6: Length", type=input.integer, defval=19)
fastLength6 = input(title="KAMA 6: Fast KAMA Length", type=input.integer, defval=7)
slowLength6 = input(title="KAMA 6: Slow KAMA Length", type=input.integer, defval=30)

length7 = input(title="KAMA 7: Length", type=input.integer, defval=20)
fastLength7 = input(title="KAMA 7: Fast KAMA Length", type=input.integer, defval=8)
slowLength7 = input(title="KAMA 7: Slow KAMA Length", type=input.integer, defval=32)

// KAMA 8 (Slowest)
length8 = input(title="KAMA 8: Length", type=input.integer, defval=21)
fastLength8 = input(title="KAMA 8: Fast KAMA Length", type=input.integer, defval=9)
slowLength8 = input(title="KAMA 8: Slow KAMA Length", type=input.integer, defval=34)

// Kaufman's Adaptive Moving Average
getKAMA(src, length1, fastLength1, slowLength1) =>
    mom = abs(change(src, length1))
    volatility = sum(abs(change(src)), length1)
    
    // Efficiency Ratio
    er = volatility != 0 ? mom / volatility : 0
    
    fastAlpha = 2 / (fastLength1 + 1)
    slowAlpha = 2 / (slowLength1 + 1)
    
    // KAMA Alpha
    sc = pow((er * (fastAlpha - slowAlpha)) + slowAlpha, 2)
    
    kama = 0.0
    kama := sc * src + (1 - sc) * nz(kama[1])
    kama

kama1 = getKAMA(src, length1, fastLength1, slowLength1)
kama2 = getKAMA(src, length2, fastLength2, slowLength2)
kama3 = getKAMA(src, length3, fastLength3, slowLength3)
kama4 = getKAMA(src, length4, fastLength4, slowLength4)
kama5 = getKAMA(src, length5, fastLength5, slowLength5)
kama6 = getKAMA(src, length6, fastLength6, slowLength6)
kama7 = getKAMA(src, length7, fastLength7, slowLength7)
kama8 = getKAMA(src, length8, fastLength8, slowLength8)

//If the kama1 has increased...
kama1delta = kama1[0] - kama1[1]
kama3delta = kama3[0] - kama3[1]
kama8delta = kama8[0] - kama8[1]

// KAMA Plots
plot(kama1, title="KAMA 1", color=#e91e63, display=display.all, linewidth=2)
plot(kama2, title="KAMA 2", color=color.red, display=display.all)
plot(kama3, title="KAMA 3", color=color.red, display=display.all)
plot(kama4, title="KAMA 4", color=color.orange, display=display.all)
plot(kama5, title="KAMA 5", color=color.orange, display=display.all)
plot(kama6, title="KAMA 6", color=color.yellow, display=display.all)
plot(kama7, title="KAMA 7", color=color.yellow, display=display.all)
plot(kama8, title="KAMA 8", color=color.white, display=display.all)



//========================================= KAMA FILTER ===========================================

// Copyright (c) 2019-present, Franklin Moormann (cheatcountry)
// Moving Average Adaptive Filter [CC] script may be freely distributed under the MIT license.

entryFilter = input(title="KAMA Entry Filter", type=input.float, defval=1, minval=0.01)
exitFilter = input(title="KAMA Exit Filter", type=input.float, defval=0.5, minval=0.01)

entryMAAF = entryFilter * stdev(kama1delta, length1)
exitMAAF = exitFilter * stdev(kama1delta, length1)
srcEma = ema(src, length1)



//========================================= TRAILING ATR STOP ====================================

// The following is an adaptation of Trailing ATR Stops by @millerrh
// He based it on scripts by @garethyeo & @SimpleCryptoLife

// Inputs

atrLookback = input(defval=14,title="Trailing ATR Lookback Period",type=input.integer)
multiplier = input(defval=3,title="Trailing ATR Multiplier",type=input.float, step=0.1, minval=0.5, maxval=4)
trailMode = input(title="Trail Mode", defval="Trailing", options=["Running", "Trailing"])
trigInput = input(title="Trigger Trailing Stop On", defval="Wick", options=["Close","Wick"]) 

// Calculate ATR
atrValue = atr(atrLookback)
atrMultiplied = atrValue * multiplier

// Plot the price minus the ATR
atrLow = low - atrMultiplied

// Calculate the low trailing ATRs every time. The trailing stop loss never goes down.
// Set them to something to start with
trailAtrLow = atrLow

// If the ATR Low has gone up AND it has gone above the trail, the low trailing ATR should also go up. If the ATR Low has gone up or down, but not below the trail, the ATR trail stays where it is
trailAtrLow := na(trailAtrLow[1]) ? trailAtrLow : atrLow >= trailAtrLow[1] ? atrLow : trailAtrLow[1]

// Trigger stop based on candle close or low
trigSupport = trigInput == "Close" ? close : trigInput == "Wick" ? low : na

// Determine if price is below support
supportHit = trigSupport <= trailAtrLow

// If price is below support, reset the trailing ATR
trailAtrLow := supportHit ? atrLow : trailAtrLow

// Plot Lines
plotLow = ATRTSL ? trailAtrLow : na
plot(plotLow, title="ATR Low", color=color.white, transp=50, style=plot.style_linebr, linewidth=1, display=display.all)



//====================================== PSAR STOP ==========================================

start = input(0.02, "PSAR Start")
increment = input(0.02, "PSAR Increment")
maximum = input(0.2, "PSAR Max Value")
psar = sar(start, increment, maximum)
psarPlot  = PSARSL ? psar : na
plot(psarPlot, "Parabolic SAR", style=plot.style_cross, color=#3A6CA8, display=display.all)



//========================================= ENTRY & EXITS =====================================================

// Entry
long = kama1delta > 0 and kama1delta > entryMAAF
strategy.entry("Buy", true, when = long) 

// Close
longClose = (PSARSL ? crossunder(close, psar) : na) or (KAMA1SL ? kama1delta < 0 and abs(kama1delta) > exitMAAF : na) or (ATRTSL ? supportHit : na)
strategy.close("Buy", when = longClose, comment = "Sell")

مزید