ডাবল ইমপুটাম ব্রুকথ্রু এবং ভোলাটিলিটি ফিল্টারিং অ্যালগরিদমিক ট্রেডিং কৌশল

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

img

সারসংক্ষেপ

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

কৌশল নীতি

এই কৌশলটির প্রধান উপাদানগুলির মধ্যে রয়েছেঃ

  1. দামের ইএমএ এবং ডিইএমএকে দ্বৈত গতির সূচক হিসাবে গণনা করুন। দীর্ঘমেয়াদী ইএমএ দীর্ঘমেয়াদী প্রবণতা প্রতিফলিত করে, যখন ডিইএমএ আরও সংবেদনশীল স্বল্পমেয়াদী গতির সূচক হিসাবে কাজ করে। যখন ডিইএমএ ইএমএর উপরে অতিক্রম করে তখন একটি ক্রয় সংকেত উত্পন্ন হয়।

  2. এটিআর অস্থিরতা সূচক গণনা করুন। বাজারের অস্থিরতা এবং তরলতা পরিস্থিতি নির্ধারণের জন্য এটিআর মান ব্যবহার করুন। মিথ্যা ব্রেকআউট এড়াতে অস্থিরতা খুব বেশি হলে গতির সূচক সংকেতগুলি ফিল্টার করুন।

  3. এটিআর অস্থিরতা একটি প্যারামিটারাইজড চলমান গড় রেখা দ্বারা উচ্চ বা কম হিসাবে বিচার করা হয়। গতির সূচক সংকেতগুলি কেবল তখনই সক্রিয় হয় যখন এটিআর অস্থিরতা চলমান গড় রেখার নীচে থাকে।

  4. পরামিতিগুলি ATR টাইমফ্রেম, ATR দৈর্ঘ্য, ATR চলমান গড় প্রকার এবং দৈর্ঘ্য ইত্যাদি নিয়ন্ত্রণ করে।

  5. লং পজিশনের জন্য স্টপ লস, লভ্যাংশ গ্রহণ এবং ট্রেলিং স্টপ নিয়ম নির্ধারণ করুন।

সুবিধা বিশ্লেষণ

ডুয়াল ইএমএ ফিল্টারটি মৌলিক ইএমএ ক্রস কৌশলগুলির তুলনায় মিথ্যা সংকেত এবং ওভারট্রেডিং উল্লেখযোগ্যভাবে হ্রাস করতে পারে। এটিআর অস্থিরতা সূচক যুক্ত করা কার্যকরভাবে ছোটখাট ওঠানামা থেকে বিভ্রান্তিকর সংকেতগুলি ফিল্টার করে এবং ফাঁদে পড়া এড়ায়।

একক গতির সূচকগুলির তুলনায়, দ্বৈত নকশা বিচার কার্যকারিতা উন্নত করতে পারে। একটি আরও প্রতিক্রিয়াশীল স্বল্পমেয়াদী গতির সূচক হিসাবে, স্থিতিশীল দীর্ঘমেয়াদী ইএমএর সাথে মিলিত ডেমা একটি নির্ভরযোগ্য কম্বো সংকেত গঠন করে।

এটিআর পরামিতিগুলি সামঞ্জস্য করে, বিভিন্ন টিকারের জন্য উপযুক্ত অস্থিরতার থ্রেশহোল্ডগুলি সেট করা যেতে পারে, কৌশল অভিযোজনযোগ্যতা উন্নত করে।

ঝুঁকি বিশ্লেষণ

সবচেয়ে বড় ঝুঁকি হল যে অনুপযুক্ত পরামিতি সেটিং খুব কম ট্রেডিং সংকেত হতে পারে। অত্যধিক দীর্ঘ DEMA এবং EMA দৈর্ঘ্য, বা ATR অস্থিরতা প্রান্তিক খুব উচ্চ সেট, সব বাস্তব কৌশল কর্মক্ষমতা হ্রাস করতে পারে। অপ্টিমাম পরামিতি সংমিশ্রণ খুঁজে পেতে পুনরাবৃত্তি ব্যাকটেস্ট প্রয়োজন।

আরেকটি সম্ভাব্য ঝুঁকি হ'ল চরম বাজারের পরিস্থিতিতে, দামের ওঠানামা ক্ষতির দিকে পরিচালিত করতে পারে। যখন প্রয়োজন হয় তখন কৌশল কার্যকরকরণ বন্ধ করার জন্য বাজারের অস্বাভাবিকতার ম্যানুয়াল পর্যবেক্ষণ প্রয়োজন।

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

  1. সর্বোত্তম সেটিং খুঁজে পেতে বিভিন্ন গতি নির্দেশক প্যারামিটার সমন্বয় পরীক্ষা করুন।

  2. ডুয়াল ইএমএ থেকে এমএসিডি বা অন্যান্য সূচকগুলির পরিবর্তে গতির সূচকগুলি ব্যবহার করার চেষ্টা করুন।

  3. বিভিন্ন অস্থিরতা সূচক কনফিগারেশন পরীক্ষা করুন, যেমন সামগ্রিক ঐতিহাসিক ATR, বাজার অস্থিরতা সূচক ইত্যাদি।

  4. ভলিউম ফিল্টারিং যোগ করুন যাতে ভুয়া মূল্য ব্রেকআউট থেকে ঝুঁকি এড়ানো যায়।

  5. ঝুঁকি-প্রতিদানের অনুপাত উন্নত করার জন্য স্টপ লস এবং লাভের প্রক্রিয়াগুলি অনুকূল করুন।

সিদ্ধান্ত

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


/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 00:00:00
period: 1h
basePeriod: 15m
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/
// © Qorbanjf

//@version=4
strategy("ORIGIN DEMA/EMA & VOL LONG ONLY", shorttitle="ORIGIN DEMA/EMA & VOL LONG", overlay=true)

// DEMA
length = input(10, minval=1, title="DEMA LENGTH")
src = input(close, title="Source")
e1 = ema(src, length)
e2 = ema(e1, length)
dema1 = 2 * e1 - e2
plot(dema1, "DEMA", color=color.yellow)

//EMA
len = input(25, minval=1, title="EMA Length")
srb = input(close, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
ema1 = ema(srb, len)
plot(ema1, title="EMA", color=color.blue, offset=offset)


// Inputs
atrTimeFrame = input("D", title="ATR Timeframe", type=input.resolution)
atrLookback = input(defval=14,title="ATR Lookback Period",type=input.integer)
useMA = input(title = "Show Moving Average?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "Moving Average Type")
maLength = input(defval = 20, title = "Moving Average Period", minval = 1)
//longLossPerc = input(title="Long Stop Loss (%)",
    // type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
longTrailPerc = input(title="Trail stop loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=50) * 0.01
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=3000) / 100

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2017, title = "From Year", minval = 2000)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)


// ATR Logic // atrValue = atr(atrLookback) // atrp = (atrValue/close)*100 // plot(atrp, color=color.white, linewidth=2, transp = 30)

atrValue = security(syminfo.tickerid, atrTimeFrame, atr(atrLookback))
atrp = (atrValue/close)*100

// Moving Average Logic
ma(maType, src, length) =>
    maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = security(syminfo.tickerid, atrTimeFrame, ma(maType, atrp, maLength))

// variables for enter position
enterLong = crossover(dema1, ema1) and atrp < maFilter

// variables for exit position
sale = crossunder(dema1, ema1)

// stop loss
//longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)

// trail stop
// Determine trail stop loss prices
longStopTrail = 0.0

longStopTrail := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopTrail[1])
else
    0
//Take profit Percentage
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)

//Enter trades when conditions are met
strategy.entry(id="long",
 long=strategy.long,
 when=enterLong,
 comment="long")

//
strategy.close("long", when = sale, comment = "Sell")
//place exit orders (only executed after trades are active)

strategy.exit(id="sell",
 limit = longExitPrice,
 stop = longStopTrail,
 comment = "SL/TP")



আরো