
اس حکمت عملی کا استعمال کرتے ہوئے کاوفمین خود کار طریقے سے چلنے والی اوسط ((KAMA) اشارے ایک رجحان ٹریڈنگ سسٹم کو ڈیزائن کیا گیا ہے۔ یہ نظام رجحانات کی تشکیل کے وقت تیزی سے رجحانات کی پیروی کرسکتا ہے ، اور ہلچل کے حالات میں شور کو فلٹر کرسکتا ہے۔ اس کے علاوہ ، اس نظام میں پیرول لائن ٹرانسمیشن سسٹم (PSAR) اور اوسط حقیقی اتار چڑھاؤ کی شرح ٹریکنگ اسٹاپ (ATR ٹریلنگ اسٹاپ) کو اسٹاپ میکانیزم کے طور پر شامل کیا گیا ہے ، جس میں خطرے پر قابو پانے کی طاقت ہے۔
KAMA اشارے کی لمبائی حالیہ مدت کے لئے مارکیٹ میں اتار چڑھاؤ کی رفتار کے مطابق ہے۔ جب قیمت میں تبدیلی حالیہ شور سے زیادہ ہوتی ہے تو EMA ونڈو مختصر ہوجاتی ہے۔ جب قیمت میں تبدیلی حالیہ شور سے کم ہوتی ہے تو EMA ونڈو لمبی ہوجاتی ہے۔ اس سے KAMA کو تیزی سے رجحانات کی پیروی کرنے کی اجازت ملتی ہے ، جبکہ ہلچل کے حالات میں شور کو فلٹر کرتی ہے۔
نظام بنیادی طور پر تیزی سے کاما ((کاما 1) کی بنیاد پر رجحان کی سمت کا فیصلہ کرتا ہے۔ کاما 1 اوپر کی طرف زیادہ کرتا ہے ، نیچے کی طرف خالی کرتا ہے۔ جعلی توڑنے کے لئے فلٹر کرنے کے لئے ، کاما فلٹر ترتیب دیا گیا ہے۔ کاما 1 میں تبدیلی صرف اس وقت ہوتی ہے جب حالیہ اتار چڑھاؤ ایک معیاری فاصلے سے زیادہ ہو۔
نقصان کو روکنے کے لئے ، نظام تین اختیاری روک تھام کے طریقوں کی پیش کش کرتا ہے: کاما ریورس ، پی ایس اے آر ریورس ، اے ٹی آر موبائل روک تھام پر مبنی۔ سرمایہ کار انفرادی طور پر ایک یا زیادہ سے زیادہ استعمال کا مجموعہ منتخب کرسکتے ہیں۔
KAMA اشارے کا انوکھا ڈیزائن نظام کو نئے رجحانات کو تیزی سے پکڑنے ، اتار چڑھاؤ کے حالات میں تجارت کو روکنے ، تجارت کی فریکوئنسی کو مؤثر طریقے سے کنٹرول کرنے اور غیر ضروری پوائنٹس اور فیسوں کے نقصان کو کم کرنے کی اجازت دیتا ہے۔
اس نظام میں کئی طرح کے نقصانات کا انتظام ہے۔ سرمایہ کاروں کو انفرادی خطرے کی ترجیحات کے مطابق مناسب نقصانات کا انتظام کرنے کا اختیار ہے ، جس سے انفرادی نقصانات پر قابو پایا جاسکتا ہے۔
یہ نظام مکمل طور پر اشارے اور سٹاپ لائن پر مبنی ہے، جس سے عام طور پر ٹرانسمیشن ٹریڈنگ کے غلط اندراج کے مسئلے سے بچنے کے لئے.
کثیر پیرامیٹرز کی ترتیب اور شرائط کا مجموعہ نظام کی تخصیص کے لئے بہت زیادہ گنجائش فراہم کرتا ہے۔ صارف مختلف اقسام اور ادوار کے لئے حسب ضرورت اصلاحات کرسکتا ہے۔
اس نظام میں سسٹم کے خطرے کو مدنظر نہیں رکھا گیا ہے اور انتہائی صورت حال میں نقصان کو مؤثر طریقے سے کنٹرول نہیں کیا جا سکتا۔
سسٹم پیرامیٹرز کو مختلف نسلوں کے لئے مختلف ادوار میں ایڈجسٹ کرنے کی ضرورت ہوسکتی ہے ، ورنہ یہ بہت زیادہ شدت پسند یا بہت زیادہ قدامت پسند نتائج کا باعث بنے گا۔
اگر صرف KAMA اشارے پر انحصار کیا جائے تو زلزلے کے حالات میں قید ہوجاتا ہے۔ اس کو حل کرنے کے لئے پی ایس اے آر یا اے ٹی آر موبائل اسٹاپ کے ساتھ مل کر استعمال کرنے کی ضرورت ہے۔
رجحان فلٹرنگ اشارے شامل کریں ، جیسے ADX یا انکلوپیٹیوٹی اشارے ، تاکہ ہلچل اور رجحان کی تبدیلی کے مرحلے میں غلط سگنل سے بچا جاسکے۔
انفرادی پرجاتیوں اور فکسڈ سائیکلوں کے لئے پیرامیٹرز کو بہتر بنانے اور جانچنے کے لئے ، استحکام کو بہتر بنائیں۔ اصلاحی طول و عرض میں کاما پیرامیٹرز کا مجموعہ ، اسٹاپ نقصان پیرامیٹرز وغیرہ شامل ہیں۔
پیرامیٹرز کی اصلاح کے بجائے مشین لرننگ ماڈل آزمائیں۔ نیورل نیٹ ورکس یا فیصلے کے درخت کے ماڈل جو بڑے پیمانے پر تاریخی اعداد و شمار کی تربیت کا استعمال کرتے ہوئے خرید و فروخت کے وقت اور اسٹاپ نقصان کا تعین کرتے ہیں۔
حکمت عملی کو دوسری اقسام جیسے ڈیجیٹل کرنسیوں میں منتقل کرنے کی کوشش کریں۔ اس میں پیرامیٹرز کو ایڈجسٹ کرنے یا دیگر معاون اشارے شامل کرنے کی ضرورت پڑسکتی ہے۔
اس حکمت عملی میں کاما رجحانات کا تعین اور متعدد اسٹاپ نقصانات شامل ہیں ، جو رجحان کی سمت کو مؤثر طریقے سے ٹریک کرنے اور خطرے پر قابو پانے کے قابل ہیں۔ کاما اشارے کی انفرادیت حکمت عملی کو ابتدائی رجحانات کی سمت کا فوری طور پر تعین کرنے کی اجازت دیتی ہے ، جعلی بریک کی پریشانیوں سے بچنے کے لئے۔ اپنی مرضی کے مطابق اور قابل اصلاح پیرامیٹرز صارف کو انفرادی ایڈجسٹمنٹ کے لئے بہت زیادہ گنجائش فراہم کرتے ہیں۔ اگر پیرامیٹرز کی اصلاح اور مشین لرننگ ماڈل کو ایک ہی نسل کے لئے ایک ہی سائیکل میں ضم کیا جائے تو ، حکمت عملی کی کارکردگی کو مزید بہتر بنانے کی امید ہے۔
/*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")