এই কৌশলটি একটি ট্রেইলিং স্টপ লস প্রক্রিয়া ব্যবহার করে যা দামের ওঠানামা পরিসরের উপর ভিত্তি করে গতিশীলভাবে স্টপ লসকে সরিয়ে দেয়, গতিশীল স্টপ অর্জন করে। প্রাইস একটি মুনাফা লক্ষ্যমাত্রায় পৌঁছানোর পরে ট্রেইলিং স্টপ সক্রিয় হয়, অকাল স্টপ আউট এড়ানোর সময় মুনাফা রক্ষা করার লক্ষ্যে। এটি সাধারণ স্টপ লস কৌশলগুলিতে উন্নতি করে।
ট্রেন্ডের দিকনির্দেশনা অনুযায়ী ডাবল এমএ ক্রসওভারের ভিত্তিতে কৌশলটি প্রবেশ করে।
উদ্ভাবনটি স্টপ লস ডিজাইনে রয়েছে:
একটি স্টপ ট্রিগার লাইন সেট করা হয়। মূল্য এই লাইন ভঙ্গ করার পর ট্রেলিং স্টপ শুরু হয়।
স্টপ লস লাইন শতাংশ প্যারামিটারের উপর ভিত্তি করে ট্রেইল করে। উদাহরণস্বরূপ, 3% ট্রেইলিং মানে সর্বশেষ সর্বনিম্নের 3% নিচে।
পজিশনটি বন্ধ হয়ে যায় যখন দামটি স্টপ লস লাইনে পৌঁছায়।
এটি নিশ্চিত করে যে স্টপ স্বয়ংক্রিয়ভাবে মুনাফা অনুসরণ করবে, যখন মুনাফা এখনও ভাল থাকে তখন বন্ধ হওয়ার সম্ভাবনা হ্রাস করে।
নিম্নলিখিত উপায়ে ঝুঁকি কমাতে পারেঃ
কৌশলটি নিম্নলিখিতগুলির মাধ্যমে উন্নত করা যেতে পারেঃ
ডাবল এমএ সময়কালের অপ্টিমাইজেশন
ট্রিগার লাইন অপ্টিমাইজ বা অপসারণ
সরাসরি ট্রেলিং শুরু করুন অথবা বিভিন্ন পণ্যের জন্য বিভিন্ন মান ব্যবহার করুন
বিভিন্ন ট্রেলিং শতাংশ মান পরীক্ষা করা
বিভিন্ন পণ্যের জন্য সর্বোত্তম মান খুঁজুন
পুনরায় প্রবেশের নিয়ম যোগ করা
স্টপগুলি আঘাত করার পরে পুনরায় প্রবেশের শর্তগুলি সেট করুন
অস্থিরতার দ্বারা স্টপ কঠোরতা সামঞ্জস্য করা
উচ্চতর অস্থিরতার পরিবেশে বৃহত্তর স্টপ
এই কৌশলটি সক্রিয় করার আগে একটি ট্রিগার লাইন সহ একটি ট্রেলিং শতাংশ স্টপ ব্যবহার করে। এই গতিশীল প্রক্রিয়াটি লাভের সুরক্ষা এবং বাজারের চলাচলের উপর ভিত্তি করে অপ্রয়োজনীয় স্টপগুলি এড়ানোর ভারসাম্য বজায় রাখে। তবে বিভিন্ন পণ্যের জন্য পরামিতিগুলির অপ্টিমাইজেশান প্রয়োজন, পাশাপাশি নির্ভুলতা উন্নত করতে এন্ট্রিগুলিতে অতিরিক্ত ফিল্টার। পুনরায় এন্ট্রিগুলি অকাল বন্ধ হওয়ার পরে অনুপস্থিত প্রবণতা এড়াতেও সহায়তা করে। অভিযোজনযোগ্যতার জন্য অবিচ্ছিন্ন উন্নতি প্রয়োজন।
/*backtest start: 2022-09-14 00:00:00 end: 2023-09-20 00:00:00 period: 2d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //@author=Daveatt SystemName = "BEST Trailing Stop Strategy" TradeId = "BEST" InitCapital = 100000 InitPosition = 100 InitCommission = 0.075 InitPyramidMax = 1 CalcOnorderFills = true CalcOnTick = true DefaultQtyType = strategy.fixed DefaultQtyValue = strategy.fixed Precision = 2 Overlay=true // strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay, // pyramiding=InitPyramidMax, initial_capital=InitCapital, default_qty_type=DefaultQtyType, default_qty_value=InitPosition, commission_type=strategy.commission.percent, // commission_value=InitCommission, calc_on_order_fills=CalcOnorderFills, calc_on_every_tick=CalcOnTick, precision=2) src = close // Calculate moving averages fastSMA = sma(close, 15) slowSMA = sma(close, 45) // Calculate trading conditions enterLong = crossover(fastSMA, slowSMA) enterShort = crossunder(fastSMA, slowSMA) // trend states since_buy = barssince(enterLong) since_sell = barssince(enterShort) buy_trend = since_sell > since_buy sell_trend = since_sell < since_buy change_trend = (buy_trend and sell_trend[1]) or (sell_trend and buy_trend[1]) //plot(buy_trend ? 1 : 0, title='buy_trend', transp=100) //plot(sell_trend ? 1 : 0, title='sell_trend', transp=100) // get the entry price entry_price = valuewhen(enterLong or enterShort, close, 0) // Plot moving averages plot(series=fastSMA, color=color.teal) plot(series=slowSMA, color=color.orange) // Plot the entries plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small) plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small) /////////////////////////////// //======[ Trailing STOP ]======// /////////////////////////////// // use SL? useSL = input(true, "Use stop Loss") // Configure trail stop level with input StopTrailPerc = input(title="Trail Loss (%)", type=input.float, minval=0.0, step=0.1, defval=3) * 0.01 // Will trigger the take profit trailing once reached use_SL_Trigger = input(true, "Use stop Loss Trigger") StopTrailTrigger = input(2.0, "SL Trigger (%)",minval=0,step=0.5,type=input.float) * 0.01 StopLossPriceTrigger = 0.0 StopLossPriceTrigger := if (use_SL_Trigger) if buy_trend entry_price * (1 + StopTrailTrigger) else entry_price * (1 - StopTrailTrigger) else -1 var SL_Trigger_Long_HIT = false SL_Trigger_Long_HIT := useSL and use_SL_Trigger and buy_trend and high >= StopLossPriceTrigger ? true : SL_Trigger_Long_HIT[1] var SL_Trigger_Short_HIT = false SL_Trigger_Short_HIT := useSL and use_SL_Trigger and sell_trend and low <= StopLossPriceTrigger ? true : SL_Trigger_Short_HIT[1] display_long_SL_trigger = useSL and buy_trend and use_SL_Trigger and SL_Trigger_Long_HIT == false and StopLossPriceTrigger != -1 display_short_SL_trigger = useSL and sell_trend and use_SL_Trigger and SL_Trigger_Short_HIT == false and StopLossPriceTrigger != -1 display_SL_trigger = display_long_SL_trigger or display_short_SL_trigger plot(display_SL_trigger ? StopLossPriceTrigger : na, title='SLPriceTrigger', transp=0, color=color.maroon, style=plot.style_circles, linewidth=3) // Determine trail stop loss prices longStopPrice = 0.0, shortStopPrice = 0.0 longStopPrice := if useSL and buy_trend stopValue = low * (1 - StopTrailPerc) max(stopValue, longStopPrice[1]) else 0 shortStopPrice := if useSL and sell_trend stopValue = high * (1 + StopTrailPerc) min(stopValue, shortStopPrice[1]) else 999999 ////////////////////////////////////////////////////////////////////////////////////////// //*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS ***// ////////////////////////////////////////////////////////////////////////////////////////// cond_long_stop_loss_hit = useSL and buy_trend and crossunder(low, longStopPrice[1]) and (SL_Trigger_Long_HIT or use_SL_Trigger == false) cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1]) and (SL_Trigger_Short_HIT or use_SL_Trigger == false) // Plot stop loss values for confirmation plot(series=useSL and buy_trend and low >= longStopPrice and (SL_Trigger_Long_HIT or use_SL_Trigger == false) ? longStopPrice : na, color=color.fuchsia, style=plot.style_cross, linewidth=2, title="Long Trail Stop") plot(series=useSL and sell_trend and high <= shortStopPrice and (SL_Trigger_Short_HIT or use_SL_Trigger == false) ? shortStopPrice : na, color=color.fuchsia, style=plot.style_cross, linewidth=2, title="Short Trail Stop") close_long = cond_long_stop_loss_hit close_short = cond_short_stop_loss_hit // Submit entry orders strategy.entry(TradeId + " L", long=true, when=enterLong) strategy.close(TradeId + " L", when=close_long) //if (enterShort) strategy.entry(TradeId + " S", long=false, when=enterShort) strategy.close(TradeId + " S", when=close_short) if change_trend SL_Trigger_Long_HIT := false SL_Trigger_Short_HIT := false