এই কৌশলটি একটি সাধারণ ট্রিপল এক্সপোনেন্সিয়াল মুভিং এভারেজ (ইএমএ) ট্রেডিং সিস্টেম বাস্তবায়ন করে। এটি দ্রুত 5-দিনের ইএমএ, মাঝারি 20-দিনের ইএমএ এবং ধীর 50-দিনের ইএমএ তুলনা করে ট্রেডিং সংকেত তৈরি করে। এটি ভুয়া সংকেতগুলি ফিল্টার করার জন্য পূর্ববর্তী বারগুলির তুলনায় বর্তমান বারের বন্ধ মূল্যও ব্যবহার করে। উপরন্তু, লাভ লক করতে একটি ট্রেলিং স্টপ লস ব্যবহার করা হয়।
যখন ৫ দিনের ইএমএ ২০ দিনের ইএমএ এর উপরে অতিক্রম করে এবং তিনটি ইএমএও উত্থানমুখীভাবে সারিবদ্ধ হয় (৫ দিনের ইএমএ > ২০ দিনের ইএমএ > ৫০ দিনের ইএমএ), এবং বর্তমান বার
প্রবেশের পর, যখন মূল্য নির্দিষ্ট টিক দ্বারা চালিত হয়, তখন আরও বড় মুনাফা লক করার জন্য দামের ওঠানামা উপর ভিত্তি করে স্টপ লসকে সামঞ্জস্য করতে একটি ট্রেলিং স্টপ লস শুরু করা হবে।
সিগন্যাল তৈরির জন্য ট্রিপল ইএমএ ব্যবহার করে কার্যকরভাবে বাজারের গোলমাল ফিল্টার করতে এবং প্রবণতা সনাক্ত করতে পারে। দ্রুত ইএমএ সর্বশেষ পরিবর্তনগুলি প্রতিফলিত করে, মাঝারি ইএমএ প্রবণতার দিক নির্ধারণ করে এবং ধীর ইএমএ দোলগুলি ফিল্টার করে।
বর্তমান বার
ট্রেলিং স্টপ লস গতিশীলভাবে মুনাফা লকিং সর্বাধিক করতে মূল্য কর্মের উপর ভিত্তি করে স্টপ লস সামঞ্জস্য করে।
এই কৌশলটির নমনীয় প্যারামিটার সেটিংগুলি দৈনিক থেকে মিনিট বার পর্যন্ত বিভিন্ন পণ্য এবং সময়সীমার মধ্যে অপ্টিমাইজেশানকে অনুমতি দেয়।
ইএমএ-র ঘন ঘন ক্রসওভারগুলি বিভিন্ন বাজারে অত্যধিক লেনদেন সৃষ্টি করতে পারে, কমিশন এবং স্লিপিংয়ের ব্যয় বাড়িয়ে তুলতে পারে।
ট্রেইলিং স্টপ লস বিশাল হুইপসাউয়ের সময় প্রবণতা থেকে অকাল বেরিয়ে আসতে পারে।
ইএমএ বিলম্বের ফলে বড় ধরনের পরিবর্তন এবং ক্ষতির কারণ হতে পারে।
ইএমএ সময়কাল, স্টপ টিকের মত প্যারামিটারগুলি বিভিন্ন পণ্য এবং সময়সীমার জন্য অপ্টিমাইজেশান প্রয়োজন।
ট্রেডিং সিগন্যাল ফিল্টার করার জন্য MACD, KD এর মত অন্যান্য সূচক অন্তর্ভুক্ত করুন।
সেরা সমন্বয় খুঁজে পেতে নির্দিষ্ট পণ্য এবং সময়সীমার জন্য পরামিতি পরীক্ষা এবং অপ্টিমাইজ করুন।
মানুষের তত্ত্বাবধান বা মেশিন লার্নিং এর মাধ্যমে গতিশীলভাবে পরামিতিগুলি সামঞ্জস্য করুন।
নির্দিষ্ট বাজারের অবস্থার জন্য ট্রেলিং স্টপ অক্ষম করা এবং পূর্ণ অবস্থান ধরে রাখা বিবেচনা করুন।
সহজ ট্রেলিং স্টপ লসকে আরও উন্নত স্বয়ংক্রিয় মুনাফা গ্রহণের পদ্ধতির সাথে প্রতিস্থাপন করুন।
এই কৌশলটি তিনটি সাধারণ প্রযুক্তিগত বিশ্লেষণ কৌশলকে সংহত করে - ইএমএ ক্রসওভার, মূল্য ব্রেকআউট এবং ট্রেলিং স্টপ লস একটি মোটামুটি বিস্তৃত এবং শক্তিশালী ট্রেডিং সিস্টেমে ট্রেডিং অনুসরণ করে। প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে এটি বিভিন্ন পণ্য এবং সময়সীমার সাথে খাপ খাইয়ে নেওয়া যায় এবং শক্তিশালী ট্রেন্ডিং বাজারে ভাল পারফর্ম করে। তবে এটিতে প্রযুক্তিগত বিশ্লেষণ কৌশলগুলির কিছু সাধারণ দুর্বলতাও রয়েছে যা আরও বেশি বাজার পরিস্থিতি মোকাবেলায় আরও অপ্টিমাইজেশনের প্রয়োজন। সামগ্রিকভাবে, এই কৌশলটি কিছু সাধারণ কৌশল ধারণাগুলি খুব ভালভাবে প্রদর্শন করে পরিমাণগত ট্রেডিংয়ের জন্য একটি সহজ এবং ব্যবহারিক ধারণা সরবরাহ করে।
/*backtest start: 2023-10-01 00:00:00 end: 2023-10-02 12:00:00 period: 1m basePeriod: 1m 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/ // © Matt Dearden - IndoPilot // @version=4 /////////////////////////////////////////////////////// Initial Parameters /////////////////////////////////////////////////////// SystemName = "Triple EMA Strategy" ShortSystemName = "TEMA" InitPosition = 0 InitCapital = 50000 InitCommission = 0.004 //approx value to compensate for Oanda spreads InitPyramidMax = 0 CalcOnorderFills = true strategy(title=SystemName, shorttitle=ShortSystemName, overlay=true, pyramiding=InitPyramidMax, default_qty_type=strategy.cash, default_qty_value=InitPosition, commission_type=strategy.commission.percent, commission_value=InitCommission, initial_capital=InitCapital, max_lines_count=500, max_labels_count=500, process_orders_on_close=false, calc_on_every_tick=false) ///////////////////////////////////////////////////////////// Inputs ///////////////////////////////////////////////////////////// DateFilter = input(false, "═════ Data Filtering ═════") InitYear = input(title="Year", type=input.integer, defval=2021, minval=2000, maxval=2021) InitMonth = input(title="Month (0=ALL)", type=input.integer, defval=0, minval=0, maxval=12) InitStopLoss = input(title="Stop Loss (ticks)", type=input.integer, defval=100, minval=0, maxval=1000) TrailingStopLoss = input(title="Trailing S/L (ticks)", type=input.integer, defval=130, minval=0, maxval=1000) InitBuffer = input(title="Buffer (ticks)", type=input.integer, defval=15, minval=0, maxval=1000) InitEMA1 = input(title="EMA 1", type=input.integer, defval=5, minval=0, maxval=1000) InitEMA2 = input(title="EMA 2", type=input.integer, defval=20, minval=0, maxval=1000) InitEMA3 = input(title="EMA 3", type=input.integer, defval=50, minval=0, maxval=1000) //////////////////////////////////////////////////////////// Variables /////////////////////////////////////////////////////////// var StopLoss = float(0.0) var StartPrice = float(0.0) //setup multipliers and catch JPY difference Multiplier = syminfo.currency == "JPY" ? 10 : 1000 //get the daily exchange rate from yesterday //X_rate = security(AccountCurrency+syminfo.currency, "D", close[1]) OrderQty = 1 Buffer = InitBuffer / (Multiplier * 100) /////////////////////////////////////////////////////// Triple EMA Strategy ////////////////////////////////////////////////////// EMA1 = ema(close, InitEMA1) EMA2= ema(close, InitEMA2) EMA3 = ema(close, InitEMA3) //entry conditions longCondition = crossover(EMA1, EMA2) and close > EMA3 and EMA1 > EMA3 and EMA2 > EMA3 and close > (close[1] + Buffer) shortCondition = crossunder(EMA1, EMA2) and close < EMA3 and EMA1 < EMA3 and EMA2 < EMA3 and close < (close[1] - Buffer) /////////////////////////////////////////////////////// Trailing Stoploss //////////////////////////////////////////////////////// if (strategy.position_size > 0 and (close > (StartPrice + (TrailingStopLoss / (100 * Multiplier))))) StopLoss := max(StopLoss, close - (TrailingStopLoss / (100 * Multiplier))) strategy.exit("Long Stoploss", "Long") if (strategy.position_size < 0 and (close < (StartPrice - (InitStopLoss / (100 * Multiplier))))) StopLoss := min(StopLoss, close + (TrailingStopLoss / (100 * Multiplier))) strategy.exit("Short Stoploss", "Short") ///////////////////////////////////////////////////////// Setup entries ///////////////////////////////////////////////////////// if (longCondition) StartPrice := close StopLoss := StartPrice - (InitStopLoss / (100 * Multiplier)) strategy.entry("Long", strategy.long, qty=OrderQty) strategy.exit("Long Stoploss", "Long") if (shortCondition) StartPrice := close StopLoss := StartPrice + (InitStopLoss / (100 * Multiplier)) strategy.entry("Short", strategy.short, qty=OrderQty) strategy.exit("Short Stoploss", "Short") ///////////////////////////////////////////////////////// Draw the EMAs ///////////////////////////////////////////////////////// plot(EMA1, "EMA1", color=#00FF00) plot(EMA2, "EMA2", color=#FF0000) plot(EMA3, "EMA3", color=#4040FF)