ٹرینڈ بریک آؤٹ حکمت عملی


تخلیق کی تاریخ: 2023-09-28 15:54:32 آخر میں ترمیم کریں: 2023-09-28 15:54:32
کاپی: 1 کلکس کی تعداد: 701
1
پر توجہ دیں
1617
پیروکار

جائزہ

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

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

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

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

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

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

طاقت کا تجزیہ

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

  1. ملٹی چینل اور منتقل اوسط کا مجموعہ ، فیصلہ کرنے کے لئے سخت معیار ، غلط فہمی کے امکانات کو کم کرتا ہے۔

  2. K لائنوں کو ترتیب میں ترتیب سے چیک کریں ، تاکہ واحد غیر متحرک K لائن غلط سگنل پیدا نہ ہو۔

  3. قیمتوں میں تبدیلی کی شرح کے اشارے کے ساتھ مل کر ، یہ طے کیا جاسکتا ہے کہ آیا اس میں کمی واقع ہوئی ہے یا نہیں ، تاکہ واپسی کا موقع ضائع نہ ہو۔

  4. مقدار توانائی کے اشارے میں شامل ہونے کے فیصلے میں ، صرف مقدار کے ساتھ قیمت کے ساتھ ہی سگنل پیدا ہوتا ہے ، تاکہ ناکافی توڑ سے بچا جاسکے۔

  5. اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ

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

خطرے کا تجزیہ

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

  1. پیرامیٹرز کی ترتیب بہت پیچیدہ ہے ، مختلف پیرامیٹرز کے مجموعے کے اثر میں فرق بہت زیادہ ہے ، بہت سارے ٹیسٹوں کے بعد بہترین پیرامیٹرز تلاش کرنے کی ضرورت ہے ، اور غلط ترتیب سے بہت زیادہ غلط سگنل پیدا ہوسکتے ہیں۔

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

  3. خود کار طریقے سے روکنے والے نقصانات کی روک تھام کی مقدار کا حساب کتاب سادہ معیاری فرق پر منحصر ہے ، جس میں انتہائی حالات میں روک تھام بہت کم ہوسکتی ہے۔

  4. اس کے نتیجے میں ، اس کے نتیجے میں ، اس کے نتیجے میں ، اس کے نتیجے میں ، اس کے نتیجے میں ، اس کے نتیجے میں ، اس کے نتیجے میں۔

  5. یہ حکمت عملی رجحانات کی پیروی کرنے کی حکمت عملی میں شامل ہے اور اس نے غیر مستحکم مارکیٹوں میں خراب کارکردگی کا مظاہرہ کیا ہے۔

ان خطرات کو کنٹرول کرنے کے لئے، مندرجہ ذیل اقدامات کی سفارش کی جاتی ہے:

  1. اس کے علاوہ ، آپ کو اس بات پر غور کرنے کی ضرورت ہے کہ کیا آپ کے پاس اس کی ضرورت ہے کہ آپ اس کی جانچ پڑتال کریں اور اس کی جانچ کریں۔

  2. مناسب طریقے سے چینل کے وقفے کو کھولنے، منتقل اوسط مدت کو مناسب طریقے سے بڑھا دیا جا سکتا ہے، غیر ضروری کھلی پوزیشن کی تعدد کو کم کرنا.

  3. زیادہ اعلی درجے کی اتار چڑھاؤ کی شرح کے حساب کے ماڈل جیسے ہیج فنڈز کو متعارف کرانے پر غور کیا جاسکتا ہے۔

  4. تکنیکی اشارے کے ذریعہ تجارت سے بچنے کے لئے بنیادی معلومات کا بروقت حوالہ دیں۔

  5. مارکیٹ کی حالت کا اندازہ لگانے کے لئے ، اتار چڑھاؤ والے بازاروں میں تجارت کو روکنا۔

اصلاح کی سمت

اس حکمت عملی کو مزید بہتر بنانے کے لیے کچھ نکات یہ ہیں:

  1. مشین لرننگ الگورتھم کو شامل کریں ، پیرامیٹرز کو خود بخود بہتر بنائیں۔ مختلف مارکیٹ کے ماحول میں پیرامیٹرز کی کارکردگی کو ریکارڈ کرنے ، استفسار کی میزیں بنانے ، متحرک اصلاحات کو نافذ کریں۔

  2. مارکیٹ کی حالت کے بارے میں زیادہ سے زیادہ فیصلے ، جیسے یہ فیصلہ کرنا کہ کیا رجحان ہے یا زلزلے کا ماڈیول ، غیر ضروری نقصان سے بچنے کے لئے زلزلے کی مارکیٹ میں تجارت کو روکنا۔

  3. نقصان کی روک تھام کی حکمت عملی کو بہتر بنائیں۔ اس کے علاوہ دیگر نقصانات کو روکنے کے طریقوں پر غور کیا جاسکتا ہے ، جیسے ٹریکنگ اسٹاپ ، تناسب اسٹاپ وغیرہ۔

  4. بنیادی عوامل کو شامل کریں ، اہم بنیادی واقعات کی صورت میں انتباہات جاری کریں ، صرف تکنیکی اشارے پر نقصانات سے بچیں۔

  5. اس حکمت عملی کو دیگر غیر متعلقہ حکمت عملیوں کے ساتھ جوڑنے کے لئے ایک مجموعہ کو بہتر بنانا ، جس سے خطرے کو مزید پھیلا دیا جاسکتا ہے۔

  6. کوانٹم ٹریڈنگ فریم ورک میں شامل ہونا ، سگنل کو خود کار طریقے سے نافذ کرنا ، اور سخت خطرے پر قابو پانا۔

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Extremely Overfit", overlay=true, commission_type=strategy.commission.percent, commission_value=.16, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding = 1)
price = close

goLong = input(title="go long?", type=input.bool, defval=true)
goShort = input(title="go short?", type=input.bool, defval=true)
//trendRestrict = input(title="basic trend restriction?", type=input.bool, defval=false)
dynamicRestrict = true //input(title="dynamic trend restriction?", type=input.bool, defval=true)
longtrendimpt = true //input(title="additional weight on long-term trends?", type=input.bool, defval=true)
volRestrict = true //input(title="volume restriction?", type=input.bool, defval=true)
conservativeClose = false //input(title="conservative order closing?", type=input.bool, defval=false)

Restrictiveness = input ( -40,step=10,title ="Restrictiveness (higher = make fewer trades)")
volatilityImportance = 3.2 //input( 3.2, step = 0.1, minval = 0)
fastChannelLength = input( 6 )
fastChannelMargin = input ( 3.2, step = 0.1, minval = 0)
slowChannelLength = input ( 6, step = 1, minval = 0)
slowChannelMargin = input ( 1.5, step = 0.1, minval = 0)
fastHMAlength = input (4, step = 1, minval = 0)
stopLoss = input( 3, step = 0.1, minval = 0)
//altClosePeriod = input( 27, step = 1, minval = 1)
//altCloseFactor = input( 4.9, step = 0.1)
stopLossFlexibility = 50 //input(50, step=10, title="effect of volatility on SL?")
volumeMAlength = 14 //input ( 14, step = 1, minval = 1)
volumeVolatilityCutoff = 3.8 // ( 3.8, step = 1, minval = 0)
trendSensitivity = 3.8 //input ( 3.8, step = 0.1)
obvLookback = 10 //input(10, step = 10, minval = 10)
obvCorrThreshold = 0.89 //input(0.89, step = 0.01)
ROClength = 80 //input( 80, step = 10)
ROCcutoff = 5.6 //input( 5.6, step=0.1)

trendRestrict = false
//trendLookback = input ( 360, step = 10, minval = 10)
//longTrendLookback = input(720, step = 10, minval = 10)
//longTrendImportance = input(1.5, step = 0.05)
trendLookback = 360
longTrendLookback = 720
longTrendImportance = 1.5

//conservativeness = input( 2.4, step = 0.1)
conservativeness = 0
//trendPower = input( 0, step=1)
trendPower = 0
//conservativenessLookback = input( 650, step = 10, minval = 0)
conservativenessLookback = 10
//consAffectFactor = input( 0.85,step=0.01)
consAffectFactor = 0.85
//volatilityLookback = input(50, step=1, minval=2)
volatilityLookback = int(50)
recentVol = stdev(price,volatilityLookback)/sqrt(volatilityLookback)

//price channel

fastChannel = ema(price, fastChannelLength)
fastChannelUB = fastChannel * (1 + (float(fastChannelMargin) / 1000)) + (recentVol * (float(volatilityImportance) * (1 + (Restrictiveness/100))))
fastChannelLB = fastChannel * (1 - (float(fastChannelMargin) / 1000)) - (recentVol * (float(volatilityImportance) * (1 + (Restrictiveness/100))))
fchU = ((fastChannelUB < open) and (fastChannelUB < close))
fchL = ((fastChannelLB > open) and (fastChannelLB > close))
//plot(fastChannelUB)
//plot(fastChannelLB)

//slow channel
//slowChannelLBmargin = input ( 2, step = 0.1, minval = 0 )
slowChannel = ema(ema(price,slowChannelLength),slowChannelLength)
slowChannelUB = slowChannel * (1 + (float(slowChannelMargin) / 2000)) + (recentVol * (float(volatilityImportance) * (1 + (Restrictiveness/100))))
slowChannelLB = slowChannel * (1 - (float(slowChannelMargin) / 2000)) - (recentVol * (float(volatilityImportance) * (1 + (Restrictiveness/100))))
schU = ((slowChannelUB < close))
schL = ((slowChannelLB > close))
cschU = (((slowChannelUB * (1 + conservativeness)) < close))
cschL = (((slowChannelUB * (1 - conservativeness)) > close))
//plot(slowChannel,color = #00FF00)
//plot(slowChannelUB,color = #00FF00)
//plot(slowChannelLB,color = #00FF00)


fastHMA = hma(price,fastHMAlength)
fastAboveUB = (fastHMA > slowChannelUB)
fastBelowLB = (fastHMA < slowChannelLB)
//plot(fastHMA, color = 	#FF0000, linewidth = 2)

//consecutive candles
//consecutiveCandlesReq = input(1, step = 1, minval = 1, maxval = 4)
consecutiveCandlesReq = 1
consecutiveBullReq = float(consecutiveCandlesReq)
consecutiveBearReq = float(consecutiveCandlesReq)
cbull = ((close[0] > close[1]) and (consecutiveBullReq == 1)) or (((close[0] > close[1]) and (close[1] > close[2])) and consecutiveBullReq == 2) or (((close[0] > close[1]) and (close[1] > close[2]) and (close[2] > close[3])) and consecutiveBullReq == 3) or (((close[0] > close[1]) and (close[1] > close[2]) and (close[2] > close[3]) and (close[3] > close[4])) and consecutiveBullReq == 4)
cbear = ((close[0] < close[1]) and (consecutiveBearReq == 1)) or (((close[0] < close[1]) and (close[1] < close[2])) and consecutiveBearReq == 2) or (((close[0] < close[1]) and (close[1] < close[2]) and (close[2] < close[3])) and consecutiveBearReq == 3) or (((close[0] < close[1]) and (close[1] < close[2]) and (close[2] < close[3]) and (close[3] < close[4])) and consecutiveBearReq == 4)

//trend detection
//trendCutoff = input(0, step = 0.1)
trendCutoff = 0
trendDetectionPct = float(trendCutoff/100)
trendVal = float((close[0] - close[trendLookback])/close[0])
trendUp = (trendVal > (0 + trendDetectionPct))
trendDown = (trendVal < (0 - trendDetectionPct))
//plot(trendVal+36.5,linewidth=2)

// peak indicators
peakHigh = ((fastHMA > fastChannelUB) and (fastChannelLB > slowChannelUB))
peakLow = ((fastHMA < fastChannelLB) and (fastChannelUB < slowChannelLB))
TpeakHigh = (fastHMA > fastChannelUB) and (fastChannelUB > slowChannelUB)
TpeakLow = (fastHMA < fastChannelUB) and (fastChannelLB < slowChannelLB)
//TpeakHigh = (fastHMA > fastChannelUB) and (fastChannelLB > avg(slowChannelUB,slowChannelLB))
//TpeakLow = (fastHMA < fastChannelUB) and (fastChannelUB < avg(slowChannelLB,slowChannelUB))
//TpeakHigh = ((crossover(fastHMA,fastChannelUB)) and (fastChannelLB > slowChannelUB))
//TpeakLow = ((crossover(fastChannelLB,fastHMA)) and (fastChannelUB < slowChannelLB))
//TpeakHigh = (fastHMA > (fastChannelUB * (1 + (trendPower/800)))) and (fastChannelUB > (slowChannelUB * (1 + (trendPower/800))))
//TpeakLow = (fastHMA < (fastChannelUB * (1 - (trendPower/800)))) and (fastChannelLB < (slowChannelLB * (1 - (trendPower/800))))
//TpeakHigh = (fastHMA > (fastChannelUB * (1 + (trendPower/800)))) and (avg(fastChannelUB,fastChannelLB) > (slowChannelUB * (1 + (trendPower/800))))
//TpeakLow = (fastHMA < (fastChannelUB * (1 - (trendPower/800)))) and (avg(fastChannelLB,fastChannelUB) < (slowChannelLB * (1 - (trendPower/800))))
//plot(fastChannelUB * (1 + (trendPower/700)), color=#FF69B4)

// and for closing...
closeLong = (crossover(fastHMA,fastChannelUB) and (fastChannelLB > slowChannelUB))
closeShort = (crossover(fastChannelLB,fastHMA) and (fastChannelUB < slowChannelLB))
//closeLong = (crossover(fastHMA,fastChannelUB) and (fastChannelLB > slowChannelUB)) or (roc(price,altClosePeriod) > altCloseFactor)
//closeShort = (crossover(fastChannelLB,fastHMA) and (fastChannelUB < slowChannelLB))  or (roc(price,altClosePeriod) < (altCloseFactor) * -1)
//closeLong = (crossover(fastHMA,fastChannelUB) and (fastChannelLB > slowChannelUB)) or (((price - fastChannelUB) > (altCloseFactor * abs(((fastChannelUB - fastChannelLB)/2) - ((slowChannelUB - slowChannelLB)/2)))) and (fastChannelLB > slowChannelUB))
//closeShort = (crossover(fastChannelLB,fastHMA) and (fastChannelUB < slowChannelLB)) or (((fastChannelLB - price) > (altCloseFactor * abs(((fastChannelUB - fastChannelLB)/2) - ((slowChannelUB - slowChannelLB)/2)))) and (fastChannelUB < slowChannelLB))
//closeLong = crossover(fastHMA,fastChannelUB) and ((fastChannelLB[0] - fastChannelLB[1]) < (slowChannelUB[0] - slowChannelUB[1]))
//closeShort = crossover(fastChannelLB,fastHMA) and ((fastChannelUB[0] - fastChannelUB[1]) > (slowChannelLB[0] - slowChannelLB[1]))


//stop-loss
priceDev = stdev(price,trendLookback) * (1 + stopLossFlexibility/5)
stopLossMod = stopLoss * (1 + (priceDev/price))
//longStopPrice  = strategy.position_avg_price * (1 - (stopLoss/100))
//shortStopPrice = strategy.position_avg_price * (1 + (stopLoss/100))
longStopPrice  = strategy.position_avg_price * (1 - (stopLossMod/100))
shortStopPrice = strategy.position_avg_price * (1 + (stopLossMod/100))


// volume
volumeMA = ema(volume,volumeMAlength)
volumeDecrease = ((not volRestrict ) or (volumeMA[0] < ema(volumeMA[1] * (1 - (volumeVolatilityCutoff/100)),5)))
volumeCutoff = ema(volumeMA[1] * (1 - (volumeVolatilityCutoff/100)),5)
//plot(volumeMA)
//plot(volumeCutoff)

// detect volatility
//trendinessLookback = input ( 600, step = 10, minval = 0)
trendinessLookback = trendLookback
trendiness = (stdev(price,trendinessLookback)/price) * (1 - (Restrictiveness/100))
longtermTrend = ((price - price[longTrendLookback])/price)
//dynamicTrendDetected = (dynamicRestrict and (abs(trendiness * 100) < trendSensitivity))
dynamicTrendDetected = (longtrendimpt and (dynamicRestrict and (abs(trendiness * 100) < (trendSensitivity+(longtermTrend * longTrendImportance))))) or (not longtrendimpt and ((dynamicRestrict and (abs(trendiness * 100) < trendSensitivity))))

// adapt conservativeness to volatility

//consVal = sma(((stdev(price,conservativenessLookback))/price)*100,25)
consVal = sma(((stdev(price,conservativenessLookback))/price)*100,25)
cVnorm = sma(avg(consVal,3),60)
cVal = consVal - cVnorm

//conservativenessMod = conservativeness * (cVal * consAffectFactor)
conservativenessMod = conservativeness * (consVal * consAffectFactor)
//plot(consVal,linewidth=4)
//plot(cVnorm,color = #00FF00)
//plot(cVal,linewidth=2)

// ROC cutoff (for CLOSING)
//rocCloseLong = (ema(roc(price,ROClength),10) > ROCcutoff)
//rocCloseShort = (ema(roc(price,ROClength),10) < (ROCcutoff * -1))
ROCval = roc(price,ROClength)
ROCema = ema(ROCval,30)
ROCabs = abs(ROCema)
ROCallow = ROCabs < ROCcutoff
ROCallowLong = (ROCabs < ROCcutoff)  or ((ROCabs >= ROCcutoff) and ((fastChannelLB < slowChannelLB) and (fastHMA < fastChannelLB)))
ROCallowShort = (ROCabs < ROCcutoff) or ((ROCabs >= ROCcutoff) and ((fastChannelUB > slowChannelUB) and (fastHMA > fastChannelUB)))
//plot(ROCallow)

// obv
evidence_obv = (correlation(price,obv[0],obvLookback))
obvAllow = evidence_obv > obvCorrThreshold


//if (not na(vrsi))
if trendRestrict or dynamicTrendDetected
    //if (strategy.position_size == 0)
    if not (strategy.position_size < 0)
        if trendUp
        	//if cbear and schL and fchL and trendUp and goLong
        	if cbear and TpeakLow and volumeDecrease and ROCallow and goLong and obvAllow
        	//if cbear and peakLow and rocHigh and volumeDecrease and goLong
        		strategy.entry("Long", strategy.long, comment="Long")
    if not (strategy.position_size > 0)
        if trendDown
        	//if cbull and schU and fchU and trendDown and goShort
        	if cbull and TpeakHigh and volumeDecrease and ROCallow and goShort and obvAllow
        	//if cbull and peakHigh and rocLow and volumeDecrease and goShort
        		strategy.entry("Short", strategy.short, comment="Short")
else
    //if (strategy.position_size == 0)
    if not (strategy.position_size < 0)
        //if cbear and peakLow and goLong
    	//if cbear and peakLow and volumeDecrease and ROCallow and goLong
    	if TpeakLow and goLong and obvAllow
    		strategy.entry("Long", strategy.long, comment="Long")
    if not (strategy.position_size > 0)
        //if cbull and peakHigh and goShort
    	//if cbull and peakHigh and volumeDecrease and ROCallow and goShort
    	if TpeakHigh and goShort and obvAllow
    		strategy.entry("Short", strategy.short, comment="Short")

if conservativeClose
    //pkHigh = ((fastHMA > fastChannelUB) and (fastChannelUB > (slowChannelUB * (1 + conservativeness/1000))))
    //pkLow = ((fastHMA < fastChannelLB) and (fastChannelLB < (slowChannelLB * (1 - conservativeness/1000))))
    //pkHigh = ((fastHMA > fastChannelUB) and (fastChannelUB > (slowChannelUB * (1 + conservativenessMod/1000))))
    //pkLow = ((fastHMA < fastChannelLB) and (fastChannelLB < (slowChannelLB * (1 - conservativenessMod/1000))))
    pkHigh = ((fastHMA > fastChannelUB) and (fastChannelUB > (slowChannelUB * (1 + ((conservativenessMod/1000) * (1 - Restrictiveness/100))))))
    pkLow = ((fastHMA < fastChannelLB) and (fastChannelLB < (slowChannelLB * (1 - ((conservativenessMod/1000) * (1 - Restrictiveness/100))))))
    
    if (strategy.position_size > 0)
        //if fastAboveUB
        //if pkHigh and closeLong
        if closeLong
    		strategy.close("Long", comment="closeLong")
    if (strategy.position_size < 0)
        //if fastBelowLB
        //if pkLow and closeShort
        if closeShort
    		strategy.close("Short", comment="closeShort")
else
    if (strategy.position_size > 0)
        //if fastAboveUB
        if peakHigh
    		strategy.close("Long", comment="closeLong")
    if (strategy.position_size < 0)
        //if fastBelowLB
        if peakLow
    		strategy.close("Short", comment="closeShort")

if (strategy.position_size > 0)
    strategy.exit(id="Long", stop=longStopPrice, comment="stopLong")

if (strategy.position_size < 0)
    strategy.exit(id="Short", stop=shortStopPrice, comment="stopShort")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)