রিসোর্স লোড হচ্ছে... লোডিং...

স্ক্র্যাজ ব্যাকটেস্ট ট্রান্সফরমার v2.0

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

img

সারসংক্ষেপ

Squeeze Backtest Transformer v2.0 হল একটি সংকোচন কৌশল উপর ভিত্তি করে একটি পরিমাণগত ট্রেডিং সিস্টেম। এন্ট্রি, স্টপ লস, লাভের শতাংশ এবং সর্বোচ্চ হোল্ডিং সময় মত প্যারামিটার সেট করে, এটি একটি নির্দিষ্ট সময়সীমার মধ্যে কৌশল ব্যাকটেস্ট করে। কৌশলটি মাল্টি-ডাইরেকশনাল ট্রেডিং সমর্থন করে এবং নমনীয়ভাবে দীর্ঘ বা সংক্ষিপ্ত ট্রেডিং দিক সেট করতে পারে। একই সময়ে, কৌশলটি ব্যাকটেস্ট সময়কাল সেট করার জন্য সমৃদ্ধ বিকল্পগুলিও সরবরাহ করে, যা সহজেই একটি নির্দিষ্ট সময়সীমা বা সর্বোচ্চ ব্যাকটেস্ট সময় নির্বাচন করতে পারে।

কৌশল নীতি

  1. প্রথমত, ব্যাকটেস্টের শুরু এবং শেষ সময় নির্ধারণ করুন ব্যাকটেস্টের সময়কালের পরামিতি ব্যবহারকারীর দ্বারা সেট করা।
  2. ব্যাকটেস্টের সময়কালে, যদি কোনও বর্তমান অবস্থান না থাকে এবং দাম প্রবেশের মূল্যে পৌঁছায় (খোলার শতাংশের ভিত্তিতে গণনা করা হয়), একটি অবস্থান খুলুন এবং স্টপ লস এবং লাভের দামগুলি একই সাথে সেট করুন (স্টপ লস এবং লাভের শতাংশের ভিত্তিতে গণনা করা হয়) ।
  3. যদি একটি পজিশন ইতিমধ্যেই রাখা থাকে, তাহলে পূর্ববর্তী লাভ এবং স্টপ লস অর্ডার বাতিল করুন এবং নতুন লাভ এবং স্টপ লস মূল্য পুনরায় সেট করুন (বর্তমান পজিশনের গড় মূল্যের ভিত্তিতে গণনা করা হয়) ।
  4. যদি সর্বাধিক হোল্ডিং সময় সেট করা থাকে, যখন হোল্ডিং সময় সর্বাধিক মান পৌঁছায়, পজিশনটি বন্ধ করতে বাধ্য করা হয়।
  5. এই কৌশলটি দীর্ঘ ও সংক্ষিপ্ত উভয় দিকের বাণিজ্যকে সমর্থন করে।

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

  1. নমনীয় প্যারামিটার সেটিং বিভিন্ন বাজার পরিস্থিতি এবং ট্রেডিংয়ের প্রয়োজন অনুযায়ী সামঞ্জস্য করা যেতে পারে।
  2. বিভিন্ন বাজারের পরিস্থিতিতে লাভ অর্জনের জন্য বহু-দিকের বাণিজ্যকে সমর্থন করা।
  3. ব্যাকটেস্ট সময়কাল সেট করার জন্য সমৃদ্ধ বিকল্প সরবরাহ করুন, যা সহজেই ঐতিহাসিক ডেটা ব্যাকটেস্টিং এবং বিশ্লেষণ করতে পারে।
  4. স্টপ লস এবং লাভ নেওয়ার সেটিংস কার্যকরভাবে ঝুঁকি নিয়ন্ত্রণ করতে পারে এবং মূলধন ব্যবহারের দক্ষতা উন্নত করতে পারে।
  5. সর্বোচ্চ হোল্ডিং সময় নির্ধারণের ফলে খুব বেশি সময় ধরে পজিশন ধরে রাখা এবং বাজার ঝুঁকি মোকাবেলা করা এড়ানো যায়।

কৌশলগত ঝুঁকি

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

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

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

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

Squeeze Backtest Transformer v2.0 একটি পরিমাণগত ট্রেডিং সিস্টেম যা একটি সংকোচন কৌশল উপর ভিত্তি করে যা নমনীয় পরামিতি সেটিংস এবং বহু-দিকের ট্রেডিং সমর্থন মাধ্যমে বিভিন্ন বাজারের পরিবেশে বাণিজ্য করতে পারে। একই সময়ে, সমৃদ্ধ ব্যাকটেস্ট সময়কাল সেটিং বিকল্প এবং লাভ এবং স্টপ লস সেটিংস নিতে ব্যবহারকারীদের ঐতিহাসিক তথ্য বিশ্লেষণ এবং ঝুঁকি নিয়ন্ত্রণ পরিচালনা করতে সাহায্য করতে পারেন। যাইহোক, কৌশলটির কর্মক্ষমতা পরামিতি সেটিংস দ্বারা ব্যাপকভাবে প্রভাবিত হয় এবং কৌশলটির স্থিতিশীলতা এবং লাভজনকতা উন্নত করার জন্য বাজার বৈশিষ্ট্য এবং ট্রেডিং প্রয়োজনের উপর ভিত্তি করে অনুকূলিতকরণ এবং উন্নত করা প্রয়োজন। ভবিষ্যতে, আমরা আরো প্রযুক্তিগত সূচক প্রবর্তন, গতিশীলভাবে সর্বাধিক হোল্ডিং সময় সামঞ্জস্য, পার্শ্ববর্তী কৌশল অপ্টিমাইজ, এবং অপ্টিমাইজ করার জন্য অবস্থান এবং মূলধন ব্যবস্থাপনা শক্তিশালী বিবেচনা করতে পারেন।


/*backtest
start: 2023-04-22 00:00:00
end: 2024-04-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy(title="Squeeze Backtest by Shaqi v2.0", overlay=true, pyramiding=0, currency="USD", process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, backtest_fill_limits_assumption=0)
R0 = "6 Hours"
R1 = "12 Hours"
R2 = "24 Hours"
R3 = "48 Hours"
R4 = "1 Week"
R5 = "2 Weeks"
R6 = "1 Month"
R7 = "Maximum"

BL = "low"
BH = "high"
BO = "open"
BC = "close"
BHL= "mid (hl)"
BOC = "mid (oc)"

LONG = "LONG"
SHORT = "SHORT"

direction = input.string(title="Direction", defval=LONG, options=[LONG, SHORT], group="Squeeze Settings")
strategy.risk.allow_entry_in(direction == LONG ? strategy.direction.long : strategy.direction.short)
openPercent = input.float(1.4, "Open, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
closePercent = input.float(0.6, "Close, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
stopPercent = input.float(0.8, "Stop Loss, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
isMaxBars = input.bool(true, "Max Bars To Sell", inline="MaxBars", group="Squeeze Settings")
maxBars = input.int(10, title="", minval=0, maxval=1000, step=1, inline="MaxBars", group="Squeeze Settings")
bind = input.string(BC, "Bind", options=[BL, BH, BO, BC, BHL, BOC], group="Squeeze Settings")
isRange = input.bool(true, "Fixed Range", inline="Range", group="Backtesting Period")
rangeStart = input.string(R2, "", options=[R0, R1, R2, R3, R4, R5, R6, R7], inline="Range", group="Backtesting Period")
periodStart = input(timestamp("12 Apr 2024 00:00 +0000"), "Backtesting Start", group="Backtesting Period")
periodEnd = input(timestamp("20 Apr 2024 00:00 +0000"), "Backtesting End", group="Backtesting Period")

int startDate = na
int endDate = na
if isRange
    if rangeStart == R0
        startDate := timenow - 21600000
        endDate := timenow
    else if rangeStart == R1
        startDate := timenow - 43200000
        endDate := timenow
    else if rangeStart == R2
        startDate := timenow - 86400000
        endDate := timenow
    else if rangeStart == R3
        startDate := timenow - 172800000
        endDate := timenow
    else if rangeStart == R4
        startDate := timenow - 604800000
        endDate := timenow
    else if rangeStart == R5
        startDate := timenow - 1209600000
        endDate := timenow
    else if rangeStart == R6
        startDate := timenow - 2592000000
        endDate := timenow
    else if rangeStart == R7
        startDate := time
        endDate := timenow
else 
    startDate := periodStart
    endDate := periodEnd
    
float bindOption = na
if bind == BL
    bindOption := low
else if bind == BH
    bindOption := high
else if bind == BO
    bindOption := open
else if bind == BC
    bindOption := close
else if bind == BHL
    bindOption := hl2
else
    bindOption := ohlc4

afterStartDate = (time >= startDate)
beforeEndDate = (time <= endDate)
periodCondition = true
notInTrade = strategy.position_size == 0
inTrade = strategy.position_size != 0

barsFromEntry = ta.barssince(strategy.position_size[0] > strategy.position_size[1])
entry = strategy.position_size[0] > strategy.position_size[1]
entryBar = barsFromEntry == 0
notEntryBar = barsFromEntry != 0
openLimitPrice = direction == LONG ? (bindOption - bindOption * openPercent) : (bindOption + bindOption * openPercent)

closeLimitPriceEntry = openLimitPrice * (direction == LONG ? 1 + closePercent : 1 - closePercent)
closeLimitPrice = strategy.position_avg_price * (direction == LONG ? 1 + closePercent : 1 - closePercent)

stopLimitPriceEntry = direction == LONG ? openLimitPrice - openLimitPrice * stopPercent : openLimitPrice + openLimitPrice * stopPercent
stopLimitPrice = direction == LONG ? strategy.position_avg_price - strategy.position_avg_price * stopPercent : strategy.position_avg_price + strategy.position_avg_price * stopPercent

if periodCondition and notInTrade
    strategy.entry(direction == LONG ? "BUY" : "SELL", direction == LONG ? strategy.long : strategy.short, limit = openLimitPrice, stop = stopLimitPriceEntry)
    strategy.exit("INSTANT", limit = closeLimitPriceEntry, stop = stopLimitPriceEntry, comment_profit = direction == LONG ? 'INSTANT SELL' : 'INSTANT BUY', comment_loss = 'INSTANT STOP')
if inTrade 
    strategy.cancel("INSTANT")
    strategy.exit(direction == LONG ? "SELL" : "BUY", limit = closeLimitPrice, stop = stopLimitPrice, comment_profit = direction == LONG ? "SELL" : "BUY", comment_loss = "STOP")
if isMaxBars and barsFromEntry == maxBars
    strategy.close_all(comment = "TIMEOUT STOP", immediately = true)



showStop = stopPercent <= 0.20

// plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", force_overlay=true, style=plot.style_linebr, color=#c50202, linewidth=1, offset=1)
// plot(closeLimitPrice, title="Take Profit Limit Order", force_overlay=true, style=plot.style_linebr, color = direction == LONG ? color.red : color.blue, linewidth=1, offset=1)
// plot(strategy.position_avg_price, title="Buy Order Filled Price", force_overlay=true, style=plot.style_linebr, color=direction == LONG ? color.blue : color.red, linewidth=1, offset=1)
plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", force_overlay=true, style=plot.style_linebr, color=#c50202, linewidth=1, offset=0)
plot(closeLimitPrice, title="Take Profit Limit Order", force_overlay=true, style=plot.style_linebr, color = direction == LONG ? color.red : color.blue, linewidth=1, offset=0)
plot(strategy.position_avg_price, title="Buy Order Filled Price", force_overlay=true, style=plot.style_linebr, color=direction == LONG ? color.blue : color.red, linewidth=1, offset=0)

plot(openLimitPrice, title="Trailing Open Position Limit Order", style=plot.style_stepline, color=color.new(direction == LONG ? color.blue : color.red, 30), offset=1)
plot(closeLimitPriceEntry, title="Trailing Close Position Limit Order", style=plot.style_stepline, color=color.new(direction == LONG ? color.red : color.blue, 80), offset=1)
plot(stopLimitPriceEntry, title="Trailing Stop Position Limit Order", style=plot.style_stepline, color=color.new(#c50202, 80), offset=1)



আরো