ইলাস্টিক স্টপ লস সহ PB SAR ব্যাকটেস্ট কৌশল

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

সংক্ষিপ্তসার

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

মূলনীতি

এই কৌশলটি মূলত প্রবণতা সনাক্তকরণের বিপরীতমুখী পয়েন্টগুলি ব্যবহার করে, বিপরীতমুখী অপারেশন করে। সূচকের অভ্যন্তরে সত্যিকারের পরিসীমা সূচকগুলি ব্যবহার করা হয়, যখন দামটি সীমা অতিক্রম করে তখন এটি একটি অস্বাভাবিক বিচ্ছিন্নতা হিসাবে বিবেচিত হয় এবং প্রবণতা বিপরীত হওয়ার সম্ভাবনা নির্ধারণ করে। বিশেষত, সূচকের অভ্যন্তরে দুটি ভেরিয়েবল বজায় রাখা হয়ঃ সর্বাধিক মূল্য (EP) এবং ট্রিগার মূল্য (TP) । EP বর্তমান প্রবণতার অধীনে সর্বোচ্চ বা সর্বনিম্ন মূল্যের প্রতিনিধিত্ব করে। TP EP দ্বারা গণনা করা হয়।

একটি উর্ধ্বমুখী প্রবণতার ক্ষেত্রে, যখন দামটি ইপি-র উপরে থাকে, তখন এটি একটি অস্বাভাবিক ভাঙ্গন হিসাবে চিহ্নিত করা হয়, যখন ইপি সর্বোচ্চ মূল্য এবং টিপি সর্বনিম্ন মূল্য হিসাবে পুনর্নবীকরণ করা হয়। যখন দামটি টিপি-র নীচে থাকে, তখন প্রবণতা বিপরীত হয় এবং বিক্রয় সংকেত উত্পাদন করে। একটি হ্রাস প্রবণতার ক্ষেত্রে, নীতিটি অনুরূপ।

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

সুবিধা

এই কৌশলটি নিম্নলিখিত সুবিধাগুলি নিয়ে গঠিতঃ

  1. এই সূচকগুলি ট্রেন্ড রিভার্স পয়েন্টগুলি সনাক্ত করতে ব্যবহার করা হয়, যা খুব সহজেই ধরা পড়ে না।

  2. এটি একটি স্টপ লস মেকানিজম যা লাভকে লক করতে পারে এবং ক্ষতির বিস্তার এড়াতে পারে।

  3. সূচক প্যারামিটারগুলি সহজ এবং বাস্তবায়ন করা সহজ।

  4. এটি একটি সহজ অপারেটিং সিস্টেম, যেখানে আপনি আপনার ক্রয় বা বিক্রয় সংকেত নির্দেশাবলী কনফিগার করতে পারেন।

  5. কৌশলগত কার্যকারিতা সম্পূর্ণরূপে মূল্যায়নের জন্য নমনীয়ভাবে পুনর্বিবেচনার চক্র কনফিগার করা যায়।

ঝুঁকি

এই কৌশলটি ঝুঁকিপূর্ণঃ

  1. এই সূচকগুলি বিলম্বিত এবং সম্ভবত ট্রেন্ড বিপরীত হওয়ার সেরা পয়েন্টটি মিস করতে পারে।

  2. তবে, যদি এই হার খুব বেশি হয়, তবে এটি মূল্যের স্বল্পমেয়াদী অস্থিরতার দ্বারা হ্রাস পেতে পারে।

  3. রিভিউ চক্রগুলি ভুলভাবে নির্বাচন করা হয়েছে এবং কৌশলগত কার্যকারিতা সম্পূর্ণরূপে মূল্যায়ন করা সম্ভব নয়।

  4. লেনদেনের খরচ লাভের উপর প্রভাব ফেলতে পারে।

ঝুঁকি মোকাবেলা করার জন্য, নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ

  1. এদিকে, বাংলাদেশের বিভিন্ন অঞ্চলের নাগরিকরাও এই প্রকল্পের জন্য আবেদন করেছেন।

  2. "এটি একটি দুর্দান্ত উপায় যা আপনি আপনার ব্যবসায়ের জন্য ব্যবহার করতে পারেন।

  3. সঠিক পুনরায় পরীক্ষা চক্র নির্বাচন করুন এবং নির্ভরযোগ্যতা নিশ্চিত করুন।

  4. পজিশন ম্যানেজমেন্ট অপ্টিমাইজ করা এবং লেনদেনের খরচ কমানো।

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

এই কৌশলটি নিম্নলিখিত দিকগুলির জন্য আরও অনুকূল করা যেতে পারেঃ

  1. ট্রেন্ড ইন্ডিকেটরগুলির সাথে একত্রিত হয়ে বিপরীত ট্রেডিংয়ের ঝুঁকি এড়ানো যায়।

  2. পজিশন ম্যানেজমেন্ট অ্যালগরিদমগুলি অপ্টিমাইজ করুন, যেমন স্থির অনুপাত পজিশন, গতিশীল পজিশন ইত্যাদি।

  3. এই ব্যবসায়িক ফাঁকগুলি হ্রাস করার জন্য ভলিউম ফিল্টারিং যুক্ত করুন।

  4. প্যারামিটার অপ্টিমাইজেশান করুন এবং সেরা প্যারামিটার সমন্বয় খুঁজে বের করুন।

  5. ট্রেন্ড চলাকালীন সময়মত স্টপ-ইন কৌশল অনুসরণ করুন।

  6. স্টপ লস কৌশলটি অনুকূলিত করুন যাতে স্টপ লস আরও মসৃণ হয়। স্টপ লস অ্যালগরিদম যেমন চ্যান্ডেলিয়ার এক্সট পরীক্ষা করা যেতে পারে।

  7. লেনদেনের ধরন, সময়সীমা ইত্যাদির অপ্টিমাইজেশান এবং কৌশলগত অভিযোজনশীলতা উন্নত করা।

  8. মেশিন লার্নিং অ্যালগরিদম যুক্ত করা কৌশলকে আরও অভিযোজিত করে তোলে।

সংক্ষিপ্তসার

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

সারসংক্ষেপ

এই কৌশলটি লং এবং শর্ট পজিশনের জন্য ক্রয় এবং বিক্রয় সংকেত তৈরির জন্য প্যারাবোলিক এসএআর সূচকের উপর ভিত্তি করে। এটি কার্যকরভাবে ঝুঁকি নিয়ন্ত্রণের জন্য একটি ট্রেলিং স্টপ লস প্রক্রিয়াও অন্তর্ভুক্ত করে।

নীতি

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

একটি আপট্রেন্ডে, যখন দাম ইপি এর চেয়ে বেশি হয়, তখন এটি একটি ব্রেকআউট হিসাবে বিবেচিত হয়। ইপি তখন সর্বোচ্চ মূল্যে এবং টিপি সর্বনিম্ন মূল্যে আপডেট করা হয়। যখন মূল্য টিপি এর নীচে পড়ে, তখন একটি প্রবণতা বিপরীত চিহ্নিত করা হয় এবং একটি বিক্রয় সংকেত উত্পন্ন হয়। একই নীতি একটি ডাউনট্রেন্ডের জন্য প্রযোজ্য।

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

সুবিধা

এই কৌশলটির প্রধান সুবিধাগুলো হল:

  1. প্রবণতার ফাঁদে পড়া এড়ানোর জন্য সূচক দিয়ে প্রবণতা বিপরীত পয়েন্ট চিহ্নিত করুন।

  2. ট্রেলিং স্টপ লস লাভকে লক করে দেয় এবং বৃহত্তর ক্ষতি রোধ করে।

  3. সহজ সূচক পরামিতি, বাস্তবায়ন সহজ।

  4. কনফিগারযোগ্য ক্রয়/বিক্রয় সংকেত সতর্কতা।

  5. পুঙ্খানুপুঙ্খ মূল্যায়নের জন্য নমনীয় ব্যাকটেস্ট সময়ের কনফিগারেশন।

ঝুঁকি

এছাড়াও কিছু ঝুঁকি রয়েছে যা বিবেচনা করা উচিতঃ

  1. ইন্ডিকেটর লেগ অপ্টিমাল রিভার্স পয়েন্ট মিস করতে পারে।

  2. অত্যাচারী স্টপগুলি স্বল্পমেয়াদী ওঠানামা দ্বারা বন্ধ করা যেতে পারে।

  3. ভুল ব্যাকটেস্ট সময়কাল নির্বাচন কৌশল সম্পূর্ণরূপে মূল্যায়ন করতে পারে না।

  4. লেনদেনের খরচ মুনাফা হ্রাস করতে পারে।

ঝুঁকি মোকাবেলার কিছু উপায় হল:

  1. প্যারামিটার অপ্টিমাইজ করুন বিলম্ব কমাতে.

  2. অপ্রয়োজনীয়ভাবে থামানো এড়াতে স্টপ লস অ্যালগরিদম উন্নত করুন।

  3. নির্ভরযোগ্যতার জন্য উপযুক্ত ব্যাকটেস্ট সময় নির্বাচন করুন।

  4. লেনদেনের খরচ কমানোর জন্য পজিশনের আকারকে অপ্টিমাইজ করুন।

উন্নতকরণ

কৌশলটি আরও উন্নত করার কিছু উপায়ঃ

  1. বিপরীত প্রবণতায় আটকে না পড়ার জন্য এমএ এর মতো প্রবণতা সূচক অন্তর্ভুক্ত করুন।

  2. পজিশনের আকার নির্ধারণের অ্যালগরিদম অপ্টিমাইজ করুন, যেমন ফিক্সড ফ্রেকশনাল, ডায়নামিক।

  3. ফাঁক থেকে মিথ্যা সংকেত এড়াতে ভলিউম ফিল্টার যুক্ত করুন।

  4. সর্বোত্তম সমন্বয় খুঁজতে পরামিতি অপ্টিমাইজেশান।

  5. প্রবণতা অনুযায়ী মুনাফা অর্জনের কৌশল বাস্তবায়ন করুন।

  6. স্টপ লস অ্যালগরিদমকে আরও মসৃণ স্টপের জন্য পরিমার্জন করুন। চ্যান্ডেলিয়ার এক্সট ইত্যাদির সাথে পরীক্ষা করুন।

  7. পণ্য, সময়সীমা ইত্যাদির মধ্যে অনুকূলিতকরণ উন্নত করতে।

  8. আরও অভিযোজনযোগ্যতার জন্য মেশিন লার্নিং অন্তর্ভুক্ত করুন।

সংক্ষিপ্তসার

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


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("PB SAR BackTest - Colorbar", overlay=false)

// Full credit to Sawcruhteez, Lucid Investment Strategies LLC, Casey Bowman and Peter Brandt.
// This is a strategy version of the Peterbolic SAR indicator created by the above-mentioned parties.
// Original version of the indicator: https://www.tradingview.com/script/6nYrH3Vm-Peterbolic-SAR/

// SAR #1
// Lucid Sar
// Branded under the name "Lucid SAR"
// as agreed to with Lucid Investment Strategies LLC on July 9, 2019
// https://lucidinvestmentstrategies.com/
// see branch "lucid"

// SAR #2
// Peterbolic Sar
// Using the name "Peterbolic SAR"
// as agreed to by Peter Brandt on October 2, 2019
// - https://twitter.com/PeterLBrandt/status/1179365590668075008
// in response to request from Sawcruhteez
// - https://twitter.com/Sawcruhteez/status/1179213105705836544
// Sawcruhteez gives credit to @CrazyGabey for coming up with the name
// - https://twitter.com/Sawcruhteez/status/1179213196583940097
// see branch "peterbolic"

// SAR #3
// Sawcruhteez Sar
// Branded under the name "Sawcruhteez SAR"
// as agreed to with Sawcruhteez on September 11, 2019
// see branch "sawcruhteez"

// Open Source on github
// https://github.com/casey-bowman/sar/blob/peterbolic/peterbolic.pine

// Created by Casey Bowman on July 4, 2019

// MIT License

// Copyright (c) 2019 Casey Bowman

// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.



TSR() =>

    // start with uptrend
    var uptrend = true
    var EP = high       // extreme price - high or low depending on trend
    var SP = low        // setup price
    var TP = float(na)  // trigger price


    var setup   = low
    var trigger = float(na)

    if barstate.isnew
        setup := low
        trigger = float(na)

    extreme_candle = false
    first_extreme_candle = false
    setup_candle = false
    trigger_candle = false

    waiting_for_setup = false
    waiting_for_trigger = false

    var since_extreme = 0
    var since_setup = 0

    waiting_for_setup   := not extreme_candle and not na(SP)
    waiting_for_trigger := not na(TP)

    if not barstate.isfirst
        if barstate.isnew and extreme_candle[1]
            trigger := float(na)
        if barstate.isnew and setup_candle[1]
            setup := float(na)
        if barstate.isnew and waiting_for_trigger
            since_setup := since_setup + 1
            trigger := TP
        if barstate.isnew and waiting_for_setup
            since_extreme := since_extreme + 1
            setup := SP
        if uptrend

            if extreme_candle
                EP := high
                SP := low
            else
                if high > EP
                    extreme_candle := true
                    EP := high
                    SP := low
                    since_extreme := 0
                    since_setup   := 0
                else
                    if waiting_for_setup
                        if barstate.isconfirmed
                            if close < SP
                                setup_candle := true
                                SP := float(na)
                                TP := low
            if waiting_for_trigger
                if low < TP
                    trigger_candle := true
                    extreme_candle := true
                    EP := low
                    SP := high
                    TP := float(na)
                    uptrend := false
                    since_extreme := 0
                    since_setup := 0
                else
                    if barstate.isconfirmed and extreme_candle
                        TP := float(na)
                        trigger := float(na)

        else
            if extreme_candle
                EP := low
                SP := high
            else
                if low <  EP
                    extreme_candle := true
                    EP := low
                    SP := high
                    since_extreme := 0
                    since_setup   := 0
                else
                    if waiting_for_setup
                        if barstate.isconfirmed
                            if close > SP
                                setup_candle := true
                                SP := float(na)
                                TP := high
            if waiting_for_trigger
                if high > TP
                    trigger_candle := true
                    extreme_candle := true
                    EP := high
                    SP := low
                    TP := float(na)
                    uptrend := true
                    since_extreme := 0
                    since_setup := 0
                else
                    if barstate.isconfirmed and extreme_candle
                        TP := float(na)
                        trigger := float(na)


    [trigger_candle, trigger, since_setup, setup_candle, setup, since_extreme, extreme_candle, uptrend]


[TC, T, SS, SC, S, SE, EC, up] = TSR()

// Make input options that configure backtest date range
StartMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
StartDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
StartYear = input(title="Start Year", type=input.integer,
     defval=(2019), minval=1800, maxval=2100)

EndMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12)
EndDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
EndYear = input(title="End Year", type=input.integer,
     defval=(2020), minval=1800, maxval=2100)
     
// Look if the close time of the current bar falls inside the date range
inDateRange = true

buytrigger = (TC and up)
selltrigger = (TC and not up)
buysetup = (SC and not up)
sellsetup = (SC and up)

IntBuy = buytrigger ? 1 : 0
IntSB = buysetup ? 0.5 : 0

IntSell= selltrigger ? -1 : 0
IntSS = sellsetup ? -0.5 : 0

bgcolor = buytrigger ? color.green : selltrigger ? color.red : buysetup ? color.yellow : sellsetup ? color.orange : color.black
trans = buytrigger ? 20 : selltrigger ? 20 : 100

bgcolor(bgcolor, 30)

NUM = IntBuy + IntSB + IntSell + IntSS
linecolor = color.orange
plot(NUM, color=linecolor, linewidth=2)

alertcondition(NUM > 0.5, title="Buy Signal", message="Buy Alert")
alertcondition(NUM < -0.5, title="Sell Signal", message="Sell Alert")

alertcondition(NUM == 0.5, title="Buy Setup", message="Buy Setup")
alertcondition(NUM == -0.5, title="Sell Setup", message="Sell Setup")

//Switch on for strategy moves

if(inDateRange and buytrigger)
    strategy.exit("SHORT", "SHORT_SL", comment="Short_Exit")
    strategy.entry("LONG", strategy.long, comment="")
if(inDateRange and selltrigger)
    strategy.exit("LONG", "LONG_SL", comment="Long_Exit")
    strategy.entry("SHORT", strategy.short, comment="")
if (not inDateRange)
    strategy.close_all()

// plotshape(SC and not up, color = color.yellow, style = shape.triangleup, location = location.belowbar, size = size.auto, transp = 0, title = "Setup to Buy")
// plotshape(TC and up, color = color.green, style = shape.triangleup, location = location.belowbar, size = size.auto, title = "Trigger to Buy")
// plotshape(SC and up, color = color.yellow, style = shape.triangledown, location = location.abovebar, size = size.auto, transp = 0, title = "Setup to Sell")
// plotshape(TC and not up, color = color.red, style = shape.triangledown, location = location.abovebar, size = size.auto, title = "Trigger to Sell")


আরো