اس مضمون میں بنیادی طور پر اسٹوکاسٹک آر ایس آئی اشارے پر مبنی ایک مومنٹم آسکیلیشن ٹریڈنگ حکمت عملی کی وضاحت کی گئی ہے۔ یہ حکمت عملی مختصر سائیکل تکنیکی اشارے (جیسے 30 منٹ) کو اپناتی ہے تاکہ اس بات پر مبنی تجارتی فیصلے کیے جاسکیں کہ آیا اسٹوکاسٹک آر ایس آئی زیادہ خرید / زیادہ فروخت والے علاقے میں داخل ہوتا ہے۔ دیگر مومنٹم حکمت عملیوں کے مقابلے میں ، یہ حکمت عملی مختصر مدت کے مارکیٹ کے آسکیلیشن کو زیادہ درست طریقے سے پکڑنے کے لئے آر ایس آئی اور اسٹوکاسٹک دونوں اشارے کے فوائد کو یکجا کرتی ہے۔
حکمت عملی کا بنیادی اشارے اسٹوکاسٹک آر ایس آئی ہے۔ اسٹوکاسٹک آر ایس آئی کا حساب کتاب کا فارمولا یہ ہے:
اسٹوکاسٹک RSI = (RSI - RSI کم) / (RSI اعلی - RSI کم) * 100
جہاں RSI کا حساب lengthRSI پیرامیٹر (ڈیفالٹ 12) کا استعمال کرتے ہوئے کیا جاتا ہے ، اور اسٹوکاسٹک RSI کا حساب lengthStoch پیرامیٹر (ڈیفالٹ 12) کا استعمال کرتے ہوئے کیا جاتا ہے۔
جب اسٹوکاسٹک آر ایس آئی جامنی رنگ کے بھرے علاقے سے زیادہ ہے، تو یہ oversold area ہے، پھر مختصر ہو؛ جب اسٹوکاسٹک آر ایس آئی جامنی رنگ کے بھرے علاقے سے کم ہے، تو یہ oversold area ہے، پھر طویل ہو.
اس کے علاوہ ، یہ حکمت عملی حرکت پذیر اوسط فلٹر کی شرط بھی طے کرتی ہے۔ صرف اس وقت جب تیز EMA سست EMA سے زیادہ ہو تو آپ ایک لمبی پوزیشن کھول سکتے ہیں۔ صرف اس وقت جب تیز EMA سست EMA سے کم ہو تو آپ مختصر پوزیشن کھول سکتے ہیں۔ اس سے مخالف رجحان کی تجارت سے گریز ہوتا ہے۔
ایک واحد RSI حکمت عملی کے مقابلے میں، یہ حکمت عملی اسٹوکاسٹک اشارے کو زیادہ واضح طور پر overbought / oversold علاقوں کی شناخت کرنے کے لئے یکجا کرتی ہے، اس طرح سگنل کی وشوسنییتا کو بہتر بناتا ہے.
ایک واحد اسٹوکاسٹک حکمت عملی کے مقابلے میں ، یہ حکمت عملی اسٹوکاسٹک کے ان پٹ ڈیٹا ماخذ کے طور پر آر ایس آئی کا استعمال کرتی ہے ، جو کچھ شور کو فلٹر کرسکتی ہے اور سگنل کو زیادہ قابل اعتماد بنا سکتی ہے۔
چلتی اوسط فلٹر کی حالت کو مؤثر طریقے سے مخالف رجحان کی پوزیشنوں کی تعمیر سے بچنے کے لئے مقرر کیا گیا ہے، اس طرح غیر ضروری نقصانات کو کم کرنا.
پوزیشن ہولڈنگ ٹائم ڈیلے کو غلط بریک آؤٹ سے روکنے کے لیے سیٹ کیا گیا ہے۔
یہ حکمت عملی بنیادی طور پر مختصر دورانیے کے اشارے استعمال کرتی ہے، لہذا یہ صرف قلیل مدتی کارروائیوں کے لئے موزوں ہے اور طویل مدتی میں اچھی کارکردگی کا مظاہرہ نہیں کرسکتا ہے۔
اسٹوکاسٹک آر ایس آئی اشارے میں خود ایک خاص تاخیر ہے اور قلیل مدتی میں قیمتوں میں شدید تبدیلیوں کے بعد سگنل کو یاد کر سکتے ہیں۔
اتار چڑھاؤ والے بازاروں میں ، اسٹوکاسٹک آر ایس آئی زیادہ سے زیادہ خریدی / زیادہ فروخت شدہ علاقوں میں متعدد دخول پیدا کرسکتا ہے ، جس سے زیادہ تجارت اور لین دین کی لاگت میں اضافہ ہوسکتا ہے۔
اسٹوکاسٹک آر ایس آئی کی لمبائی، K اور D اقدار کو مزید بہتر بنانے کے لئے مختلف پیرامیٹر مجموعوں کی جانچ کی جاسکتی ہے۔
مختلف آر ایس آئی لمبائی پیرامیٹرز کو زیادہ مناسب آر ایس آئی سائیکل تلاش کرنے کے لئے ٹیسٹ کیا جا سکتا ہے.
سگنل کی درستگی کو مزید بہتر بنانے کے لئے دوسرے اشارے کے ساتھ مل کر کوشش کریں ، جیسے ایم اے سی ڈی ، بولنگر بینڈ وغیرہ۔
مختلف پوزیشن تھام تاخیر کے پیرامیٹرز کو ٹیسٹ کریں تاکہ زیادہ مناسب باہر نکلنے کا وقت تلاش کیا جاسکے۔
اس مضمون میں اسٹوکاسٹک آر ایس آئی اشارے پر مبنی رفتار کی حکمت عملی کے تعمیراتی اصولوں ، فوائد ، خطرات اور اصلاح کے نظریات کی تفصیلات دی گئی ہیں۔ سنگل اشارے کی حکمت عملی کے مقابلے میں ، یہ حکمت عملی ریورس ٹریڈنگ کے لئے مارکیٹ میں قلیل مدتی اوور بک / اوور سیلڈ مظاہر کو زیادہ واضح اور قابل اعتماد طریقے سے شناخت کرنے کے لئے آر ایس آئی اور اسٹوکاسٹک دونوں کی طاقتوں کا استعمال کرتی ہے۔ پیرامیٹر کی اصلاح اور اشارے کے مجموعوں کے ذریعہ کارکردگی میں مزید بہتری کی توقع کی جاسکتی ہے۔
/*backtest start: 2023-11-25 00:00:00 end: 2023-12-25 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/ // © Drun30 (Federico Magnani) //@version=4 //STRATEGIA PRINCIPALE capitaleIniziale=10000 var sizeordineInit= 50 // → % di capitale investita per ogni trade var deltaSize = 25 // → delta% di capitale investito se trade precedente è stato in perdita var sizeLimite = 100 //il trade non userà mai questa percentuale di capitale investito var sizeordine = sizeordineInit //Parametri ottimali 30 min usiShort=false usiLong=true ipercomprato=85.29 ipervenduto=30.6 // strategy("Momentum Strategy (V7.B.4)", initial_capital=capitaleIniziale, currency="USD", default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.1, slippage = 5, default_qty_value=sizeordineInit, overlay=false, pyramiding=0) backtest = input(title="------------------------Backtest Period------------------------", defval = false) start = timestamp(input(2020, "start year"), input(1, "start month"), input(1, "start day"), 00, 00) end = timestamp(input(0, "end year"), input(0, "end month"), input(0, "end day"), 00, 00) siamoindata=time > start?true:false if end > 0 siamoindata:=time > start and time <= end?true:false basicParameters = input(title="------------------------Basic Parameters------------------------", defval = false) smoothK = input(3, minval=1) smoothD = input(6, minval=1) lengthRSI = input(12, minval=1) src = input(close, title="RSI Source") rsi1 = rsi(src, lengthRSI) lengthStoch = input(12, minval=1) k = ema(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = ema(k, smoothD) altezzaipercomprato= input(ipercomprato, title="Overbought Height", minval=1, type=input.float) altezzaipervenduto= input(ipervenduto, title="Oversold Height", minval=1,type=input.float) BarsDelay = input(6,title="Bars delay",minval=0) GambleSizing = input(true, title = "Gamble Sizing?",type=input.bool) gambleAdd = input(deltaSize,title="Gamble Add (%)",minval=0,type=input.integer) gambleLimit = input(sizeLimite,title="Gamble MAX (%)",minval=0,type=input.integer) if GambleSizing and strategy.closedtrades[0]>strategy.closedtrades[1] if strategy.losstrades[0]>strategy.losstrades[1] and sizeordine<gambleLimit sizeordine:=sizeordine+gambleAdd if strategy.wintrades[0]>strategy.wintrades[1] sizeordine:=sizeordineInit periodomediamobile_fast = input(1, title="Fast EMA length",minval=1) periodomediamobile_slow = input(60, title="Slow EMA length",minval=1) plot(k, color=color.blue) plot(d, color=color.orange) h0 = hline(altezzaipercomprato) h1 = hline(altezzaipervenduto) fill(h0, h1, color=color.purple, transp=80) // n=input(Vicinanzadalcentro,title="Vicinanza dal centro",minval=0) //sarebbe il livello di D in cui si acquista o si vende, maggiore è la vicinanza maggiore sarà la frequenza dei trades, SE 0 è DISABILITATO // siamoinipervenduto= d<=altezzaipervenduto and d<=d[n] and d>d[1]?true:false //and d<d[3] and d>d[1] // siamoinipercomprato= d>=altezzaipercomprato and d>=d[n] and d<d[1]?true:false //and d>d[3] and d<d[1] goldencross = crossover(k,d) deathcross = crossunder(k,d) // METTI VARIABILE IN CUI AVVIENE CROSSOVER O CROSSUNDER valoreoro = valuewhen(goldencross,d,0) valoremorte = valuewhen(deathcross,d,0) siamoinipervenduto = goldencross and valoreoro<=altezzaipervenduto?true:false//d<=altezzaipervenduto?true:false siamoinipercomprato = deathcross and valoremorte>=altezzaipercomprato?true:false//d>=altezzaipercomprato?true:false long_separator = input(title="------------------------LONG------------------------", defval = usiLong) sl_long_inp = input(10, title="Stop Loss LONG %", type=input.float) tp_long_inp = input(8, title="Take Profit LONG %",type=input.float) stop_level_long = strategy.position_avg_price * (1 - (sl_long_inp/100)) //strategy.position_avg_price corrisponde al prezzo con cui si è aperta la posizione take_level_long = strategy.position_avg_price * (1 + (tp_long_inp/100)) //BINANCE JSON_long = 'OPEN LONG: PUT THE JSON HERE FOR THE API CALL' JSON_chiusura = 'CLOSE POSITION: PUT THE JSON HERE FOR THE API CALL' webhookLong = JSON_long webhookClose= JSON_chiusura trendFilterL = input(title="TREND FILTER LONG?", defval = true) EMAfast=ema(close,periodomediamobile_fast) EMAslow=ema(close,periodomediamobile_slow) siamoinuptrend_ema=EMAfast>EMAslow?true:false //close>=EMAfast and EMAfast>EMAslow siamoinuptrend = siamoinuptrend_ema // CondizioneAperturaLong = siamoinipervenduto and siamoindata // and siamoinuptrend CondizioneAperturaLong = siamoinipervenduto and siamoindata and long_separator if trendFilterL CondizioneAperturaLong := siamoinipervenduto and siamoindata and long_separator and siamoinuptrend CondizioneChiusuraLong = siamoinipercomprato and siamoindata possiamoAprireLong=0 if trendFilterL and siamoinuptrend possiamoAprireLong:=5 plot(possiamoAprireLong,color=color.green) sonPassateLeBarreG = barssince(CondizioneAperturaLong) == BarsDelay?true:false sonPassateLeBarreD = barssince(CondizioneChiusuraLong) == BarsDelay?true:false haiUnLongAncoraAperto = false haiUnLongAncoraAperto := strategy.position_size>0?true:false // Se l'ultimo valore della serie "CondizioneAperturaLong" è TRUE, allora hai un long ancora aperto // Se l'ultimo valore della serie "CondizioneAperturaLong" è FALSE, allora: // Se l'ultimo valore della serie "CondizioneChiusuraLong" è TRUE, allora NON hai un long ancora aperto // Se l'ultimo valore della serie "CondizioneChiusuraLong" è FALSE, allora restituisce l'ultimo valore della serie "haiUnLongAncoraAperto" haiUnLongAncoraAperto_float = if(haiUnLongAncoraAperto==true) 10 else 0 plot(haiUnLongAncoraAperto_float,color=color.red) //FInché la linea rossa si trova a livello "1" allora c'è un ordine long in corso quantita = (sizeordine/100*(capitaleIniziale+strategy.netprofit))/valuewhen(haiUnLongAncoraAperto==false and CondizioneAperturaLong,close,0) plot(sizeordine,color=color.purple, linewidth=3) if strategy.position_size<=0 and CondizioneAperturaLong //and sonPassateLeBarreG and haiUnLongAncoraAperto==false strategy.opentrades==0 strategy.entry("Vamonos",strategy.long, alert_message=webhookLong, comment="OPEN LONG", qty=quantita) if strategy.position_size>0 //and sonPassateLeBarreD // and CondizioneChiusuraLong if siamoinuptrend == true and sonPassateLeBarreD strategy.close("Vamonos", alert_message=webhookClose, comment="CLOSE LONG") else if siamoinuptrend == false and CondizioneChiusuraLong strategy.close("Vamonos", alert_message=webhookClose, comment="CLOSE LONG") if strategy.position_size>0 and siamoindata strategy.exit("Vamonos", stop=stop_level_long, limit=take_level_long, comment="CLOSE LONG (LIMIT/STOP)") short_separator = input(title="------------------------SHORT------------------------", defval = usiShort) sl_short_inp = input(20, title="Stop Loss SHORT %") tp_short_inp = input(35, title="Take Profit SHORT %") stop_level_short = strategy.position_avg_price * (1 + (sl_short_inp/100)) take_level_short= strategy.position_avg_price * (1 - (tp_short_inp/100)) // BINANCE JSON_short = 'OPEN SHORT: PUT THE JSON HERE FOR THE API CALL' webhookShort = JSON_short trendFilterS = input(title="TREND FILTER SHORT?", defval = true) siamoindowntrend_ema=EMAfast<EMAslow?true:false //close<=EMAfast and EMAfast<EMAslow siamoindowntrend=siamoindowntrend_ema CondizioneAperturaShort = short_separator and siamoinipercomprato and siamoindata if trendFilterS CondizioneAperturaShort:=short_separator and siamoinipercomprato and siamoindata and siamoindowntrend CondizioneChiusuraShort = siamoinipervenduto and siamoindata sonPassateLeBarreGs = barssince(CondizioneAperturaShort) == BarsDelay?true:false sonPassateLeBarreDs = barssince(CondizioneChiusuraShort) == BarsDelay?true:false haiUnoShortAncoraAperto = false haiUnoShortAncoraAperto := strategy.position_size<0?true:false haiUnoShortAncoraAperto_float = if(haiUnoShortAncoraAperto==true) 15 else 0 plot(haiUnoShortAncoraAperto_float,color=color.purple) //FInché la linea viola si trova a livello "2" allora c'è un ordine short in corso if CondizioneAperturaShort and strategy.position_size>=0 //and haiUnoShortAncoraAperto==false strategy.entry("Andale",strategy.short,alert_message=webhookShort, comment="OPEN SHORT") if strategy.position_size<0 //and sonPassateLeBarreD // and CondizioneChiusuraLong if siamoindowntrend == true and sonPassateLeBarreDs strategy.close("Andale",alert_message=webhookClose, comment="CLOSE SHORT") else if siamoindowntrend == false and CondizioneChiusuraShort strategy.close("Andale",alert_message=webhookClose, comment="CLOSE SHORT") if strategy.position_size<0 and siamoindata strategy.exit("Andale", stop=stop_level_short, limit=take_level_short, comment="CLOSE SHORT (LIMIT/STOP)")