এই কৌশলটি ক্যালম্যান ফিল্টার ব্যবহার করে দাম ট্র্যাক করে এবং স্টপ লাইন ব্যবহার করে গতিশীলভাবে স্টপ পয়েন্টগুলি সামঞ্জস্য করে যাতে স্লাইডিং স্টপ সম্ভব হয়।
এই কৌশলটি কারম্যান ফিল্টার ব্যবহার করে যা রিয়েল-টাইমে দাম ট্র্যাক করে। কারম্যান ফিল্টার দুটি সমীকরণ নিয়ে গঠিতঃ
ভবিষ্যদ্বাণী সমীকরণঃ
smooth = kf[1] + dk * sqrt(gain / 10000 * 2)
সমীকরণ আপডেটঃ
kf = smooth + velo
এর মধ্যে, dk হল পূর্বাভাস ত্রুটি, gain হল কারম্যান লাভ, এবং sensitivity হল সিদ্ধান্ত ট্র্যাকিং।
উপরন্তু, কৌশলটি মুনাফা লক করার জন্য একটি স্লাইডিং স্টপ লাইন ব্যবহার করে। প্রাথমিক স্টপ দূরত্বটি স্টপ শতাংশের একটি সেট করা মান, যেমন 2%।
যদি দাম বাড়তে থাকে, তাহলে স্টপ লাইনটিও ক্রমাগত ক্যালম্যান লাইনের কাছাকাছি চলে যায়, যেমন 0.5%। যদি দাম কমে যায় তবে স্টপ বন্ধ হয়ে যায়, আবার পজিশন খুলুন এবং প্রাথমিক স্টপ দূরত্ব সেট করুন।
আমি মনে করি, আমরা সবাই একসাথে আছি।
এইভাবে, কৌশলটি প্রবণতা অনুসারে ধীরে ধীরে মুনাফা লক করতে পারে, ভাল ঝুঁকি ব্যবস্থাপনার সাথে।
ক্যালম্যান ফিল্টার ব্যবহার করে রিয়েল-টাইমে দাম ট্র্যাক করুন এবং দ্রুত প্রতিক্রিয়া জানান।
স্লাইডিং স্টপ লাইন ব্যবহার করে মুনাফা লক করুন, ঝুঁকি ব্যবস্থাপনা কার্যকর। স্টপ লস দূরত্ব কাস্টমাইজ করা যায়।
আপনি আরো কাজ করতে পারেন অথবা শুধুমাত্র কাজ করতে পারেন।
ট্রেন্ডের উপর ভিত্তি করে, এটি ইতিবাচক বা রক্ষণাবেক্ষণমূলক ক্ষতি হতে পারে।
আপনার প্রয়োজন অনুসারে নমনীয়ভাবে স্টপ লস সেট করুন।
ক্যালম্যান ফিল্টার প্যারামিটারগুলি ভুলভাবে সেট করা হলে ট্র্যাকিং অস্থির হতে পারে।
স্লাইড পয়েন্টের ফলে স্টপ পয়েন্টটি আগে ট্রিগার হতে পারে। স্টপ দূরত্বটি যথাযথভাবে শিথিল করা যেতে পারে।
শক্তিশালী প্রবণতা বাজার স্লাইডিং স্টপ কৌশল ব্যবহার করা উচিত নয়, প্রবণতা অনুসরণ করা উচিত।
বাজারের অস্থির স্টপ পয়েন্টগুলি প্রায়শই ট্রিগার হতে পারে। স্টপ দূরত্বটি যথাযথভাবে শিথিল করা যেতে পারে, বা স্লাইডিং স্টপ ব্যবহার না করে।
ট্রেন্ডের দিকনির্দেশনা নির্ধারণের জন্য আরো কিছু সূচক ব্যবহার করা যেতে পারে।
স্টপ লিন্ডের গতির দৈর্ঘ্য বাজার ওঠানামা অনুযায়ী সামঞ্জস্য করা যায়।
মেশিন লার্নিং প্রযুক্তির প্রশিক্ষণের সাথে সর্বোত্তম ক্ষতি প্রতিরোধের প্যারামিটার যুক্ত করা যেতে পারে।
পজিশন ম্যানেজমেন্টের গতিশীলতার সাথে আরও ঝুঁকিপূর্ণ সূচক যুক্ত করা যেতে পারে।
স্লাইড স্টপ কৌশলটি একটি নির্ভরযোগ্য এবং সহজেই অনুকূলিতকরণযোগ্য কৌশল যা ক্যালম্যান ফিল্টার ব্যবহার করে দামের পরিবর্তনগুলি ট্র্যাক করে এবং স্লাইড স্টপ লাইন ব্যবহার করে মুনাফা লক করে, লাভজনকতা নিশ্চিত করার সময় ঝুঁকি নিয়ন্ত্রণ করে। এটি প্রবণতা বিচার এবং গতিশীল পজিশন ম্যানেজমেন্ট প্রযুক্তির সাথে একত্রিত হলে আরও ভাল কৌশলগত প্রভাব অর্জন করা যায়।
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 2h
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/
// © BigCoinHunter
//@version=5
// strategy(title='Loft Strategy V1', overlay=true,
// pyramiding=0, default_qty_type=strategy.fixed,
// default_qty_value=100, initial_capital=100000,
// currency=currency.USD, commission_value=0.05,
// commission_type=strategy.commission.percent,
// process_orders_on_close=true)
//-------------- fetch user inputs ------------------
gain = input.float(title="Kalman Gain:", defval=1.0, minval=1.0, maxval=5000.0, step=100.0)
src = input(defval=close, title='Source:')
stopPercentMax = input.float(title='Beginning Approach(%):', defval=2.0, minval=0.1, maxval=30.0, step=0.1)
stopPercentMin = input.float(title='Final Approach(%): ', defval=0.5, minval=0.1, maxval=30.0, step=0.1)
downStep = input.float(title='Approach Decrease Step:', defval=0.005, minval=0.0, maxval = 5, step=0.005)
tp = input.float(title="Take Profit:", defval=1.5, minval=0.0, maxval=100.0, step=0.1) * 0.01
sl = input.float(title="Stop Loss: ", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01
longEntry = input.bool(defval=true, title= 'Long Entry', inline="11")
shortEntry = input.bool(defval=true, title='Short Entry', inline="11")
//---------- backtest range setup ------------
fromDay = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input.int(defval = 2021, title = "From Year", minval = 2010)
toDay = input.int(defval = 30, title = "To Day", minval = 1, maxval = 31)
toMonth = input.int(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input.int(defval = 2022, title = "To Year", minval = 2010)
//------------ time interval setup -----------
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(toYear, toMonth, toDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
//------- define the global variables ------
enterLongComment = "ENTER LONG"
exitLongComment = "EXIT LONG"
enterShortComment = "ENTER SHORT"
exitShortComment = "EXIT SHORT"
longTPSL = "Long TP/SL"
longTP = "Long TP"
longSL = "Long SL"
shortTPSL = "Short TP/SL"
shortTP = "Short TP"
shortSL = "Short SL"
var bool long = true
var bool stoppedOutLong = false
var bool stoppedOutShort = false
var float kf = 0.0
var float velo = 0.0
//------ kalman filter calculation --------
dk = src - nz(kf[1], src)
smooth = nz(kf[1], src) + dk * math.sqrt(gain / 10000 * 2)
velo := nz(velo[1], 0) + gain / 10000 * dk
kf := smooth + velo
//--------- calculate the loft stopLoss line ---------
var stopPercent = stopPercentMax
var stopLoss = kf - kf * (stopPercent /100)
if long == true
stopLoss := kf - (kf * (stopPercent / 100))
if long[1] == true and stopLoss <= stopLoss[1]
stopLoss := stopLoss[1]
else if (long[1] == true)
stopPercent := stopPercent - downStep
if(stopPercent < stopPercentMin)
stopPercent := stopPercentMin
if(kf < stopLoss)
long := false
stopPercent := stopPercentMax
stopLoss := kf + (kf * (stopPercent / 100))
else
stopLoss := kf + (kf * (stopPercent / 100))
if long[1] == false and stopLoss >= stopLoss[1]
stopLoss := stopLoss[1]
else if(long[1] == false)
stopPercent := stopPercent - downStep
if(stopPercent < stopPercentMin)
stopPercent := stopPercentMin
if(kf > stopLoss)
long := true
stopPercent := stopPercentMax
stopLoss := kf - (kf * (stopPercent / 100))
//--------- calculate the input/output points -----------
longProfitPrice = strategy.position_avg_price * (1 + tp) // tp -> take profit percentage
longStopPrice = strategy.position_avg_price * (1 - sl) // sl -> stop loss percentage
shortProfitPrice = strategy.position_avg_price * (1 - tp)
shortStopPrice = strategy.position_avg_price * (1 + sl)
//------------------- determine buy and sell points ---------------------
buySignall = window() and long and (not stoppedOutLong)
sellSignall = window() and (not long) and (not stoppedOutShort)
//---------- execute the strategy -----------------
if(longEntry and shortEntry)
if long
strategy.entry("LONG", strategy.long, when = buySignall, comment = enterLongComment)
stoppedOutLong := true
stoppedOutShort := false
else
strategy.entry("SHORT", strategy.short, when = sellSignall, comment = enterShortComment)
stoppedOutLong := false
stoppedOutShort := true
else if(longEntry)
strategy.entry("LONG", strategy.long, when = buySignall, comment = enterLongComment)
strategy.close("LONG", when = sellSignall, comment = exitLongComment)
if long
stoppedOutLong := true
else
stoppedOutLong := false
else if(shortEntry)
strategy.entry("SHORT", strategy.short, when = sellSignall, comment = enterShortComment)
strategy.close("SHORT", when = buySignall, comment = exitShortComment)
if not long
stoppedOutShort := true
else
stoppedOutShort := false
//----------------- take profit and stop loss -----------------
if(tp>0.0 and sl>0.0)
if ( strategy.position_size > 0 )
strategy.exit(id="LONG", limit=longProfitPrice, stop=longStopPrice, comment = longTPSL)
else if ( strategy.position_size < 0 )
strategy.exit(id="SHORT", limit=shortProfitPrice, stop=shortStopPrice, comment = shortTPSL)
else if(tp>0.0)
if ( strategy.position_size > 0 )
strategy.exit(id="LONG", limit=longProfitPrice, comment = longTP)
else if ( strategy.position_size < 0 )
strategy.exit(id="SHORT", limit=shortProfitPrice, comment = shortTP)
else if(sl>0.0)
if ( strategy.position_size > 0 )
strategy.exit(id="LONG", stop=longStopPrice, comment = longSL)
else if ( strategy.position_size < 0 )
strategy.exit(id="SHORT", stop=shortStopPrice, comment = shortSL)
//------------- plot charts ---------------------
lineColor1 = long ? color.green : color.red
lineColor2 = long ? color.aqua : color.fuchsia
kalmanLine = plot(kf, color=lineColor1, linewidth=3, title = "Kalman Filter")
stopLine = plot(stopLoss, color=lineColor2, linewidth=2, title = "Stop Loss Line")