মোমেন্টাম ব্রিক কৌশল


সৃষ্টির তারিখ: 2024-02-19 15:32:17 অবশেষে সংশোধন করুন: 2024-02-19 15:32:17
অনুলিপি: 1 ক্লিকের সংখ্যা: 577
1
ফোকাস
1617
অনুসারী

মোমেন্টাম ব্রিক কৌশল

এই কৌশলটি বাজারের গতিশীলতার পরিবর্তনের উপর ভিত্তি করে একটি ট্রিগার গঠনের অনুকরণ করে এবং ট্রিগারটির দিকনির্দেশের উপর ভিত্তি করে আরও খালি করে।

কৌশল নীতি

এই কৌশলটির মূল নীতিটি হল এটিআর এবং ক্লোজ-আপ মূল্যের মধ্যে সম্পর্ক গণনা করে খড়ের গঠনের অনুকরণ করা। বিশেষত, দুটি পরিবর্তনশীল Brick1 এবং Brick2 সংজ্ঞায়িত করা।

Brick1 এর গণনা পদ্ধতি হলঃ যদি বন্ধের মূল্য Brick1 এর গতকালের মূল্য + ATR এর চেয়ে বেশি হয়, তাহলে Brick1 হল Brick1 এর গতকালের মূল্য + ATR; যদি বন্ধের মূল্য Brick1 এর গতকালের মূল্য - ATR এর চেয়ে কম হয়, তাহলে Brick1 হল Brick1 এর গতকালের মূল্য - ATR; অন্যথায় Brick1 এর গতকালের মূল্য উত্তরাধিকারসূত্রে Brick1 ।

Brick2 এর গণনা পদ্ধতি হলঃ যদি Brick1 এর মান Brick1 এর গতকালের মানের সমান না হয়, তাহলে Brick2 হল Brick1 এর গতকালের মান; অন্যথায় Brick2 এর গতকালের মান উত্তরাধিকারসূত্রে দেওয়া হবে।

এইভাবে, একটি স্তর গঠনের অনুকরণ করা হয়। যখন Brick1 একটি ATR অতিক্রম করে তখন একটি উপরের স্তর গঠিত হয়; যখন Brick1 একটি ATR অতিক্রম করে তখন একটি নীচের স্তর গঠিত হয়। Brick2 হল একটি স্তরের অবস্থান রেকর্ড করা।

যখন Brick1 এবং Brick2 এর উপর দিকে ক্রস হয়, তখন মেরুদণ্ডটি উর্ধ্বমুখী প্রসারিত হয় এবং এটিকে বহু মাথা বলা হয়; যখন Brick1 এবং Brick2 এর নিচের দিকে ক্রস হয়, তখন মেরুদণ্ডটি নিচের দিকে সঙ্কুচিত হয় এবং এটিকে খালি মাথা বলা হয়।

কৌশলগত সুবিধা

  1. এটিআর-এর সাহায্যে, নির্দিষ্ট আকারের ক্যালকুলেটর ব্যবহার না করে, বাজারের অস্থিরতার সাথে সামঞ্জস্যপূর্ণভাবে ক্যালকুলেটর তৈরি করা যায়
  2. পল্টুর দিকনির্দেশনা নির্ধারণের জন্য পল্টুর ক্রস দ্বারা গতিশীলতা পরিবর্তন সনাক্ত করুন
  3. বিভিন্ন ATR চক্রের মাধ্যমে বাজারের গতিশীলতার বিচার করার জন্য সংবেদনশীলতা সামঞ্জস্য করা যায়
  4. মার্কেটের গতিবিধি নির্ধারণের জন্য ভিজ্যুয়ালাইজড কুলিং এবং ক্রসিং

কৌশলগত ঝুঁকি

  1. এটিআর আকারের পছন্দটি কৌশলটির আয়তনের উপর প্রভাব ফেলে। এটিআর খুব ছোট হলে, অনেক বেশি টুকরো তৈরি হয় এবং আরও অকার্যকর সংকেত উত্পন্ন হয়। এটিআর খুব বড় হলে, খুব কম টুকরো থাকে এবং সুযোগটি মিস করা সহজ।
  2. প্রকৃত ট্রেন্ডটি সম্ভবত মণির আকৃতি অনুসরণ করে না, এবং মণির ক্রস সিগন্যালগুলি বাজারের বিপরীত দ্বারা প্রত্যাখ্যান করা হতে পারে।
  3. লেনদেনের খরচ সম্পর্কে অত্যন্ত সংবেদনশীল হওয়া প্রয়োজন, অন্যথায় ঘন ঘন ক্রস-ট্রেডিংয়ের ফলে নিট আয় উল্লেখযোগ্যভাবে হ্রাস পাবে।

প্যারামিটার অপ্টিমাইজেশনের মাধ্যমে সর্বোত্তম ATR চক্র খুঁজে পাওয়া যায়; অকার্যকর সংকেত দ্বারা উত্পন্ন ক্ষতি হ্রাস করার জন্য স্টপ-অফ-ক্ষতি কৌশলটি সামঞ্জস্য করা যায়; উপার্জনের উপর ব্যয় প্রভাব হ্রাস করার জন্য উপযুক্তভাবে বাণিজ্য বৈচিত্র্যকে প্রশস্ত করা যায়।

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

  1. অন্য সূচক যেমন, কোয়ান্টাম এনার্জি সূচক, কম্পন সূচক ইত্যাদি সংযুক্ত করে সংকেত ফিল্টার করা যায়, যাতে অকার্যকর সংকেত এড়ানো যায়
  2. প্রবণতা ফিল্টার যুক্ত করুন, কেবলমাত্র প্রবণতার দিক থেকে সংকেত প্রেরণ করুন, ক্ষতির বিপরীত হওয়া এড়াতে
  3. পরীক্ষার সময়কালের মধ্যে সমস্ত নমুনা প্যারামিটার অপ্টিমাইজেশান পদ্ধতি ব্যবহার করে স্বয়ংক্রিয়ভাবে সর্বোত্তম প্যারামিটার সন্ধান করুন

সারসংক্ষেপ

এই কৌশলটি বাজারে স্বল্পমেয়াদী প্রবণতা এবং গতিশীলতা নির্ধারণের জন্য গতিশীল মডেলিং প্যাচগুলির ক্রস-অনুসরণ করে। কৌশলটি অপ্টিমাইজেশনের জন্য প্রচুর জায়গা রয়েছে, প্যারামিটার অপ্টিমাইজেশন এবং সংকেত ফিল্টারিং আরও স্থিতিশীলতা বাড়িয়ে তুলতে পারে।

কৌশল সোর্স কোড
/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4


///Component Code Start
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(2025, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)



/// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ? 
   #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
/// Component Code Stop


//Zack_the_Lego (original AUTHOR) made into strategy by mkonsap
strategy("Flex Renko Emulator", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
margin = input(true, title="Margin?")
Margin = margin ? margin : false
res = input(type=input.resolution, defval="D", title="Resolution of ATR")
xATR = atr(14)
//TF = x78tf ? "78" : "39"
BrickSize = security(syminfo.tickerid, res, xATR)

//Brick1 =  close >  nz(Brick1[1]) + BrickSize ? nz(Brick1[1]) + BrickSize : close <
                    //nz(Brick1[1]) - BrickSize ?
                        //nz(Brick1[1]) - BrickSize
                            //: nz(Brick1[1]))


Brick1() =>
    s1 = 0.0
    s1 := close > nz(s1[1]) + BrickSize ? nz(s1[1]) + BrickSize : 
       close < nz(s1[1]) - BrickSize ? nz(s1[1]) - BrickSize : nz(s1[1])
    s1


Brick2() =>
    s2 = 0.0
    Brick1_1 = Brick1()
    s2 := Brick1() != Brick1()[1] ? Brick1_1[1] : nz(s2[1])
    s2

colorer = Brick1() > Brick2() ? color.green : color.red
p1 = plot(Brick1(), color=colorer, linewidth=4, title="Renko")
p2 = plot(Brick2(), color=colorer, linewidth=4, title="Renko")
fill(p1, p2, color=color.purple, transp=50)




mylong = crossover(Brick1(), Brick2())
myshort = crossunder(Brick1(), Brick2())

last_long = float(na)
last_short = float(na)
last_long := mylong ? time : nz(last_long[1])
last_short := myshort ? time : nz(last_short[1])

in_long = last_long > last_short ? 2 : 0
in_short = last_short > last_long ? 2 : 0

mylong2 = crossover(Brick1(), Brick2())
myshort2 = crossunder(Brick1(), Brick2())

last_long2 = float(na)
last_short2 = float(na)
last_long2 := mylong2 ? time : nz(last_long2[1])
last_short2 := myshort2 ? time : nz(last_short2[1])

in_long2 = last_long2 > last_short2 ? 0 : 0
in_short2 = last_short2 > last_long2 ? 0 : 0


condlongx = in_long + in_long2
condlong = crossover(condlongx, 1.9)
condlongclose = crossunder(condlongx, 1.9)

condshortx = in_short + in_short2
condshort = crossover(condshortx, 1.9)
condshortclose = crossunder(condshortx, 1.9)


// === STRATEGY - LONG POSITION EXECUTION WITH CLOSE ORDERS ===
//enterLong() => crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
//exitLong()  => crossunder(condlongx, 1.9) and testPeriod() and strategy.position_size > 0
//strategy.entry(id = "Long", long = true, when = enterLong())
//strategy.close(id = "Long", when = exitLong())
// === STRATEGY - SHORT POSITION EXECUTION WITH CLOSE ORDER===
//enterShort() => crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0 and Margin
//exitShort() => crossunder(condshortx, 1.9)  and testPeriod() and strategy.position_size < 0
//strategy.entry(id = "Short", long = false, when = enterShort())
//strategy.close(id = "Short", when = exitShort())   
//END


///STRATEGY ONLY LONG AND SHORT/////
if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
    strategy.entry("Long", strategy.long, comment="Long")

if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
    strategy.close("Long", when=not Margin)

if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
    strategy.entry("Short", strategy.short, comment="Short", when=Margin)

/////// END ////