ইম্পুটাম ইট কৌশল

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

img

কৌশলটি বাজারের গতির পরিবর্তনকে সিমুলেটেড ইটগুলির গঠনের ভিত্তিতে এবং ইটগুলির দিকের উপর দীর্ঘ বা সংক্ষিপ্ত হিসাবে বিচার করে।

কৌশলগত যুক্তি

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

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

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

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

যখন Brick1 এবং Brick2 উপরে যায়, এর মানে হল যে ইটটি উপরে প্রসারিত হয়, দীর্ঘ হিসাবে বিচার করা হয়। যখন Brick1 এবং Brick2 নিচে যায়, এর মানে হল যে ইটটি নীচে সঙ্কুচিত হয়, ছোট হিসাবে বিচার করা হয়।

সুবিধা

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

ঝুঁকি

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

সমাধানগুলির মধ্যে রয়েছে সর্বোত্তম এটিআর চক্র খুঁজে পেতে প্যারামিটার অপ্টিমাইজেশন, অবৈধ সংকেত থেকে ক্ষতি হ্রাস করার জন্য স্টপ লাভ লস কৌশল সামঞ্জস্য করা, রিটার্নের উপর ব্যয় প্রভাব হ্রাস করার জন্য লেনদেনের বৈচিত্র্য যথাযথভাবে বৃদ্ধি করা।

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

  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 ////


আরো