متحرک رجحان سے باخبر رہنے کی حکمت عملی


تخلیق کی تاریخ: 2023-12-11 15:43:42 آخر میں ترمیم کریں: 2023-12-11 15:43:42
کاپی: 3 کلکس کی تعداد: 731
1
پر توجہ دیں
1621
پیروکار

متحرک رجحان سے باخبر رہنے کی حکمت عملی

جائزہ

اس حکمت عملی کا بنیادی خیال مارکیٹ کے رجحانات کو متحرک طور پر ٹریک کرنا ہے ، جب رجحان بڑھتا ہے تو خریدنا ، اور جب رجحان کم ہوتا ہے تو بیچنا۔ یہ متعدد اشارے کے مجموعے کا حساب کتاب کرکے رجحان کی سمت کا فیصلہ کرتا ہے ، جیسے لکیری رجعت ، ترمیم شدہ ہل منتقل اوسط وغیرہ۔

حکمت عملی کا اصول

اس حکمت عملی میں رجحان کی سمت کا تعین کرنے کے لئے متعدد تکنیکی اشارے استعمال کیے جاتے ہیں۔ پہلے ، اس نے ایک رینج چینل کا حساب لگایا ، جس میں اس چینل کی اوپری اور نچلی حد کو قریبی سادہ حرکت پذیری اوسط اور ایک ان پٹ پیرامیٹر پر مبنی بنایا گیا ہے۔ اس کے بعد ، اس نے ایک ترمیم شدہ ہل منتقل اوسط کا حساب لگایا ، جس کے بارے میں خیال کیا جاتا ہے کہ یہ رجحان کی زیادہ درست تصویر پیش کرتا ہے۔ اس کے علاوہ ، ایک لکیری رجعت اشارے کا بھی حساب لگایا گیا ہے۔ جب ترمیم شدہ ہل منتقل اوسط لائن پر لکیری رجعت سے گزرتا ہے تو ، خریدنے کے اشارے پیدا کرتا ہے ، اور جب نیچے سے گزرتا ہے تو ، فروخت کے اشارے پیدا کرتا ہے۔

غلط سگنل کو کم کرنے کے لئے ، اس حکمت عملی میں متعدد فلٹرز بھی ڈیزائن کیے گئے ہیں۔ مثال کے طور پر ای ایم اے کا استعمال کرتے ہوئے فیصلہ کریں کہ آیا یہ نیچے کی طرف جارہا ہے یا نہیں ، اور آر ایس آئی میں تبدیلی کا فیصلہ کرنے کے لئے ونڈو اشارے کا استعمال کریں۔ یہ فلٹر زلزلہ کے حالات میں تجارتی سگنل پیدا کرنے سے گریز کرتے ہیں۔

داخلہ اور اسٹاپ نقصان کے معاملے میں ، حکمت عملی نے آخری پوزیشن کھولنے کی قیمت کو ریکارڈ کیا اور اسٹاپ نقصان کا فیصد طے کیا۔ مثال کے طور پر ، اگر آخری پوزیشن کی قیمت 100 ڈالر ہے تو ، اسٹاپ ہدف 102 ڈالر اور اسٹاپ نقصان کی قیمت 95 ڈالر ہے۔ اس طرح متحرک ٹریکنگ ممکن ہے۔

طاقت کا تجزیہ

اس حکمت عملی کے کچھ فوائد یہ ہیں:

  1. رجحانات کو متحرک طور پر ٹریک کرنے کے لئے، لمبی لائنوں کی سمتوں کو آسانی سے پکڑنے کے لئے؛
  2. ایک سے زیادہ فلٹرز کا استعمال شور کو کم کرنے اور زلزلے کے حالات میں بار بار تجارت سے بچنے کے لئے کیا گیا ہے۔
  3. ٹرینڈ ٹریکنگ کے لئے خود کار طریقے سے سٹاپ نقصان کی پوزیشن کو ایڈجسٹ کریں؛
  4. پیرامیٹرز کو بہتر بنانے کے ذریعے خود کار طریقے سے بہترین پیرامیٹرز کا مجموعہ تلاش کریں.

خطرے کا تجزیہ

اس حکمت عملی کے کچھ خطرات بھی ہیں:

  1. تاہم ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود ، اس کے باوجود …
  2. پیرامیٹرز کی غلط ترتیب سے حکمت عملی کی خراب کارکردگی کا سبب بن سکتا ہے۔ آپ کو اصلاح کے ذریعہ بہترین پیرامیٹرز کا مجموعہ تلاش کرنے کی ضرورت ہے۔
  3. ڈیٹا پروسیسنگ کے طویل عرصے سے سگنل کی تاخیر کا سبب بن سکتا ہے۔ اس کی پیمائش کو بہتر بنانے کی ضرورت ہے تاکہ اس کو زیادہ سے زیادہ حقیقی وقت میں بنایا جاسکے۔

خطرے پر قابو پانے کے لئے ، منافع کو روکنے کے لئے اسٹاپ ، ٹریل اسٹاپ یا اختیارات کا استعمال کرکے لاک کیا جاسکتا ہے۔ اس کے علاوہ ، پیرامیٹرز کے مجموعے کی بار بار جانچ کرنا ضروری ہے تاکہ قابل اعتماد پیرامیٹرز کی حد تلاش کی جاسکے۔ آخر میں ، اشارے کے حساب کتاب کے وقت پر بھی توجہ دیں اور سگنل کی حقیقت پسندی کی کوشش کریں۔

اصلاح کی سمت

اس حکمت عملی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے:

  1. مزید اشارے کے مجموعے کی جانچ پڑتال کریں تاکہ رجحانات کا اندازہ لگانے کے لئے زیادہ قابل اعتماد طریقے تلاش کیے جاسکیں۔
  2. پیرامیٹرز کی حد کو ایڈجسٹ کریں اور بہترین پیرامیٹرز تلاش کریں۔
  3. سگنل فلٹرز کو بہتر بنانا ، شور اور تاخیر کے درمیان توازن تلاش کرنا۔
  4. مشین لرننگ جیسے طریقوں سے ٹریڈنگ کے قواعد کو خودکار بنانے کی کوشش کریں۔

آپٹیمائزیشن کے عمل میں ، سگنل کے معیار اور حکمت عملی کی استحکام کا اندازہ لگانے کے لئے ریٹرننگ اور سمولیٹڈ ٹرانزیکشنز کا بھرپور استعمال کرنا ضروری ہے۔ آپٹیمائزیشن کے حل کو صرف اس وقت لاگو کیا جاسکتا ہے جب اس کی پوری طرح سے تصدیق ہوجائے۔

خلاصہ کریں۔

یہ حکمت عملی مجموعی طور پر ایک اچھی ٹرینڈ ٹریکنگ حکمت عملی ہے۔ اس میں متعدد اشارے استعمال کیے جاتے ہیں تاکہ رجحان کا اندازہ لگایا جاسکے ، غلط سگنل کو کم کرنے کے لئے فلٹرز مرتب کیے گئے ہیں ، اور اسٹاپ لاس ٹریکنگ رجحان کو خود بخود ایڈجسٹ کیا جاسکتا ہے۔ اگر پیرامیٹرز کو صحیح طریقے سے ترتیب دیا گیا ہو تو ، یہ وسط اور لمبی لکیر کے رجحان کو آسانی سے پکڑ سکتا ہے۔ اگلا کام یہ ہے کہ بہترین پیرامیٹرز تلاش کریں اور حکمت عملی کی توثیق اور اصلاح جاری رکھیں۔

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-06 00:00:00
period: 3m
basePeriod: 1m
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/
// © RafaelZioni

//@version=4
strategy(title = " BTC 15 min", overlay = true, pyramiding=1,initial_capital = 10000, default_qty_type= strategy.percent_of_equity, default_qty_value = 20, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.075)
strat_dir_input = input(title="Strategy Direction", defval="all", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
price = close
length8 = input(30,title = 'length of channel')
upmult = input(title = 'upper percent',type=input.float, step=0.1, defval=5)
lowmult = input(title = 'lower percent',type=input.float, step=0.1, defval=5)

basis = sma(close, length8)

vup = upmult * price / 100
vlow = lowmult * price / 100

upper = basis + vup
lower = basis - vlow
plot(basis, color=color.red)


//
fastLength = input(3, title="Fast filter length ", minval=1)
slowLength = input(21,title="Slow filter length",  minval=1)
source=close
v1=ema(source,fastLength)
v2=ema(source,slowLength)
//

leng=1
p1=close[1]

len55 = 10
//taken from https://www.tradingview.com/script/Ql1FjjfX-security-free-MTF-example-JD/
HTF = input("1D", type=input.resolution)
ti = change( time(HTF) ) != 0
T_c = fixnan( ti ? close : na )

vrsi = rsi(cum(change(T_c) * volume), leng)
pp=wma(vrsi,len55)

d=(vrsi[1]-pp[1])
len100 = 10
x=ema(d,len100)
//
zx=x/-1
col=zx > 0? color.lime : color.orange

//

tf10 = input("1", title = "Timeframe", type = input.resolution, options = ["1", "5", "15", "30", "60","120", "240","360","720", "D", "W"])

length = input(50, title = "Period", type = input.integer)
shift = input(1, title = "Shift", type = input.integer)

hma(_src, _length)=>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length)=>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

b =security(syminfo.tickerid, tf10, hma3(close[1], length)[shift])
//plot(a,color=color.gray)
//plot(b,color=color.yellow)
close_price = close[0]
len = input(25)

linear_reg = linreg(close_price, len, 0)




buy=crossover(linear_reg, b) 
sell=crossunder(linear_reg, b) or crossunder(close[1],upper)
//

src2=low
src3=high
Min =input(15)
leni = timeframe.isintraday and timeframe.multiplier >= 1 ? 
   Min / timeframe.multiplier * 7 : 
   timeframe.isintraday and timeframe.multiplier < 60 ? 
   60 / timeframe.multiplier * 24 * 7 : 7

l1 = wma(src2,leni)
h1 = wma(src3,leni)
//
m=(h1+l1)/2
//
len5 = 100

src5=m

//
multi = 2

mean = ema(src5, len5)  
stddev = multi * stdev(src5, len5)  
b5 = mean + stddev
s5 = mean - stddev


var bool long = na
var bool short = na

long :=crossover(src5, s5) 
short :=  crossunder(src5, b5)

var float last_open_long = na
var float last_open_short = na

last_open_long := long ? close : nz(last_open_long[1])
last_open_short := short ? close : nz(last_open_short[1])


entry_value =last_open_long
entry_value1=last_open_short

r=100
//
highb = highest(entry_value1, r)  
lowb = lowest(entry_value, r)  
d5 = highb - lowb  
me = (highb + lowb) / 2  
h4 = highb - d5 * 0.236  
c3 = highb - d5 * 0.382  
c4 = highb - d5 * 0.618  
l4 = highb - d5 * 0.764  
//
col2 = close >= me ? color.lime : color.red
       
p5 = plot(upper, color=col2)
p2 = plot(lower, color=col2)
fill(p5, p2,color=col2)
// Conditions

longCond = bool(na)
shortCond = bool(na)
longCond := crossover(zx,0) or buy 
shortCond := sell

// Count your long short conditions for more control with Pyramiding

sectionLongs = 0
sectionLongs := nz(sectionLongs[1])
sectionShorts = 0
sectionShorts := nz(sectionShorts[1])

if longCond
    sectionLongs := sectionLongs + 1
    sectionShorts := 0
    sectionShorts

if shortCond
    sectionLongs := 0
    sectionShorts := sectionShorts + 1
    sectionShorts

// Pyramiding

pyrl = 1


// These check to see your signal and cross references it against the pyramiding settings above

longCondition = longCond and sectionLongs <= pyrl
shortCondition = shortCond and sectionShorts <= pyrl

// Get the price of the last opened long or short

last_open_longCondition = float(na)
last_open_shortCondition = float(na)
last_open_longCondition := longCondition ? open : nz(last_open_longCondition[1])
last_open_shortCondition := shortCondition ? open : nz(last_open_shortCondition[1])

// Check if your last postion was a long or a short

last_longCondition = float(na)
last_shortCondition = float(na)
last_longCondition := longCondition ? time : nz(last_longCondition[1])
last_shortCondition := shortCondition ? time : nz(last_shortCondition[1])

in_longCondition = last_longCondition > last_shortCondition
in_shortCondition = last_shortCondition > last_longCondition

// Take profit

isTPl = true
//isTPs = input(false, "Take Profit Short")
tp = input(2, "Exit Profit %", type=input.float)
long_tp = isTPl and crossover(high, (1 + tp / 100) * last_open_longCondition) and longCondition == 0 and in_longCondition == 1
//short_tp = isTPs and crossunder(low, (1 - tp / 100) * last_open_shortCondition) and 
   //shortCondition == 0 and in_shortCondition == 1

// Stop Loss

isSLl = input(true,"buy Loss Long")
//isSLs = input(false, "buy Loss Short")
sl = 0.0
sl := input(5, " rebuy %", type=input.float)
long_sl = isSLl and crossunder(low, (1 - sl / 100) * last_open_longCondition) and 
   longCondition == 0 and in_longCondition == 1
//short_sl = isSLs and crossover(high, (1 + sl / 100) * last_open_shortCondition) and 
   //shortCondition == 0 and in_shortCondition == 1

//
// Conditions

longCond5 = bool(na)
shortCond5 = bool(na)
longCond5 := longCondition
shortCond5 := long_tp

// 

sectionLongs5 = 0
sectionLongs5 := nz(sectionLongs5[1])
sectionShorts5 = 0
sectionShorts5 := nz(sectionShorts5[1])

if longCond5
    sectionLongs5 := sectionLongs5 + 1
    sectionShorts5 := 0
    sectionShorts5

if shortCond5
    sectionLongs5 := 0
    sectionShorts5 := sectionShorts5 + 1
    sectionShorts5

// 

pyr5 = 1


longCondition5 = longCond5 and sectionLongs5 <= pyr5
shortCondition5 = shortCond5 and sectionShorts5 <= pyr5

// Get the price of the last opened long or short

last_open_longCondition5 = float(na)
last_open_shortCondition5 = float(na)
last_open_longCondition5 := longCondition5 ? open : nz(last_open_longCondition5[1])
last_open_shortCondition5 := shortCondition5 ? open : nz(last_open_shortCondition5[1])

last_longCondition5 = float(na)
last_shortCondition5 = float(na)
last_longCondition5 := longCondition5 ? time : nz(last_longCondition5[1])
last_shortCondition5 := shortCondition5 ? time : nz(last_shortCondition5[1])

in_longCondition5 = last_longCondition5 > last_shortCondition5
in_shortCondition5 = last_shortCondition5 > last_longCondition5
//
filter=input(true)
g(v, p) => round(v * (pow(10, p))) / pow(10, p)
risk     = input(100)
leverage = input(1)
c = g((strategy.equity * leverage / open) * (risk / 100), 4)

//
l =(v1 > v2 or filter == false ) and longCondition or long_sl
//
//l = longCondition or long_sl
s=shortCondition5  
if l 
    strategy.entry("buy", strategy.long,c)
if s 
    strategy.entry("sell", strategy.short,c)


per(pcnt) =>
    strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
stoploss=input(title=" stop loss", defval=5, minval=0.01)
los = per(stoploss)
q1=input(title=" qty_percent1", defval=50, minval=1)
q2=input(title=" qty_percent2", defval=50, minval=1)

tp10=input(title=" Take profit1", defval=1, minval=0.01)
tp20=input(title=" Take profit2", defval=2, minval=0.01)

strategy.exit("x1", qty_percent = q1, profit = per(tp10), loss = los)
strategy.exit("x2", qty_percent = q2, profit = per(tp20), loss = los)