ডাবল মুভিং এভারেজ বোলিংজার ব্যান্ড ট্রেন্ড ট্র্যাকিং কৌশল

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

img

সারসংক্ষেপ

এই কৌশলটি বিভিন্ন সময়সীমার উপর দুটি এক্সপোনেন্সিয়াল মুভিং মিডিয়ার (ইএমএ) গণনা করে সাধারণ বাজারের প্রবণতা দিক নির্ধারণ করে এবং প্রবণতা ট্রেডিং বাস্তবায়নের জন্য অভিযোজিত বোলিংজার ব্যান্ড ব্যবহার করে প্রবণতা দিক বরাবর অতিরিক্ত ক্রয় এবং oversold সুযোগ সনাক্ত করে।

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

  1. ২০০-পরিঘরের ইএমএ এবং ৩০-পরিঘরের ইএমএ গণনা করা হয়। যদি ২০০-পরিঘরের ইএমএ ৩০-পরিঘরের ইএমএ-র চেয়ে বড় হয়, তবে দীর্ঘমেয়াদী প্রবণতা উপরে নির্ধারিত হয়। অন্যথায়, এটি নিচে নির্ধারিত হয়।

  2. প্রবণতা দিক নির্ধারণের পরে, বলিংজার ব্যান্ডের বেসলাইন, উপরের ব্যান্ড এবং নিম্ন ব্যান্ড গণনা করা হয়। বেসলাইনটি একটি কনফিগারযোগ্য সময়সীমার (যেমন 8 টি সময়কাল) উপর এসএমএ গ্রহণ করে। ব্যান্ডের প্রস্থটি বেসলাইনের মতো একই সময়ের সর্বোচ্চ এবং সর্বনিম্ন মূল্যের প্রশস্ততার একটি কনফিগারযোগ্য গুণক (যেমন 1.3 এবং 1.1) ।

  3. যখন দীর্ঘমেয়াদী প্রবণতা বাড়ছে, তখন নিম্ন ব্যাণ্ড ব্রেকআউট দীর্ঘ প্রবেশের সংকেত দেয়; যখন দীর্ঘমেয়াদী প্রবণতা হ্রাস পাচ্ছে, তখন উপরের ব্যান্ড ব্রেকআউট সংকেত দেয় সংক্ষিপ্ত প্রবেশ।

  4. মিথ্যা ব্রেকআউট ফিল্টার করার জন্য, ব্রেকআউটের আগে শেষ মোমবাতিটির পরিবর্তনের হারটি একটি কনফিগারযোগ্য প্রান্তিকের নিচে (উদাহরণস্বরূপ 3%) এবং ব্যান্ড প্রস্থটি একটি কনফিগারযোগ্য স্তর (উদাহরণস্বরূপ বন্ধ মূল্যের 2.2%) এর চেয়ে বড় কিনা তা পরীক্ষা করা হয়।

  5. পজিশন খোলার পর, কনফিগারযোগ্য স্টপ লস (উদাহরণস্বরূপ -3%) এবং লাভ গ্রহণ (উদাহরণস্বরূপ 10%) লাভকে লক করার জন্য সেট করা হয়।

কৌশলগত শক্তি

  1. ডুয়াল EMA প্রধান প্রবণতা নির্ধারণ করে এবং প্রধান প্রবণতা অস্পষ্ট হলে বিশৃঙ্খল পজিশন খোলা এড়ায়।

  2. অভিযোজিত বোলিংজার ব্যান্ড প্রবণতা বরাবর এন্ট্রি পয়েন্ট সেট। স্বয়ংক্রিয় প্রস্থ সমন্বয় প্রবণতা আরও লক।

  3. পরিবর্তনের হার এবং সর্বনিম্ন প্রস্থের প্রয়োজনীয়তা কার্যকরভাবে মিথ্যা ব্রেকআউটগুলি ফিল্টার করে।

  4. স্টপ লস এবং লাভ নেওয়ার সেটিংস যুক্তিসঙ্গতভাবে ঝুঁকি নিয়ন্ত্রণে রেখে লাভকে লক করে।

কৌশলগত ঝুঁকি

  1. ডুয়াল ইএমএগুলি প্রবণতা বিপরীত পয়েন্টগুলি সঠিকভাবে সনাক্ত করতে ব্যর্থ হয়, প্রবণতা বিপরীত পয়েন্টগুলিতে সুযোগগুলি মিস করে।

  2. ভুল বিবি প্যারামিটার সেটিং ভুল সংকেত সৃষ্টি করতে পারে।

  3. স্থির স্টপ লস এবং লাভ গ্রহণ বাজার ওঠানামা মেনে চলতে পারে না।

অপ্টিমাইজেশান নির্দেশাবলী

  1. প্রধান এবং গৌণ প্রবণতা বিপরীততা নির্ধারণের জন্য অন্যান্য সূচক অন্তর্ভুক্ত করুন।

  2. বিবি পরামিতিগুলির গতিশীল সমন্বয় গ্রহণ করুন।

  3. নির্দিষ্ট মানদণ্ডের উপর ভিত্তি করে স্টপ লস এবং লাভের জন্য শর্তাধীন অর্ডার সেট করুন।

সিদ্ধান্ত

এই কৌশলটি দ্বৈত ইএমএ ব্যবহার করে প্রধান প্রবণতা বিচার করে এবং বোলিংজার ব্যান্ডগুলির সাথে সুযোগগুলি সনাক্ত করে ট্রেন্ড ট্রেডিং বাস্তবায়ন করে। এর শক্তি প্রবণতা লাভগুলি লক করার জন্য যুক্তিসঙ্গতভাবে এন্ট্রি, স্টপ লস এবং লাভের শর্তগুলি সেট করার মধ্যে রয়েছে। প্রবণতা টার্নিং পয়েন্টগুলি এবং অনুপযুক্ত বিবি পরামিতি সেটিংগুলি ধরতে ব্যর্থ হওয়ার মতো কিছু ঝুঁকিও রয়েছে। এই দিকগুলিতে আরও অপ্টিমাইজেশন কৌশলটিকে প্রবণতা লাভগুলি আরও ভালভাবে দখল করতে সক্ষম করবে।


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//////////////////////////////////////////////////////////////////////
// Component Code Start
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2039, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop

strategy("Custom Band Strategy", overlay=true)
source = close //종가 기준

//추세 조건 설정
emaLong = ema(source, input(200, minval=0))
emaShort = ema(source, input(30, minval=0))
trend = if emaShort>=emaLong
    1
else
    -1
    
plot(emaLong, color=red, transp=0)
plot(emaShort, color=blue, transp=0)


//BB 계산(default 14/3.2)
length = input(8, minval=1)

basis = sma(source, length)
plot(basis, color=green, transp=0)
max=highest(abs(source-basis), length)

factor1 = input(1.3, minval=0.5)
factor2 = input(1.1, minval=0.5)

upper = if trend==1
    basis + max*factor1
else
    basis + max*factor2
lower = if trend==-1
    basis - max*factor1
else
    basis - max*factor2

plot1 = plot(upper)
plot2 = plot(lower)
fill(plot1, plot2, transp=80, color=green)

//밴드 이탈 후 재진입 조건 설정
cross_over = (low<=lower and close>=lower) or crossover(close,lower)
cross_under = (high>=upper and close<=upper) or crossunder(close,upper)

//변동율 계산
maxCandle=highest(abs(open-close), length)
    
roc = abs(open-close)/open*100
changerate = input(3, minval=0.0)

//수익률 계산
value = abs(strategy.position_size)*strategy.position_avg_price
roe = strategy.openprofit/value * 100
expRoeL = (upper-lower)/lower*100
expRoeS = (upper-lower)/upper*100
exp = input(2.2, minval=0.0)

target = input(10, minval=0.0)
stop = input(-3, minval=-10.0)

strategy.close_all(when=roc>=changerate and testPeriod())
strategy.close_all(when=roe>=target and testPeriod())
strategy.close_all(when=roe<=stop and testPeriod())

plotchar(crossover(close,lower) and crossunder(close,upper),color=blue, transp=0, text="cross")
plotchar(roc>=changerate,color=red, transp=0, text="roc")
plotchar(roe>=target,color=blue, transp=0, text="target")
plotchar(roe<=stop,color=green, transp=0, text="stop")

minroe = input(2, minval=0.0)

strategy.close_all(when=cross_under and roe>minroe and testPeriod())
strategy.entry("BBandLE", strategy.long, stop=source, oca_name="BollingerBands",  comment="BBandLE", when=(cross_over) and trend==1 and roc<changerate and expRoeL>exp and source>emaLong and strategy.position_size==0 and testPeriod()) //trend==1 and 
//else
strategy.close_all(when=cross_over and roe>minroe and testPeriod())
strategy.entry("BBandSE", strategy.short, stop=source, oca_name="BollingerBands",  comment="BBandSE", when=(cross_under) and trend==-1 and roc<changerate and expRoeS>exp and source<emaLong and strategy.position_size==0 and testPeriod()) //trend==-1 and 

আরো