حکمت عملی کے بعد متحرک رجحان

مصنف:چاؤ ژانگ، تاریخ: 2023-12-11 15:43:42
ٹیگز:

img

جائزہ

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

حکمت عملی منطق

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

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

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

فوائد کا تجزیہ

اس حکمت عملی کے مندرجہ ذیل فوائد ہیں:

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

خطرے کا تجزیہ

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

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

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

اصلاح کی ہدایات

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

  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)


مزید