
এই কৌশলটি দুটি সূচকীয় চলমান গড় ((EMA) এর ক্রস সিগন্যালের উপর ভিত্তি করে লেনদেন করে। দীর্ঘমেয়াদী ইএমএ অতিক্রম করার সময় স্বল্পমেয়াদী ইএমএ-তে পজিশন খোলার সময়, পজিশন খোলার সময় এবং দীর্ঘমেয়াদী ইএমএ অতিক্রম করার সময়, পজিশন খোলার সময়। কৌশলটি ঝুঁকি নিয়ন্ত্রণ এবং কৌশলটির কার্যকারিতা অনুকূলকরণের জন্য স্টপ লস প্রক্রিয়া এবং ট্রেডিং টাইম ফিল্টারও প্রবর্তন করে।
এই কৌশলটি দুটি ভিন্ন পিরিয়ডের ইএমএকে ট্রেন্ডের ভিত্তিতে ব্যবহার করে। ইএমএ সহজ চলমান গড়ের তুলনায় (এসএমএ), দামের পরিবর্তনের জন্য আরও দ্রুত প্রতিক্রিয়া জানাতে পারে এবং ওজন বিতরণ আরও যুক্তিসঙ্গত। যখন স্বল্পমেয়াদী ইএমএ-তে প্রবেশ করা হয়, তখন দামগুলি একটি উচ্চতর প্রবণতা তৈরি করতে পারে, যার ফলে আরও বেশি পজিশন খোলা যায়। বিপরীতে, যখন স্বল্পমেয়াদী ইএমএ-তে প্রবেশ করা হয়, তখন একটি উচ্চতর প্রবণতা শেষ হতে পারে, যার ফলে পজিশনটি সমতল হয়।
সমান্তরাল ক্রস সিগন্যাল ছাড়াও, এই কৌশলটি একটি স্টপ লস প্রক্রিয়া প্রবর্তন করে। একদিকে, একটি নির্দিষ্ট শতাংশ স্টপ সেট করা হয়, অর্থাৎ যখন দামের তুলনামূলকভাবে পজিশন খোলার দাম নির্দিষ্ট শতাংশের বেশি কমে যায়, তখন পজিশনটি নিয়ন্ত্রণের জন্য বাধ্যতামূলক করা হয়; অন্যদিকে, যখন দামের সমাপ্তির দাম পূর্ববর্তী কে-লাইনের সমাপ্তির দামের চেয়ে কম হয় তখন পজিশনটি বেছে নেওয়া যেতে পারে। এই দুটি স্টপ লস পদ্ধতি কার্যকরভাবে কৌশলটি প্রত্যাহার নিয়ন্ত্রণ করতে পারে।
এছাড়াও, এই নীতিটি লেনদেনের সময় ফিল্টার প্রবর্তন করে। ব্যবহারকারীরা লেনদেনের শুরু এবং শেষের সময় নির্ধারণ করতে পারবেন, যাতে নির্দিষ্ট সময় (যেমন ছুটির দিন, বন্ধের সময় ইত্যাদি) লেনদেন করা যায় না।
সহজেই ব্যবহারযোগ্যঃ এই কৌশলটি সহজেই বোঝা যায় এবং বাস্তবায়িত হয়, কারণ এটির লজিক পরিষ্কার এবং ট্রেডিং সিগন্যাল হিসাবে মাত্র দুটি ইএমএ ব্যবহার করা হয়।
ট্রেন্ড ট্র্যাকিংঃ EMA দ্রুত মূল্য পরিবর্তনের প্রতিক্রিয়া জানাতে সক্ষম, যা কৌশলটিকে ট্রেন্ড গঠনের এবং সমাপ্তির জন্য সময়মতো ধরতে সক্ষম করে, যার ফলে ট্রেন্ড ট্র্যাকিংয়ের উপার্জন হয়।
ঝুঁকি নিয়ন্ত্রণঃ একক লেনদেনের ক্ষতি এবং প্রত্যাহার কার্যকরভাবে নিয়ন্ত্রণ করতে স্থির শতাংশের ক্ষতি এবং পূর্ববর্তী কে লাইনের সমাপ্তির মূল্যের উপর ভিত্তি করে একটি স্টপ লস চালু করা।
প্যারামিটার নমনীয়তাঃ ব্যবহারকারীরা তাদের প্রয়োজন অনুযায়ী EMA চক্র, স্টপডোজ শতাংশ, পূর্ববর্তী K-লাইন ক্লোজড প্রাইস স্টপডোজ, ট্রেডিং সময়কাল ইত্যাদি প্যারামিটারগুলি সামঞ্জস্য করতে পারেন, যার ফলে কৌশলটির কার্যকারিতা অনুকূলিতকরণ করা যায়।
প্যারামিটার অপ্টিমাইজেশন ঝুঁকিঃ এই কৌশলটির কার্যকারিতা ইএমএ চক্র, থামার শতাংশ ইত্যাদি প্যারামিটারগুলির নির্বাচনের উপর নির্ভর করে, অনুপযুক্ত প্যারামিটারগুলি কৌশলটির দুর্বল পারফরম্যান্সের কারণ হতে পারে। অতএব, সর্বোত্তম প্যারামিটারগুলি বেছে নেওয়ার জন্য ঐতিহাসিক ডেটাতে প্যারামিটার অপ্টিমাইজেশন এবং পুনরাবৃত্তি করা প্রয়োজন।
বাজার ঝুঁকিঃ এই কৌশলটি মূলত প্রবণতাযুক্ত বাজারে প্রয়োগ করা হয়, যখন বাজারের ঝড় বা প্রবণতা বিপরীত হয়, তখন ঘন ঘন লেনদেনের ফলে বড় প্রত্যাহার হতে পারে। সুতরাং, বাজারের অবস্থার উপর ভিত্তি করে কৌশলটির প্যারামিটারগুলি সামঞ্জস্য করতে হবে বা এই কৌশলটি ব্যবহার বন্ধ করতে হবে।
ব্যয় ঝুঁকিঃ এই কৌশলটি আরও বেশি সংখ্যক লেনদেনের ফলে লেনদেনের ব্যয় বাড়িয়ে তুলতে পারে। অতএব, উপযুক্ত লেনদেনের মান এবং লেনদেনের পরিমাণ চয়ন করতে হবে এবং লেনদেনের জন্য ব্যয় নিয়ন্ত্রণ করতে হবে।
ইএমএ ক্রস সিগন্যালের উপর ভিত্তি করে, আরএসআই, এমএসিডি ইত্যাদির মতো অন্যান্য প্রযুক্তিগত সূচকগুলি প্রবর্তন করা, মাল্টি-ফ্যাক্টর ট্রেডিং সিগন্যাল তৈরি করা, প্রবণতা নির্ধারণের নির্ভুলতা উন্নত করা।
ডায়নামিক স্টপ লসঃ বাজার ওঠানামা, এটিআর ইত্যাদির উপর ভিত্তি করে স্টপ লস পজিশনকে ডায়নামিকভাবে সামঞ্জস্য করুন, ঝুঁকি নিয়ন্ত্রণ করার সময়, যতটা সম্ভব স্টপ লস দ্বারা আয়ের ক্ষতি হ্রাস করুন।
পজিশন ম্যানেজমেন্টঃ বাজারের প্রবণতার শক্তি, মূল্য এবং গড়ের বিচ্যুতি ইত্যাদির উপর ভিত্তি করে পজিশন আকারের গতিশীল সমন্বয় করুন, প্রবণতা শক্তিশালী হলে পজিশন বাড়ান, প্রবণতা দুর্বল বা অস্পষ্ট হলে পজিশন হ্রাস করুন।
মেশিন লার্নিং অপ্টিমাইজেশনঃ মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে কৌশলগত প্যারামিটারগুলিকে অপ্টিমাইজ করা হয়, স্বয়ংক্রিয়ভাবে সর্বোত্তম প্যারামিটার সমন্বয় নির্বাচন করে, কৌশলগত আয় বৃদ্ধি করে এবং ওভারফিট হওয়ার ঝুঁকি হ্রাস করে।
এই ডাবল-ইউরোফাইনাল ক্রস-কোয়ান্টিফিকেশন কৌশলটি দুটি ইএমএর ক্রস-সিগন্যালের মাধ্যমে প্রবণতা নির্ধারণ করে এবং স্টপ-লস এবং ট্রেডিং-টাইম ফিল্টার প্রবর্তন করে, যা প্রবণতা ট্র্যাকিং ক্ষমতা এবং ঝুঁকি নিয়ন্ত্রণের মধ্যে একটি ভাল ভারসাম্য বজায় রাখে। যদিও কৌশলটির লজিকটি সহজ, তবে যুক্তিসঙ্গত প্যারামিটার অপ্টিমাইজেশন এবং ঝুঁকি নিয়ন্ত্রণের পরে, প্রবণতাযুক্ত বাজারে স্থিতিশীল উপার্জন পাওয়া যায়। ভবিষ্যতে আরও প্রযুক্তিগত সূচক, গতিশীল স্টপ-লস পজিশন, পরিচালনা এবং মেশিন লার্নিং অপ্টিমাইজেশনের প্রবর্তনের মাধ্যমে এই কৌশলটি আরও উন্নত করা যেতে পারে।
/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © ZenAndTheArtOfTrading / www.PineScriptMastery.com
// @version=5
strategy("EMA strategy",
overlay=true,
initial_capital=50000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100, // 100% of balance invested on each trade
commission_type=strategy.commission.cash_per_contract,
commission_value=0.005) // Interactive Brokers rate
// Get user input
i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA")
i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA")
i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline")
i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2")
i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")
// Get indicator values
ma1 = ta.ema(close, i_ma1)
ma2 = ta.ema(close, i_ma2)
// Check filter(s)
f_dateFilter = true
// Check buy/sell conditions
var float buyPrice = 0
buyCondition = close > ma1 and strategy.position_size == 0 and f_dateFilter
sellCondition = close < ma2 and strategy.position_size > 0 //and (not i_lowerClose or close < low[1])
stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na
stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na
stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent
// Enter positions
if buyCondition
strategy.entry(id="Long", direction=strategy.long)
if buyCondition[1]
buyPrice := open
// Exit positions
if sellCondition or stopCondition
strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
buyPrice := na
// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)
plot(ma1, color=color.blue)
plot(ma2, color=color.orange)