এমএসিডি ক্লোজিং টর্টল হাইব্রিড স্ট্র্যাটেজি

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

img

সারসংক্ষেপ

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

কৌশলগত নীতি

কৌশলটি মূলত নিম্নলিখিত নীতিগুলির উপর ভিত্তি করেঃ

  1. ম্যাকডি দ্রুত রেখা এবং ধীর রেখা সোনার ক্রস এবং মৃত ক্রস ব্যবহার করুন ষাঁড় এবং ভালুকের বাজার এবং নির্দিষ্ট প্রবেশের পয়েন্ট নির্ধারণ করতে।

  2. প্রবণতা এবং প্রস্থান পয়েন্টের শেষ নির্ধারণের জন্য মধ্যম রেখার সাথে বন্ধ মূল্যের সম্পর্ক ব্যবহার করুন।

  3. মুনাফা বৃদ্ধির জন্য বর্তমান এমএসিডি ট্রেন্ডের শেষে একই দিক থেকে বাজারে পুনরায় প্রবেশের জন্য পুনরায় প্রবেশের প্রক্রিয়া স্থাপন করুন।

  4. একটি প্রবণতার মধ্যে আংশিক মূল্য সংশোধনের সময় পজিশন যোগ করার জন্য সংশোধন এন্ট্রি প্রক্রিয়া সেট করুন।

  5. ট্রেন্ড শেষ হলে দ্রুত বেরিয়ে আসার সময় ট্রেন্ডের মধ্যে সর্বাধিক লাভ অর্জনের জন্য উপরে বর্ণিত পজিশনের উপর ভিত্তি করে গতিশীলভাবে সামঞ্জস্য করুন।

বিশেষত, কৌশলটি প্রথমে পরীক্ষা করে যে ম্যাকডি দ্রুত এবং ধীর রেখাগুলির মধ্যে দীর্ঘ বা সংক্ষিপ্ত যেতে একটি সোনার ক্রস বা মৃত ক্রস ঘটে কিনা। এটি তারপরে ট্রেন্ডের শেষ এবং বন্ধ অবস্থানগুলি নির্ধারণের জন্য বন্ধের দামটি মাঝারি রেখাকে স্পর্শ করে কিনা তা পরীক্ষা করে।

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

এই সেটিংসের মাধ্যমে, কৌশলটি গতিশীলভাবে অবস্থানগুলি সামঞ্জস্য করতে পারে, প্রবেশাধিকার এবং প্রস্থান ফ্রিকোয়েন্সি বাড়িয়ে তুলতে পারে এবং প্রবণতার মধ্যে ঝুঁকিগুলি নিয়ন্ত্রণ করার সময় রিটার্ন সর্বাধিক করতে পারে।

সুবিধা

এই মাল্টি-ইন্ডিক্টর কৌশলটির প্রধান সুবিধা হলঃ

  1. এমএসিডি প্রবণতা এবং প্রবেশের বিপরীত পয়েন্ট চিহ্নিত করে।

  2. বন্ধের মূল্য এবং মাঝারি রেখা সম্পর্ক সঠিকভাবে প্রবণতা শেষ নির্ধারণ করে।

  3. পুনরায় প্রবেশ মূলধন ব্যবহারের দক্ষতা বৃদ্ধি করে।

  4. সংশোধন এন্ট্রি প্রবণতা ক্যাপচার করার জন্য সময়মত অবস্থান যোগ করে।

  5. নিয়ন্ত্রণযোগ্য ঝুঁকি সহ উচ্চ ট্রেডিং ফ্রিকোয়েন্সি উচ্চ মুনাফা ফ্যাক্টর দেয়।

  6. পণ্য এবং বাজারে অপ্টিমাইজেশান জন্য কাস্টমাইজযোগ্য পরামিতি।

  7. সহজ লাইভ ট্রেডিংয়ের জন্য পরিষ্কার লজিক এবং সংক্ষিপ্ত কোড।

  8. পর্যাপ্ত ব্যাকটেস্ট ডেটা নির্ভরযোগ্যতা নিশ্চিত করে।

ঝুঁকি

প্রধান ঝুঁকিগুলি হলঃ

  1. অন্য সূচকগুলির সাথে মিথ্যা এমএসিডি সংকেতের সম্ভাবনা যাচাই করা প্রয়োজন।

  2. খুব টাইট স্টপগুলি অস্থির গতি দ্বারা বন্ধ হয়ে যেতে পারে।

  3. বাণিজ্যের প্রবণতা বৃদ্ধির জন্য মূলধন ব্যবহার নিয়ন্ত্রণ করা প্রয়োজন।

  4. সংশোধন এন্ট্রিগুলি প্রত্যাহারের সময় ক্ষতি হতে পারে।

  5. বিভিন্ন পণ্য এবং বাজারের জন্য অপ্টিমাইজেশান প্রয়োজন।

  6. চলমান ব্যাকটেস্টিং এবং অপ্টিমাইজেশান প্রয়োজন।

  7. লাইভ ট্রেডিংয়ের জন্য স্লিপিং খরচ বিবেচনা করা প্রয়োজন।

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

উন্নতির সুযোগ

উন্নতির সুযোগঃ

  1. সিগন্যাল যাচাই করার জন্য অন্যান্য সূচক যোগ করুন, উদাহরণস্বরূপ KDJ।

  2. অ্যাডাপ্টিভ ডায়নামিক স্টপ বাস্তবায়ন করুন।

  3. পুনরায় প্রবেশ এবং সংশোধন প্রবেশ লজিক অপ্টিমাইজ করুন.

  4. প্যারামিটার অপ্টিমাইজেশান প্রতি পণ্য।

  5. এন্ট্রিগুলির জন্য মূলধন ব্যবহারের অনুকূলতা।

  6. পুনরুদ্ধার প্রেরণাগুলি থেকে ক্ষতি এড়াতে ভলিউম সূচক অন্তর্ভুক্ত করুন।

  7. সরে যাওয়ার যন্ত্রপাতি যোগ করুন যেমন চলমান স্টপ।

  8. স্বয়ংক্রিয় ট্রেডিং বট তৈরি করুন।

  9. স্লিপিংয়ের মতো বাস্তব জগতের কারণগুলি বিবেচনা করুন।

এগুলি স্থিতিশীলতা, অভিযোজনযোগ্যতা, অটোমেশন এবং লাইভ পারফরম্যান্সকে আরও উন্নত করতে পারে।

সিদ্ধান্ত

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


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 2h
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/
// © Puckapao

//@version=4
// strategy(title="MACD", shorttitle="MACD", overlay=true, initial_capital=10000.00, currency="USD", default_qty_type=strategy.cash, default_qty_value=10000.00)
// Getting inputs
reenter_delay = input(title="Re-enter Delay", type=input.integer, defval=2)
sculp_delay = input(title="Sculp Delay", type=input.integer, defval=4)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=true)
ema_period = input(title="EMA Period", type=input.integer, defval=21)

// Get date
startDate = input(title="Start Date", type=input.integer,
     defval=19, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=09, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2017, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=31, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=3, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)
     
// STEP 2:
// Look if the close time of the current bar
// falls inside the date range
inDateRange =  true

reenter_cnt = 0
reenter_cnt := nz(reenter_cnt[1])

sculp_cnt = 0
sculp_cnt := nz(sculp_cnt[1])

close_cnt = 0
close_cnt := nz(close_cnt[1])

on_long = false
on_long := nz(on_long[1])

on_short = false
on_short := nz(on_short[1])

sculp = false
reenter = false
slowdown = false

ema = ema(close, ema_period)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
// plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
// plot(macd, title="MACD", color=col_macd, transp=0)
// plot(signal, title="Signal", color=col_signal, transp=0)

cross_up = crossover(macd, signal)
cross_down = crossunder(macd, signal)

if (inDateRange)

    over_macd = macd > 0 and signal > 0 ? true : false
    under_macd = macd < 0 and signal < 0 ? true : false
    over_water = close > ema ? true : false
    under_water = close < ema ? true : false
    slowdown := hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] > hist ? false : true)
    reenter := hist >= 0 ? (hist[1] < hist ? true : false) : (hist[1] > hist ? true : false)
    sculp := (hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] < hist ? true : false))
    
    if(reenter == true)
        if(reenter_cnt < reenter_delay)
            reenter_cnt := reenter_cnt + 1
    else
        if(reenter_cnt > 0)
            reenter_cnt := reenter_cnt - 1
                    
    if(sculp == true)
        if(sculp_cnt < sculp_delay)
            sculp_cnt := sculp_cnt + 1
    else
        if(sculp_cnt > 0)
            sculp_cnt := sculp_cnt - 1
        
    if(slowdown == false)
        if(close_cnt < 2)
            close_cnt := close_cnt + 1
        else
            close_cnt := 0
    
    // plotchar(fork_cnt, "fork count", "")
    // plotchar(spoon_cnt, "spoon count", "")

    // Entry
    if (cross_up == true)
        strategy.entry("long", strategy.long, comment = "long", alert_message = "long")
        on_long := true
        on_short := false
    if (cross_down == true)
        strategy.entry("short", strategy.short, comment = "short", alert_message = "short")
        on_short := true
        on_long := false
        
    // Sculp bottom / top
    if (sculp == true and sculp_cnt >= sculp_delay)
        if (hist >= 0)
            strategy.entry("sculp-short", strategy.short, comment = "sculp-short", alert_message = "sculp-short")
        else
            strategy.entry("sculp-long", strategy.long, comment = "sculp-long", alert_message = "sculp-long")
        
        sculp_cnt := 0
        sculp := false
            
    // Re-Entry
    if (reenter == true and reenter_cnt >= reenter_delay)
        if (hist >= 0)
            strategy.entry("re-long", strategy.long, comment = "re-long", alert_message = "re-long")
        else
            strategy.entry("re-short", strategy.short, comment = "re-short", alert_message = "re-short")
            
        reenter_cnt := 0
        reenter := false
            
    // Close
    strategy.close("long", when = slowdown, comment = "close long", alert_message = "close long")
    strategy.close("short", when = slowdown, comment = "close short", alert_message = "close short")
    strategy.close("re-long", when = slowdown, comment = "close re-long", alert_message = "close re-long")
    strategy.close("re-short", when = slowdown, comment = "close re-short", alert_message = "close re-short")
    strategy.close("sculp-long", when = slowdown, comment = "close sculp-long", alert_message = "close sculp-long")
    strategy.close("sculp-short", when = slowdown, comment = "close sculp-short", alert_message = "close sculp-short")
    
    if (slowdown)
        if (hist >= 0)
            on_long := false
        else
            on_short := false


plotchar(slowdown, "close", "")
plotchar(reenter, "reenter", "")
plotchar(reenter_cnt, "reenter count", "")
plotchar(sculp, "sculp", "")
plotchar(sculp_cnt, "sculp count", "")

আরো