متعدد چلتی اوسطوں پر مبنی رجحان کی تبدیلی کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-21 14:53:48
ٹیگز:

img

جائزہ

یہ حکمت عملی TDI ، TCF ، TTF اور TII سمیت متعدد رجحان اشارے کے الٹ پر مبنی خرید اور فروخت کے سگنل تیار کرتی ہے۔ یہ حکمت عملی منتخب کرنے کی اجازت دیتی ہے کہ داخلہ اور باہر نکلنے کے لئے کون سا اشارے کا اشارہ استعمال کیا جائے۔

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

  • TDI اشارے

    ٹی ڈی آئی اشارے کو قیمت کی رفتار کو جمع کرنے اور ہموار کرنے کی تکنیکوں کے ساتھ استعمال کرتے ہوئے بنایا گیا ہے۔ جب ٹی ڈی آئی کی سمت ٹی ڈی آئی لائن سے اوپر عبور کرتی ہے اور اس سے نیچے عبور کرتے وقت باہر نکلتی ہے۔

  • ٹی سی ایف اشارے

    ٹی سی ایف اشارے میں قیمتوں میں مثبت اور منفی تبدیلیوں کا اندازہ لگایا جاتا ہے۔ جب مثبت تبدیلی منفی تبدیلی سے زیادہ ہوتی ہے تو یہ طویل ہوجاتا ہے ، ورنہ یہ باہر نکل جاتا ہے۔

  • ٹی ٹی ایف اشارے

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

  • TII اشارے

    ٹی آئی آئی رجحانات کی تبدیلیوں کی نشاندہی کرنے کے لئے حرکت پذیر اوسط اور قیمت کے بینڈ کو جوڑتا ہے۔ اس میں قلیل مدتی اور طویل مدتی رجحانات دونوں پر غور کیا جاتا ہے۔ لانگ سگنل 80 سے اوپر ہے اور باہر نکلنا 80 سے نیچے ہے۔

انٹری طویل اور قریبی منطق ترتیب اشارے کی بنیاد پر مناسب سگنل کا انتخاب کرتا ہے.

فوائد

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

  1. رجحان کی تبدیلی کے مواقع کو بروقت انداز میں تبدیل کرنے کے سگنل کا استعمال کرتے ہوئے پکڑتا ہے
  2. مختلف اشارے کی تشکیل کے ذریعے بہتر بنانے کے قابل
  3. سگنلز کی تصدیق کے لیے اشارے کے بھرپور مجموعے استعمال کیے جا سکتے ہیں۔

خطرات

اس حکمت عملی کا سامنا کرنے والے اہم خطرات:

  1. اشارے کے سگنل میں غلط سگنل ہوسکتے ہیں جس کے نتیجے میں نقصانات ہوسکتے ہیں
  2. انفرادی اشارے رجحانات کا مکمل اندازہ نہیں لگا سکتے اور مارکیٹ شور کے لئے حساس ہیں
  3. اشارے اور تجارتی پیرامیٹرز کی غلط تشکیل مارکیٹ کی غلط تشریح کر سکتی ہے اور غلط تجارت پیدا کر سکتی ہے

خطرات کو کم کیا جا سکتا ہے:

  1. بہترین مجموعے تلاش کرنے کے لئے اشارے کے پیرامیٹرز کو بہتر بنانا
  2. معیار کو بہتر بنانے کے لئے متعدد اشارے سگنل کی تصدیق کی ضرورت
  3. ایک ہی تجارت کے نقصان کو کنٹرول کرنے کے لئے پوزیشن سائزنگ کو ایڈجسٹ کرنا

بہتر مواقع

اسٹریٹیجی کو کئی شعبوں میں بہتر بنایا جا سکتا ہے:

  1. مختلف مارکیٹ سائیکلوں میں زیادہ سے زیادہ اشارے اور پیرامیٹرز کا تجربہ کریں
  2. بہترین مجموعے تلاش کرنے کے لئے اشارے شامل کریں یا کم کریں
  3. غلط سگنل کو فلٹر کریں
  4. پوزیشن سائزنگ کی حکمت عملیوں کو بہتر بنائیں، جیسے متغیر سائز، ٹریلنگ سٹاپ نقصان
  5. سگنل کے معیار میں مدد کے لئے مشین لرننگ سکورنگ کو شامل کریں

نتیجہ

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


/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-15 03:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © kruskakli
//
// Here is a collection of Trend Indicators as defined by M.H Pee and presented
// in various articles of the "STOCKS & COMMODITIES Magazine"
//
// The actual implementation of the indicators here are made by: everget
//
// I have gather them here so that they easily can be tested.
//
// My own test was made using 15 companies from the OMXS30 list
// during the time period of 2016-2018, and I only went LONG.
//
// The result was as follows:
//
//        Average    Std.Dev
//        profit
//  TDI    3.04%      5.97
//  TTF    1.22%.     5.73
//  TII    1.07%      6.2
//  TCF    0.32%      2.68
//
strategy("M.H Pee indicators", overlay=true)


use = input(defval="TDI", title="Use Indicator", type=input.string,
             options=["TDI","TCF","TTF","TII"])

src = close


//
// TDI
//
length = input(title="Length", type=input.integer, defval=20)
mom = change(close, length)
tdi = abs(sum(mom, length)) - sum(abs(mom), length * 2) + sum(abs(mom), length)
// Direction Indicator
tdiDirection = sum(mom, length)
tdiLong = crossover(tdiDirection, tdi)
tdiXLong = crossunder(tdiDirection, tdi)

//
// TCF
//
tcflength = input(title="Length", type=input.integer, defval=35)

plusChange(src) =>
    change_1 = change(src)
    change(src) > 0 ? change_1 : 0.0
minusChange(src) =>
    change_1 = change(src)
    change(src) > 0 ? 0.0 : -change_1

plusCF = 0.0
plusChange__1 = plusChange(src)
plusCF := plusChange(src) == 0 ? 0.0 : plusChange__1 + nz(plusCF[1])

minusCF = 0.0
minusChange__1 = minusChange(src)
minusCF := minusChange(src) == 0 ? 0.0 : minusChange__1 + nz(minusCF[1])

plusTCF = sum(plusChange(src) - minusCF, tcflength)
minusTCF = sum(minusChange(src) - plusCF, tcflength)

tcfLong = plusTCF > 0 
tcfXLong = plusTCF < 0

//
// TTF
//
ttflength = input(title="Lookback Length", type=input.integer, defval=15)

hh = highest(length)
ll = lowest(length)

buyPower = hh - nz(ll[length])
sellPower = nz(hh[length]) - ll

ttf = 200 * (buyPower - sellPower) / (buyPower + sellPower)

ttfLong = crossover(ttf, 100)
ttfXLong = crossunder(ttf, -100)

//
// TII
//
majorLength = input(title="Major Length", type=input.integer, defval=60)
minorLength = input(title="Minor Length", type=input.integer, defval=30)
upperLevel = input(title="Upper Level", type=input.integer, defval=80)
lowerLevel = input(title="Lower Level", type=input.integer, defval=20)

sma = sma(src, majorLength)

positiveSum = 0.0
negativeSum = 0.0

for i = 0 to minorLength - 1 by 1
    price = nz(src[i])
    avg = nz(sma[i])
    positiveSum := positiveSum + (price > avg ? price - avg : 0)
    negativeSum := negativeSum + (price > avg ? 0 : avg - price)
    negativeSum

tii = 100 * positiveSum / (positiveSum + negativeSum)

tiiLong = crossover(tii, 80)
tiiXLong = crossunder(tii,80)

//
// LOGIC 
//
enterLong = (use == "TDI" and tdiLong) or (use == "TCF" and tcfLong) or (use == "TTF" and ttfLong) or (use == "TII" and tiiLong)
exitLong = (use == "TDI" and tdiXLong) or (use == "TCF" and tcfXLong) or (use == "TTF" and ttfXLong) or (use == "TII" and tiiXLong)


// Time range for Back Testing
btStartYear  = input(title="Back Testing Start Year",  type=input.integer, defval=2016)
btStartMonth = input(title="Back Testing Start Month", type=input.integer, defval=1)
btStartDay   = input(title="Back Testing Start Day",   type=input.integer, defval=1)
startTime = timestamp(btStartYear, btStartMonth, btStartDay, 0, 0)

btStopYear  = input(title="Back Testing Stop Year",  type=input.integer, defval=2028)
btStopMonth = input(title="Back Testing Stop Month", type=input.integer, defval=12)
btStopDay   = input(title="Back Testing Stop Day",   type=input.integer, defval=31)
stopTime  = timestamp(btStopYear, btStopMonth, btStopDay, 0, 0)

window() => time >= startTime and time <= stopTime ? true : false


riskPerc     = input(title="Max Position  %", type=input.float, defval=20, step=0.5)
maxLossPerc  = input(title="Max Loss Risk %", type=input.float, defval=5, step=0.25)

// Average True Range (ATR) measures market volatility.
// We use it for calculating position sizes.
atrLen   = input(title="ATR Length", type=input.integer, defval=14)
stopOffset = input(title="Stop Offset", type=input.float, defval=1.5, step=0.25)
limitOffset = input(title="Limit Offset", type=input.float, defval=1.0, step=0.25)
atrValue = atr(atrLen)


// Calculate position size
maxPos = floor((strategy.equity * (riskPerc/100)) / src)
// The position sizing algorithm is based on two parts:
// a certain percentage of the strategy's equity and
// the ATR in currency value.
riskEquity  = (riskPerc / 100) * strategy.equity
// Translate the ATR into the instrument's currency value.
atrCurrency = (atrValue * syminfo.pointvalue)
posSize0    = min(floor(riskEquity / atrCurrency), maxPos)
posSize     = posSize0 < 1 ? 1 : posSize0

if (window())
    strategy.entry("Long", long=true, qty=posSize0, when=enterLong)
    strategy.close_all(when=exitLong)

مزید