একাধিক চলমান গড়ের উপর ভিত্তি করে প্রবণতা বিপরীত কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৩-১১-২১ 14:53:48
ট্যাগঃ

img

সারসংক্ষেপ

এই কৌশলটি TDI, TCF, TTF এবং TII সহ একাধিক প্রবণতা সূচকগুলির বিপরীতমুখী উপর ভিত্তি করে ক্রয় এবং বিক্রয় সংকেত উত্পন্ন করে। কৌশলটি প্রবেশ এবং প্রস্থানগুলির জন্য কোন সূচক সংকেতটি ব্যবহার করা যায় তা নির্বাচন করতে দেয়।

কৌশলগত যুক্তি

  • টিডিআই সূচক

    টিডিআই সূচকটি সংযোজন এবং মসৃণকরণ কৌশল সহ মূল্য গতি ব্যবহার করে নির্মিত হয়। যখন টিডিআই দিকটি টিডিআই লাইনের উপরে অতিক্রম করে এবং নীচে অতিক্রম করার সময় প্রস্থান করে তখন এটি দীর্ঘ হয়।

  • টিসিএফ সূচক

    টিসিএফ সূচকটি উত্থান এবং হ্রাসের শক্তিগুলি পরিমাপ করার জন্য ইতিবাচক এবং নেতিবাচক মূল্য পরিবর্তনগুলি পরিমাপ করে। ইতিবাচক পরিবর্তন নেতিবাচক পরিবর্তনের চেয়ে বেশি হলে এটি দীর্ঘ হয়, অন্যথায় এটি প্রস্থান করে।

  • টিটিএফ সূচক

    টিটিএফ সূচকটি প্রবণতা নির্ধারণের জন্য সর্বোচ্চ এবং সর্বনিম্ন মূল্যের শক্তির তুলনা করে। দীর্ঘ সংকেতটি যখন টিটিএফ 100 এর উপরে অতিক্রম করে এবং -100 এর নীচে অতিক্রম করার সময় প্রস্থান হয়।

  • টিআইআই সূচক

    টিআইআই প্রবণতা বিপরীততা সনাক্ত করতে চলমান গড় এবং মূল্য ব্যান্ড একত্রিত করে। এটি স্বল্প ও দীর্ঘমেয়াদী প্রবণতা উভয়ই বিবেচনা করে। দীর্ঘ সংকেত 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)

আরো