ফ্রি ব্যান্ড দোলন ট্র্যাকিং কৌশল


সৃষ্টির তারিখ: 2024-02-04 10:28:24 অবশেষে সংশোধন করুন: 2024-02-04 10:28:24
অনুলিপি: 0 ক্লিকের সংখ্যা: 614
1
ফোকাস
1617
অনুসারী

ফ্রি ব্যান্ড দোলন ট্র্যাকিং কৌশল

ওভারভিউ

এই কৌশলটির মূল ধারণা হল এটিআর সূচকের উপর ভিত্তি করে লম্বা লাইন এবং সংক্ষিপ্ত লাইনের জন্য স্টপ-অফ গণনা করা এবং যখন দামগুলি এই স্টপ-অফ লাইনগুলিকে ভেঙে দেয় তখন একটি ট্রেডিং সিগন্যাল তৈরি করা। এটি একই সাথে প্রবণতা ট্র্যাকিং এবং শক ক্যাপচারের বৈশিষ্ট্য রয়েছে।

কৌশল নীতি

এই কৌশলটি ATR সূচকটির N-পায়ার ATR-কে একটি ফ্যাক্টর দ্বারা গুণ করে দীর্ঘ এবং দীর্ঘ উভয় পক্ষের স্টপ লিনের জন্য গণনা করে। নির্দিষ্ট গণনা সূত্রটি নিম্নরূপঃ

长线止损 = 最高价 - ATR * 系数
短线止损 = 最低价 + ATR * 系数

যখন দাম বাড়বে তখন লম্বা স্টপ লিনিকে ছাড়বে এবং যখন দাম কমবে তখন লম্বা স্টপ লিনিকে ছাড়বে তখন খালি করবে। অতিরিক্ত খালি করার পরে, স্টপ লিনিকে সরানোর জন্য রিয়েল টাইমে দামের ওঠানামা অনুসরণ করা হবে।

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

সামর্থ্য বিশ্লেষণ

এই কৌশলটির সবচেয়ে বড় সুবিধা হল যে এটি স্বয়ংক্রিয়ভাবে স্টপ লস স্থিতিগুলিকে সামঞ্জস্য করতে পারে, দামের প্রবণতা ধরে রাখার পাশাপাশি ঝুঁকি নিয়ন্ত্রণ করতে পারে। এর সুবিধাগুলি নিম্নরূপঃ

  1. এটিআর সূচকের উপর ভিত্তি করে ফ্লোটিং স্টপ সেট করা হয়েছে, যা বাজারের অস্থিরতার সাথে সামঞ্জস্য রেখে স্টপ আকারকে কার্যকরভাবে নিয়ন্ত্রণ করতে পারে।

  2. এই পদ্ধতিতে, কিছু শব্দ মুছে ফেলা যায়, এবং শীর্ষ এবং নীচের অংশগুলি এড়ানো যায়।

  3. রিয়েল-টাইমে স্টপ-লাইন ট্র্যাকিং, দামের ওঠানামা, স্টপ-লাইনকে খুব হালকা হওয়া থেকে রক্ষা করা এবং আরও বেশি লাভের জন্য লক করা।

ঝুঁকি বিশ্লেষণ

এই কৌশলটির কিছু ঝুঁকিও রয়েছে, যা মূলত স্টপ লস সেটিং এবং সিগন্যাল তৈরির পদ্ধতির উপর দৃষ্টি নিবদ্ধ করে। নির্দিষ্ট ঝুঁকিগুলি নিম্নরূপঃ

  1. এটিআর চক্র এবং ফ্যাক্টরগুলির ভুল ব্যবহারের ফলে স্টপ ড্যাম্প খুব প্রশস্ত বা খুব সংকীর্ণ হতে পারে।

  2. ট্রেন্ডের শুরুতে সুযোগ হারাতে পারে।

  3. ট্রেন্ডের শেষের দিকে স্টপ লস ট্র্যাকিং কিছুটা পিছিয়ে যেতে পারে এবং নিখুঁতভাবে বেরিয়ে আসতে পারে না।

প্রতিকার মূলত স্টপ লসকে যুক্তিসঙ্গত করার জন্য প্যারামিটারগুলিকে সামঞ্জস্য করা হয়, বা অন্যান্য সূচকগুলি প্রবণতা এবং সংকেতগুলি বিচার করতে সহায়তা করে।

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

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

  1. দ্বিতীয় স্তরের ক্ষতি বন্ধ করুন এবং ঝুঁকি নিয়ন্ত্রণ করুন।

  2. অন্যান্য সূচকগুলির সাথে মিলিত হয়ে, প্রবণতা নির্ণয় করে, সংকেতের গুণমান উন্নত করে।

  3. ট্রেন্ডটি চলতে থাকলে মুনাফা বাড়ানোর জন্য একটি মোবাইল স্টপ কৌশল যুক্ত করুন।

  4. এটিআর চক্র এবং ফ্যাক্টর প্যারামিটারগুলিকে অপ্টিমাইজ করে যাতে স্টপ লস প্রকৃত মূল্যের ওঠানামার কাছাকাছি থাকে।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
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/
// © melihtuna
//@version=4
strategy("Chandelier Exit - Strategy",shorttitle="CE-STG" , overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD, commission_value=0.03, commission_type=strategy.commission.percent)

length = input(title="ATR Period", type=input.integer, defval=22)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=false)
useClose = input(title="Use Close Price for Extremums ?", type=input.bool, defval=true)
highlightState = input(title="Highlight State ?", type=input.bool, defval=true)

atr = mult * atr(length)

longStop = (useClose ? highest(close, length) : highest(length)) - atr
longStopPrev = nz(longStop[1], longStop) 
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = (useClose ? lowest(close, length) : lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir

var color longColor = color.green
var color shortColor = color.red

longStopPlot = plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)

shortStopPlot = plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)

midPricePlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0, display=display.none, editable=false)

longFillColor = highlightState ? (dir == 1 ? longColor : na) : na
shortFillColor = highlightState ? (dir == -1 ? shortColor : na) : na
fill(midPricePlot, longStopPlot, title="Long State Filling", color=longFillColor)
fill(midPricePlot, shortStopPlot, title="Short State Filling", color=shortFillColor)


long_short = input(true, "Long-Short",type=input.bool, group="Strategy Settings")

start     = input(timestamp("2019-01-01"), "Date", type=input.time, group="Strategy Settings")
finish    = input(timestamp("2025-01-01"), "Date", type=input.time, group="Strategy Settings")   
window()  => true

slRatio=input(5, "Manuel Stop Loss Ratio", type=input.float, minval=0, group="Strategy Settings")
tpRatio=input(20, "Take Profit Ratio", type=input.float, minval=0, group="Strategy Settings")
tsStartRatio=input(10, "Trailing Stop Start Ratio", type=input.float, minval=0, group="Strategy Settings")
tsRatio=input(5, "Trailing Stop Ratio", type=input.float, minval=1, group="Strategy Settings")

lastBuyPrice = strategy.position_avg_price

diffHiPriceRatio = (high-lastBuyPrice)/lastBuyPrice*100
diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100
posHiRatio=0.0
posHiRatio:= strategy.position_size > 0 ? diffHiPriceRatio > posHiRatio[1] ? diffHiPriceRatio : posHiRatio[1] : 0

s_diffHiPriceRatio = (low-lastBuyPrice)/lastBuyPrice*100
s_diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100
s_posHiRatio=0.0
s_posHiRatio:= strategy.position_size < 0 ? s_diffLoPriceRatio < s_posHiRatio[1] ? s_diffLoPriceRatio : s_posHiRatio[1] : 0

strategy.entry("LONG", strategy.long, when = window() and buySignal)
strategy.close("LONG", when = window() and sellSignal)
strategy.close("LONG", when = diffLoPriceRatio<(slRatio*(-1)), comment="STOP-LONG")
strategy.close("LONG", when = diffHiPriceRatio>tpRatio, comment="TAKE-PROFIT-LONG")
strategy.close("LONG", when = ((posHiRatio[1]>tsStartRatio) and (posHiRatio[1]-diffHiPriceRatio)>tsRatio), comment="TRAILING-STOP-LONG")

if long_short
    strategy.entry("SHORT", strategy.short, when = window() and sellSignal)
    strategy.close("SHORT", when = window() and buySignal)
    strategy.close("SHORT", when = s_diffLoPriceRatio>(slRatio), comment="STOP-SHORT")
    strategy.close("SHORT", when = s_diffHiPriceRatio<(tpRatio*(-1)), comment="TAKE-PROFIT-SHORT")
    strategy.close("SHORT", when = ((s_posHiRatio[1]*(-1)>tsStartRatio) and ((s_posHiRatio[1]-s_diffLoPriceRatio))*(-1)>tsRatio), comment="TRAILING-STOP-SHORT")