ٹرٹل ٹرینڈ حکمت عملی مشہور ٹرٹل ٹریڈنگ حکمت عملی کا ایک بہتر ورژن ہے۔ یہ تجارت کے بعد کم خطرہ والے رجحان کو نافذ کرنے کے لئے ڈبل حرکت پذیر اوسط سے پیدا ہونے والے تجارتی سگنلز کا استعمال کرتی ہے۔ اس کے معیاری اندراج اور باہر نکلنے کے قوانین تجارتی خطرات کو مؤثر طریقے سے کنٹرول کرسکتے ہیں اور مستحکم سرمائے کی ترقی کو حاصل کرسکتے ہیں۔
ٹرتل ٹرینڈ حکمت عملی 20 دن کی اونچائی ، 20 دن کی کم ، 55 دن کی اونچائی اور 55 دن کی کم کا حساب لگاتی ہے ، جس میں اے ٹی آر اشارے کے ساتھ مل کر اسٹاپ نقصان اور منافع کا ہدف طے کیا جاتا ہے۔ جب قیمت 20 دن کی اونچائی سے تجاوز کرتی ہے تو یہ طویل سگنل اور 20 دن کی کم سے کم قیمت کو توڑنے پر مختصر سگنل پیدا کرتی ہے۔ اس کے علاوہ ، اگر قیمتیں 20 دن کی اونچائی / کم سے تجاوز کرتی ہیں لیکن 55 دن کی اونچائی / کم سے تجاوز کرنے میں ناکام ہوجاتی ہیں تو اس کے علاوہ ، ایک چھلانگ میکانزم کو تجارتی سگنل کو چھوڑنے کے لئے ترتیب دیا گیا ہے۔
مارکیٹ میں داخل ہونے کے بعد ، حکمت عملی اے ٹی آر اقدار کو اسٹاپ نقصان اور پرامڈائڈنگ ہدف طے کرنے کے لئے استعمال کرتی ہے۔ جب نقصانات اسٹاپ نقصان کی سطح تک پہنچ جاتے ہیں تو یہ رک جاتا ہے اور جب منافع پرامڈائڈنگ ہدف تک پہنچ جاتا ہے تو پوزیشن کا سائز بڑھ جاتا ہے۔ اس سے انفرادی تجارتوں کے خطرات پر قابو پاتے ہوئے رجحان سازی کی منڈیوں میں منافع کی صلاحیت کو زیادہ سے زیادہ کیا جاتا ہے۔
ٹرتل ٹرینڈ حکمت عملی کا سب سے بڑا فائدہ اس کی بہترین رسک کنٹرول کی صلاحیتوں میں ہے۔ معیاری اندراج اور باہر نکلنے کے قوانین انفرادی تجارتوں کے نقصانات کو مؤثر طریقے سے کنٹرول کرسکتے ہیں۔ چھلانگ کے طریقہ کار سے مارکیٹ کے منفی حالات میں پھنسنے سے بچتا ہے۔ مستحکم اسٹاپ نقصان کی حکمت عملی بھی لگاتار نقصانات کو محدود کرتی ہے۔
اس کے علاوہ ، ٹرتل ٹرینڈ حکمت عملی متحرک طور پر اسٹاپ نقصان کو ترتیب دینے کے لئے اے ٹی آر اشارے کا استعمال کرتی ہے ، جس سے اسٹاپ نقصان کی لائن کو مارکیٹ کی اتار چڑھاؤ میں ہونے والی تبدیلیوں کے مطابق خود بخود اپنانے کے قابل بناتا ہے۔ اس سے یہ یقینی بناتا ہے کہ اسٹاپ نقصان نہ تو بہت زیادہ ڈھیلا ہے جس سے بڑے نقصانات کا سبب بنتا ہے اور نہ ہی عام مارکیٹ میں اتار چڑھاؤ کے باعث اس کو متحرک کیا جاسکتا ہے۔
آخر میں، پرامڈ میکانزم حکمت عملی کو رجحان مارکیٹوں میں منافع کو مکمل طور پر قبضہ کرنے کے قابل بناتا ہے، جس میں مسلسل سرمایہ کی ترقی کی بنیاد رکھی جاتی ہے.
ٹرتل ٹرینڈ حکمت عملی کا بنیادی خطرہ یہ ہے کہ یہ رینج سے منسلک مارکیٹوں سے فائدہ اٹھانے میں ناکام رہتا ہے۔ جب مارکیٹ طویل عرصے تک رینج میں اتار چڑھاؤ کرتی ہے تو ، اسٹاپ نقصان اکثر اس کے نتیجے میں نقصانات کا باعث بن سکتا ہے۔ نیز ، چھلانگ کے طریقہ کار سے ناکافی سگنل پیدا ہوسکتے ہیں اور اس طرح ممکنہ تجارتی مواقع سے محروم ہوجاتے ہیں۔
اس کے علاوہ ، تکنیکی اشارے پر زیادہ انحصار بنیادی تجزیہ کو نظرانداز کرتا ہے۔ یہ پالیسی کی بڑی تبدیلیوں کا پتہ لگانے میں ناکام ہوسکتا ہے اور غیر ضروری نقصانات کا سبب بن سکتا ہے۔
Turtle Trend حکمت عملی کو مندرجہ ذیل پہلوؤں میں بہتر بنایا جاسکتا ہے:
مختلف مارکیٹوں میں تجارت کی تعدد بڑھانے کے لئے اتار چڑھاؤ کے اشارے کو یکجا کرکے چھلانگ کے طریقہ کار کی حساسیت کو ایڈجسٹ کریں۔
بنیادی سگنلز کو فلٹر کے طور پر شامل کریں تاکہ غیر معمولی واقعات کی وجہ سے اسٹاپ نقصان سے متاثر ہونے سے بچیں۔
ATR پیرامیٹر کی ترتیبات کو بہتر بنانے کے لئے سٹاپ نقصان لائن کو اصل اتار چڑھاؤ کے قریب سے زیادہ قریب سے رہنا.
نقصان کے بعد غیر موثر پل بیک میں داخل ہونے سے بچنے کے لئے حجم کے اشارے کو یکجا کریں.
/*backtest start: 2024-01-29 00:00:00 end: 2024-02-28 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("TURTLE STRATEGY", precision=2, overlay=true, initial_capital=1000, commission_type=strategy.commission.percent, commission_value=0.18, slippage=3, pyramiding=5, close_entries_rule="ANY", margin_long=100, margin_short=100) //------------------------------TOOL TIPS--------------------------------// t1 = "Percentage of the account the trader is willing to lose. This percentage is used to define the position size based on previous gains or losses. Turtle traders default to 1%." t2 = "ATR Length" t3 = "ATR Multiplier to fix the Stop Loss" t4 = "Pyramiding : ATR Multiplier to set a profit target to increase position size" t5 = "System 1 enter long if there is a new high after this selected period of time" t6 = "System 2 enter long if there is a new high after this selected period of time" t7 = "Exit Long from system 1 if there is a new low after this selected period of time" t8 = "Exit Long from system 2 if there is a new low after this selected period of time" t9 = "System 1 enter short if there is a new low after this selected period of time" t10 = "System 2 enter short if there is a new low after this selected period of time" t11 = "Exit short from system 1 if there is a new high after this selected period of time" t12 = "Exit short from system 2 if there is a new high after this selected period of time" //----------------------------------------FUNCTIONS---------------------------------------// //@function Displays text passed to `txt` when called. debugLabel(txt, color) => label.new(bar_index, high, text=txt, color=color, style=label.style_label_lower_right, textcolor=color.black, size=size.small) //@function which looks if the close date of the current bar falls inside the date range inBacktestPeriod(start, end) => (time >= start) and (time <= end) //---------------------------------------USER INPUTS--------------------------------------// //Risk Management and turtle system input percentage_to_risk = input.float(1, "Risk % of capital", maxval=100, minval=0, group="Turtle Parameters", tooltip=t1) atr_period = input.int(20, "ATR period", minval=1, group="Turtle Parameters", tooltip=t2) stop_N_multiplier = input.float(1.5, "Stop ATR", minval=0.1, group="Turtle Parameters", tooltip=t3) pyramid_profit = input.float(0.5, "Pyramid Profit", minval=0.01, group="Turtle Parameters", tooltip=t4) S1_long = input.int(20, "S1 Long", minval=1, group="Turtle Parameters", tooltip=t5) S2_long = input.int(55, "S2 Long", minval=1, group="Turtle Parameters", tooltip=t6) S1_long_exit = input.int(10, "S1 Long Exit", minval=1, group="Turtle Parameters", tooltip=t7) S2_long_exit = input.int(20, "S2 Long Exit", minval=1, group="Turtle Parameters", tooltip=t8) S1_short = input.int(15, "S1 Short", minval=1, group="Turtle Parameters", tooltip=t9) S2_short = input.int(55, "S2 Short", minval=1, group="Turtle Parameters", tooltip=t10) S1_short_exit = input.int(7, "S1 Short Exit", minval=1, group="Turtle Parameters", tooltip=t11) S2_short_exit = input.int(20, "S2 Short Exit", minval=1, group="Turtle Parameters", tooltip=t12) //Backtesting period startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period") endDate = input(title="End Date", defval=timestamp("1 July 2034 00:00:00"), group="Backtesting Period") //----------------------------------VARIABLES INITIALISATION-----------------------------// //Turtle variables atr = ta.atr(atr_period) var float buy_price_long = na var float buy_price_short = na var float stop_loss_long = na var float stop_loss_short = na float account = na //Entry variables day_high_syst1 = ta.highest(high, S1_long) day_low_syst1 = ta.lowest(low, S1_short) day_high_syst2 = ta.highest(high, S2_long) day_low_syst2 = ta.lowest(low, S2_short) var bool skip = false var bool unskip_buffer_long = false var bool unskip_buffer_short = false //Exit variables exit_long_syst1 = ta.lowest(low, S1_long_exit) exit_short_syst1 = ta.highest(high, S1_short_exit) exit_long_syst2 = ta.lowest(low, S2_long_exit) exit_short_syst2 = ta.highest(high, S2_short_exit) float exit_signal = na //Backtesting period bool inRange = na //------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------// //Checking if the date belong to the range inRange := true strategy.initial_capital = 50000 //Checking if the current equity is higher or lower than the initial capital to adjusted position size if strategy.equity - strategy.openprofit < strategy.initial_capital account := (strategy.equity-strategy.openprofit)*(strategy.equity-strategy.openprofit)/strategy.initial_capital else account := strategy.equity - strategy.openprofit //Checking if we close all trades in case where we exit the backtesting period if strategy.position_size!=0 and not inRange strategy.close_all() debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116)) //--------------------------------------SKIP MANAGEMENT------------------------------------// //Checking if a long signal has been skiped and system2 is not triggered if skip and high>day_high_syst1[1] and high<day_high_syst2[1] unskip_buffer_long := true //Checking if a short signal has been skiped and system2 is not triggered if skip and low<day_low_syst1[1] and low>day_low_syst2[1] unskip_buffer_short := true //Checking if current high is lower than previous 20_day_high after a skiped long signal to set skip to false if unskip_buffer_long if high<day_high_syst1[1] skip := false unskip_buffer_long := false //Checking if current low is higher than previous 20_day_low after a skiped short signal to set skip to false if unskip_buffer_short if low>day_low_syst1[1] skip := false unskip_buffer_short := false //Checking if we have an open position to reset skip and unskip buffers if strategy.position_size!=0 and skip skip := false unskip_buffer_long := false unskip_buffer_short := false //--------------------------------------------ENTRY CONDITIONS--------------------------------------------------// //We calculate the position size based on turtle calculation unit = (percentage_to_risk/100)*account/atr*syminfo.pointvalue //Long order for system 1 if not skip and not (strategy.position_size>0) and inRange and unit>0 strategy.cancel("Long Syst 2") //We check that position size doesn't exceed available equity if unit*day_high_syst1>account unit := account/day_high_syst1 stop_loss_long := day_high_syst1 - stop_N_multiplier*atr //We adjust SL if it's greater than 10% of trade value and fix it to 10% if stop_loss_long < day_high_syst1*0.9 stop_loss_long := day_high_syst1*0.9 strategy.order("Long Syst 1", strategy.long, unit, stop=day_high_syst1) buy_price_long := day_high_syst1 //Long order for system 2 if skip and not (strategy.position_size>0) and inRange and unit>0 //We check that position size doesn't exceed available equity if unit*day_high_syst2>account unit := account/day_high_syst2 stop_loss_long := day_high_syst2 - stop_N_multiplier*atr //We adjust SL if it's greater than 10% of trade value and fix it to 10% if stop_loss_long < day_high_syst2*0.9 stop_loss_long := day_high_syst2*0.9 strategy.order("Long Syst 2", strategy.long, unit, stop=day_high_syst2) buy_price_long := day_high_syst2 //Short order for system 1 if not skip and not (strategy.position_size<0) and inRange and unit>0 strategy.cancel("Short Syst 2") //We check that position size doesn't exceed available equity if unit*day_low_syst1>account unit := account/day_low_syst1 stop_loss_short := day_low_syst1 + stop_N_multiplier*atr //We adjust SL if it's greater than 10% of trade value and fix it to 10% if stop_loss_short > day_low_syst1*1.1 stop_loss_short := day_low_syst1*1.1 strategy.order("Short Syst 1", strategy.short, unit, stop=day_low_syst1) buy_price_short := day_low_syst1 //Short order for system 2 if skip and not (strategy.position_size<0) and inRange and unit>0 //We check that position size doesn't exceed available equity if unit*day_low_syst2>account unit := account/day_low_syst2 stop_loss_short := day_low_syst2 + stop_N_multiplier*atr //We adjust SL if it's greater than 10% of trade value and fix it to 10% if stop_loss_short > day_low_syst2*1.1 stop_loss_short := day_low_syst2*1.1 strategy.order("Short Syst 2", strategy.short, unit, stop=day_low_syst2) buy_price_short := day_low_syst2 //-------------------------------PYRAMIDAL------------------------------------// //Pyramid for long orders if close > buy_price_long + (pyramid_profit*atr) and strategy.position_size>0 //We calculate the remaining capital remaining_capital = account - strategy.position_size*strategy.position_avg_price*(1-0.0018) //We calculate units to add to the long position units_to_add = (percentage_to_risk/100)*remaining_capital/atr*syminfo.pointvalue if remaining_capital > units_to_add and units_to_add>0 //We set the new Stop loss stop_loss_long := stop_loss_long + pyramid_profit*atr strategy.entry("Pyramid Long", strategy.long, units_to_add) buy_price_long := close //Pyramid for short orders if close < buy_price_short - (pyramid_profit*atr) and strategy.position_size<0 //We calculate the remaining capital remaining_capital = account + strategy.position_size*strategy.position_avg_price*(1-0.0018) //We calculate units to add to the short position units_to_add = (percentage_to_risk/100)*remaining_capital/atr*syminfo.pointvalue if remaining_capital > units_to_add and units_to_add>0 //We set the new Stop loss stop_loss_short := stop_loss_short - pyramid_profit*atr strategy.entry("Pyramid Short", strategy.short, units_to_add) buy_price_short := close //----------------------------EXIT ORDERS-------------------------------// //Checking if exit_long_syst1 is higher than stop_loss_long if strategy.opentrades.entry_id(0)=="Long Syst 1" if exit_long_syst1[1] > stop_loss_long exit_signal := exit_long_syst1[1] else exit_signal := stop_loss_long //Checking if exit_long_syst2 is higher than stop_loss_long if strategy.opentrades.entry_id(0)=="Long Syst 2" if exit_long_syst2[1] > stop_loss_long exit_signal := exit_long_syst2[1] else exit_signal := stop_loss_long //Checking if exit_short_syst1 is lower than stop_loss_short if strategy.opentrades.entry_id(0)=="Short Syst 1" if exit_short_syst1[1] < stop_loss_short exit_signal := exit_short_syst1[1] else exit_signal := stop_loss_short //Checking if exit_short_syst2 is lower than stop_loss_short if strategy.opentrades.entry_id(0)=="Short Syst 2" if exit_short_syst2[1] < stop_loss_short exit_signal := exit_short_syst2[1] else exit_signal := stop_loss_short //If the exit order is configured to close the position at a profit, we set 'skip' to true (we substract commission) if strategy.position_size*exit_signal>strategy.position_size*strategy.position_avg_price*(1-0.0018) strategy.cancel("Long Syst 1") strategy.cancel("Short Syst 1") skip := true if strategy.position_size*exit_signal<=strategy.position_size*strategy.position_avg_price*(1-0.0018) skip := false //We place stop exit orders if strategy.position_size > 0 strategy.exit("Exit Long", stop=exit_signal) if strategy.position_size < 0 strategy.exit("Exit Short", stop=exit_signal) //------------------------------PLOTTING ELEMENTS-------------------------------// plotchar(atr, "ATR", "", location.top, color.rgb(131, 5, 83)) //Plotting enter threshold plot(day_high_syst1[1], "20 day high", color.rgb(118, 217, 159)) plot(day_high_syst2[1], "55 day high", color.rgb(4, 92, 53)) plot(day_low_syst1[1], "20 day low", color.rgb(234, 108, 108)) plot(day_low_syst2[1], "55 day low", color.rgb(149, 17, 17)) //Plotting Exit Signal plot(exit_signal, "Exit Signal", color.blue, style=plot.style_circles) //Plotting our position exit_long_syst2_plot = plot(exit_long_syst2[1], color=na) day_high_syst2_plot = plot(day_high_syst2[1], color=na) exit_short_syst2_plot = plot(exit_short_syst2[1], color=na) day_low_syst2_plot = plot(day_low_syst2[1], color=na) fill(exit_long_syst2_plot, day_high_syst2_plot, color=strategy.position_size>0 ? color.new(color.lime, 90) : na) fill(exit_short_syst2_plot, day_low_syst2_plot, color=strategy.position_size<0 ? color.new(color.red, 90) : na)