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


সৃষ্টির তারিখ: 2024-01-30 16:52:48 অবশেষে সংশোধন করুন: 2024-01-30 16:52:48
অনুলিপি: 3 ক্লিকের সংখ্যা: 777
1
ফোকাস
1617
অনুসারী

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

ওভারভিউ

এই কৌশলটি একটি ট্রেন্ড ট্র্যাকিং কৌশল যা ট্রেডিং সিগন্যাল তৈরি করতে ট্রিপল ইন্ডেক্সাল মুভিং এভারেজ ইন্ডিকেটর এবং র্যান্ডম ইন্ডেক্সাল স্লাইড মুভিং এভারেজ ইন্ডিকেটরকে একত্রিত করে। যখন দ্রুত চলমান গড়ের উপর দিয়ে মধ্যম চলমান গড় অতিক্রম করে, তখন মধ্যম চলমান গড়ের উপর দিয়ে ধীর গতিতে চলমান গড় অতিক্রম করে; যখন দ্রুত চলমান গড়ের নীচে দিয়ে মধ্যম চলমান গড় অতিক্রম করে, তখন মধ্যম চলমান গড়ের নীচে ধীর গতিতে চলমান গড় অতিক্রম করে।

মূলনীতি

  1. ৮,১৪ এবং ৫০ দিনের ট্রিপল ইন্ডেক্সাল মুভিং এভারেজ ব্যবহার করুন। ১৪ দিনের ইন্ডেক্সাল মুভিং এভারেজকে ৮ দিনের ইন্ডেক্সাল মুভিং এভারেজের উপর দিয়ে অতিক্রম করার সময়, ১৪ দিনের ইন্ডেক্সাল মুভিং এভারেজকে ৫০ দিনের ইন্ডেক্সাল মুভিং এভারেজের উপর দিয়ে অতিক্রম করার সময় একটি পল্টি সিগন্যাল তৈরি হয়; বিপরীতভাবে, একটি ওভারসিগন্যাল।

  2. স্টোক্যাস্টিক আরএসআই (Stochastic RSI) ব্যবহার করে একটি সহায়ক বিচারক সূচক হিসাবে। বিশেষতঃ প্রথমে 14 দিনের আরএসআই গণনা করুন, তারপরে আরএসআই সূচকের উপর ভিত্তি করে স্টোক্যাস্টিক সূচকটি গণনা করুন, এবং শেষ পর্যন্ত স্টোক্যাস্টিক সূচকটি গণনা করুন 3 দিনের সরল চলমান গড়ের জন্য কে লাইন এবং 3 দিনের সরল চলমান গড়ের জন্য ডি লাইন। যখন কে লাইনটি ডি লাইনটি অতিক্রম করে, তখন একটি সহায়ক সংকেত হিসাবে আরও দেখুন।

  3. ট্রেডিং সিগন্যাল তৈরি করার সময়, যদি দাম 8 দিনের সূচকীয় চলমান গড়ের চেয়ে বেশি হয় তবে প্রবেশ করুন; যদি দাম 8 দিনের সূচকীয় চলমান গড়ের চেয়ে কম হয় তবে প্রবেশ করুন।

  4. স্টপ লস হল প্রবেশ মূল্যের নিচে/উপরে 1xATR দূরত্ব। স্টপ বক্স হল প্রবেশ মূল্যের উপরে/নিচে 4xATR দূরত্ব।

সুবিধা

  1. একটি চলমান গড় একটি মৌলিক সূচক হিসাবে, কার্যকরভাবে বাজারের প্রবণতা অনুসরণ করতে পারে। ট্রিপল সূচক চলমান গড় একাধিক সময়কাল ব্যবহার করে, একই সাথে স্বল্প ও মাঝারি এবং দীর্ঘমেয়াদী প্রবণতার সংবেদনশীলতা নিশ্চিত করতে পারে।

  2. স্টোক্যাস্টিক আরএসআই যোগ করা হয়েছে, যা ভুয়া সংকেতগুলিকে ফিল্টার করতে এবং প্রবেশের সঠিকতা বাড়াতে সহায়তা করে।

  3. এটিআর-এর উপর ভিত্তি করে স্টপ লস স্টপ অবস্থান সেট করুন, যাতে আপনি বাজারের অস্থিরতার মাত্রা গতিশীলভাবে ট্র্যাক করতে পারেন এবং স্টপ লস স্টপটি খুব বড় বা খুব ছোট হওয়া এড়াতে পারেন।

  4. এই কৌশলটির প্যারামিটারগুলি যুক্তিসঙ্গতভাবে সেট করা হয়েছে এবং বড় প্রবণতাগুলির অধীনে দুর্দান্ত পারফরম্যান্স দেয়। সামান্য প্রত্যাহার, স্থিতিশীল উপার্জন, দীর্ঘ লাইন অপারেশনের জন্য উপযুক্ত।

ঝুঁকি

  1. মাল্টি-ইনডিকেটর প্যারিজ কৌশলগুলি বিপরীত হওয়ার ঝুঁকি বাড়ায়। যখন মুভিং এভারেজ এবং স্টোক্যাস্টিক আরএসআই বিপরীত সংকেত দেয়, তখন ট্রেডিং সিগন্যাল ত্রুটি হতে পারে। এই ক্ষেত্রে মূল্যের প্রবণতা নিজেই মনোযোগ দিতে হবে।

  2. স্টপ ও স্টপ-এর সেটিংগুলো অনেক বেশি সংরক্ষণশীল, এবং ট্রেন্ডের সুযোগ মিস করার জন্য বাজারের তীব্র অস্থিরতার সময় এটিকে ভেঙে ফেলা হতে পারে। এই সময়ে এটিআর প্যারামিটারগুলি যথাযথভাবে সামঞ্জস্য করা বা স্টপ-এর গুণিতক বাড়ানো যেতে পারে।

  3. ট্রিপল মুভিং এভারেজ ব্যবহারের কারণে, যখন দ্রুত এবং মাঝারি গতির লাইনগুলি বিপরীত হয়, তখন কিছুটা বিলম্ব হয়। এই সময়টি প্রবেশের সিদ্ধান্ত নেওয়ার জন্য মূল্যটি নিজেই বিপরীত হয় কিনা তা লক্ষ্য করা দরকার।

  4. এই কৌশলটি মূলত প্রবণতার জন্য উপযুক্ত, যা সামঞ্জস্যের পরিস্থিতিতে ভাল কাজ করে না। এই ক্ষেত্রে চলমান গড়ের চক্রের প্যারামিটারগুলি অনুকূলিতকরণ বা অন্যান্য বিচারক সূচক ব্যবহার করা বিবেচনা করা যেতে পারে।

অপ্টিমাইজেশান

  1. প্রবেশের সময়কে আরও অনুকূলিত করতে MACD এর মতো অন্যান্য সূচক যুক্ত করার কথা বিবেচনা করা যেতে পারে। বিভিন্ন প্যারামিটারের চলমান গড় সমন্বয়ও পরীক্ষা করা যেতে পারে।

  2. এটিআর-এর প্যারামিটারগুলিকে অপ্টিমাইজ করা যেতে পারে। উদাহরণস্বরূপ, স্টপ লসটি 1 এটিআর থেকে 1.5 এটিআর এবং স্টপ স্টপটি 4 এটিআর থেকে 3 এটিআর-তে সামঞ্জস্য করা যায়, যাতে আরও ভাল ফল পাওয়া যায়।

  3. স্টোক্যাস্টিক আরএসআই ইন্ডিকেটর বাদ দিয়ে কেবলমাত্র চলমান গড় ব্যবহার করে পরীক্ষা করা যেতে পারে, যাতে আরও বেশি গোলমাল ফিল্টার করা যায় এবং আরও স্থিতিশীল লাভ পাওয়া যায়।

  4. প্রবণতা নির্ধারণের জন্য আরও কিছু শর্ত যুক্ত করার কথা বিবেচনা করা যেতে পারে, যেমন ট্রেডিং ভলিউম ইন্ডিকেটর বৃদ্ধি করা, যা বড় আকারের প্রবণতা পরিচালনা করতে পারে।

সারসংক্ষেপ

এই কৌশলটি ট্রেন্ডের দিকনির্দেশের জন্য ট্রিপল ইনডেক্স মুভিং এভারেজ এবং স্টোক্যাস্টিক আরএসআই নির্দেশক ব্যবহার করে। প্রবেশের সংকেতগুলি কঠোর এবং কার্যকরভাবে অর্থহীন ব্যবসায়কে হ্রাস করতে পারে। স্টপ-ড্রপ সেটিংটি গতিশীলভাবে এটিআর অনুসরণ করে, কৌশল প্যারামিটারগুলিকে স্বতঃস্ফূর্ত করে তোলে। ব্যাক-টেস্টিংয়ের ফলাফল অনুসারে, কৌশলটি ট্রেন্ডিং পরিস্থিতিতে দুর্দান্ত পারফরম্যান্স করেছে, সামান্য প্রত্যাহার করেছে এবং আয়টি বেশ স্থিতিশীল। আরও অপ্টিমাইজেশনের মাধ্যমে আরও ভাল ফলাফল পাওয়ার সম্ভাবনা রয়েছে।

কৌশল সোর্স কোড
/*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"}]
*/

//              3ESRA
//              v0.2a

// Coded by Vaida Bogdan

// 3ESRA consists of a 3 EMA cross + a close above (for longs) the quickest EMA
// or below (for shorts). Note that I've deactivated the RSI Cross Over/Under
// (you can modify the code and activate it). The strategy also uses a stop loss
// that's at 1 ATR distance from the entry price and a take profit that's at
// 4 times the ATR distance from the entry price.

// Feedback:
// Tested BTCUSDT Daily
// 1. Stoch-RSI makes you miss opportunities.
// 2. Changing RR to 4:1 times ATR works better.

//@version=4
strategy(title="3 EMA + Stochastic RSI + ATR", shorttitle="3ESRA", overlay=true, pyramiding=1,
     process_orders_on_close=true, calc_on_every_tick=true,
     initial_capital=1000, currency = currency.USD, default_qty_value=10, 
     default_qty_type=strategy.percent_of_equity,
     commission_type=strategy.commission.percent, commission_value=0.1, slippage=2)

startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31, group="Backtesting range")
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12, group="Backtesting range")
startYear = input(title="Start Year", type=input.integer,
     defval=1900, minval=1800, maxval=2100, group="Backtesting range")
endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31, group="Backtesting range")
endMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12, group="Backtesting range")
endYear = input(title="End Year", type=input.integer,
     defval=2040, minval=1800, maxval=2100, group="Backtesting range")

// Date range filtering
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 23, 59))
     
fast = input(8, minval=8, title="Fast EMA", group="EMAs")
medium = input(14, minval=8, title="Medium EMA", group="EMAs")
slow = input(50, minval=8, title="Slow EMA", group="EMAs")
src = input(close, title="Source")

smoothK = input(3, "K", minval=1, group="Stoch-RSI", inline="K&D")
smoothD = input(3, "D", minval=1, group="Stoch-RSI", inline="K&D")
lengthRSI = input(14, "RSI Length", minval=1, group="Stoch-RSI", inline="length")
lengthStoch = input(14, "Stochastic Length", minval=1, group="Stoch-RSI", inline="length")
rsiSrc = input(close, title="RSI Source", group="Stoch-RSI")

length = input(title="Length", defval=14, minval=1, group="ATR")
smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR")

// EMAs
fastema = ema(src, fast)
mediumema = ema(src, medium)
slowema = ema(src, slow)

// S-RSI
rsi1 = rsi(rsiSrc, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
sRsiCrossOver = k[1] < d[1] and k > d
sRsiCrossUnder = k[1] > d[1] and k < d

// ATR
ma_function(source, length) =>
	if smoothing == "RMA"
		rma(source, length)
	else
		if smoothing == "SMA"
			sma(source, length)
		else
			if smoothing == "EMA"
				ema(source, length)
			else
				wma(source, length)
atr = ma_function(tr(true), length)

// Trading Logic
longCond1 = (fastema > mediumema) and (mediumema > slowema)
longCond2 = true
// longCond2 = sRsiCrossOver
longCond3 = close > fastema
longCond4 = strategy.position_size <= 0
longCond = longCond1 and longCond2 and longCond3 and longCond4 and inDateRange

shortCond1 = (fastema < mediumema) and (mediumema < slowema)
shortCond2 = true 
// shortCond2 = sRsiCrossUnder
shortCond3 = close < fastema
shortCond4 = strategy.position_size >= 0
shortCond = shortCond1 and shortCond2 and shortCond3 and shortCond4 and inDateRange

var takeProfit = float(na), var stopLoss = float(na)
if longCond and strategy.position_size <= 0
    takeProfit := close + 4*atr
    stopLoss := close - 1*atr
    // takeProfit := close + 2*atr
    // stopLoss := close - 3*atr

else if shortCond and strategy.position_size >= 0
    takeProfit := close - 4*atr
    stopLoss := close + 1*atr
    // takeProfit := close - 2*atr
    // stopLoss := close + 3*atr
    
// Strategy calls
strategy.entry("3ESRA", strategy.long, comment="Long", when=longCond and strategy.position_size <= 0)
strategy.entry("3ESRA", strategy.short, comment="Short", when=shortCond and strategy.position_size >= 0)
strategy.exit(id="TP-SL", from_entry="3ESRA", limit=takeProfit, stop=stopLoss)
if (not inDateRange)
    strategy.close_all()
    
// Plot EMAs
plot(fastema, color=color.purple, linewidth=2, title="Fast EMA")
plot(mediumema, color=color.teal, linewidth=2, title="Medium EMA")
plot(slowema, color=color.yellow, linewidth=2, title="Slow EMA")
// Plot S-RSI
// plotshape((strategy.position_size > 0) ? na : sRsiCrossOver, title="StochRSI Cross Over", style=shape.triangleup, location=location.belowbar, color=color.teal, text="SRSI", size=size.small)
// Plot trade
bgcolor(strategy.position_size > 0 ? color.new(color.green, 75) : strategy.position_size < 0 ? color.new(color.red,75) : color(na))
// Plot Strategy
plot((strategy.position_size != 0) ? takeProfit : na, style=plot.style_linebr, color=color.green, title="TP")
plot((strategy.position_size != 0) ? stopLoss : na, style=plot.style_linebr, color=color.red, title="SL")