اس حکمت عملی کا مقصد کریپٹوکرنسی مارکیٹ میں مضبوط رجحانات کو پکڑنا ہے ، رجحان سازی کے اشارے کی شناخت کے لئے ملٹی چینل اور منتقل اوسط کا استعمال کرنا ہے ، اور اس کے ساتھ مل کر جعلی بریک کو فلٹر کرنے کے لئے مقدار کا اشارہ کیا جاسکتا ہے ، جبکہ منافع کو مقفل کرنے کے لئے خود بخود اسٹاپ نقصان کا استعمال کیا جاسکتا ہے ، جو رجحان کی منڈی میں منافع بخش ہے۔
اس حکمت عملی میں رجحانات کی نشاندہی کرنے کے لئے فاسٹ چینل ، سست چینل اور فاسٹ مووینگ ایوریج کے تینوں کا استعمال کیا گیا ہے۔ فاسٹ چینل پیرامیٹرز کی ترتیب زیادہ حساس ہے ، جو قلیل مدتی قیمتوں میں اتار چڑھاو کو پکڑنے کے لئے استعمال ہوتی ہے۔ سست چینل پیرامیٹرز زیادہ ہلکے ہیں ، جو بڑے رجحانات کا فیصلہ کرنے کے لئے استعمال ہوتے ہیں۔ فاسٹ مووینگ ایوریج پیرامیٹرز ان دونوں کے مابین ہیں ، جب وہ چینل کو توڑتے ہیں تو تجارتی سگنل دیتے ہیں۔
خاص طور پر ، یہ سب سے پہلے ایک تیز رفتار چینل کے اوپر اور نیچے کی سڑکوں ، اور ایک چلتی اوسط کا حساب لگاتا ہے۔ جب قیمت اوپر کی طرف بڑھتی ہے تو ، اگر سست رفتار چینل کا نیچے کا راستہ بھی چلتی اوسط سے اوپر ہوتا ہے تو ، اس سے زیادہ سگنل پیدا ہوتا ہے۔ اس کے برعکس ، جب سست رفتار چینل کا راستہ نیچے کی طرف بڑھتا ہے تو اس کا فیصلہ کیا جاتا ہے کہ آیا سست رفتار چینل کا راستہ حرکت پذیر اوسط سے نیچے ہے یا نہیں۔
اس کے علاوہ ، یہ K لائن کی شکل کا پتہ لگاتا ہے ، جس میں جعلی توڑ کو فلٹر کرنے کے لئے کئی K لائنوں کو ترتیب دینے کی ضرورت ہوتی ہے۔ اور قیمتوں میں تبدیلی کے اشارے کا حساب لگاتا ہے ، تاکہ بازار کو چینل کے اندر اتار چڑھاؤ میں پھنسنے سے بچایا جاسکے۔ اس کے علاوہ ، تجارت کے حجم کے اشارے شامل ہیں تاکہ اس بات کا یقین کیا جاسکے کہ توڑنے کا وقت اس کے ساتھ ہے۔
اسٹریٹجی کے ل for ، اسٹاپ نقصان کے لئے ، اسٹریٹجی کا استعمال خود بخود اسٹاپ کے لئے کیا جاتا ہے۔ حالیہ عرصے میں اتار چڑھاؤ کی صورتحال کے مطابق ، اسٹاپ نقصان کی شدت کو متحرک طور پر ایڈجسٹ کیا جاتا ہے۔ اس سے زیادہ تر رجحانات کی پیروی کی جاسکتی ہے ، جبکہ اس بات کی ضمانت دی جاسکتی ہے کہ اس سے نقصان ہوتا ہے۔
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ ٹریڈنگ سگنل بنانے کے فیصلے کے قواعد زیادہ سخت ہیں ، جو غیر رجحان سازی کے جھوٹے وقفے کو مؤثر طریقے سے فلٹر کرسکتے ہیں ، اور واقعی مارکیٹ میں رجحان کی تبدیلی کو پکڑ سکتے ہیں۔ خاص طور پر ، بنیادی طور پر مندرجہ ذیل پہلوؤں پر:
ملٹی چینل اور منتقل اوسط کا مجموعہ ، فیصلہ کرنے کے لئے سخت معیار ، غلط فہمی کے امکانات کو کم کرتا ہے۔
K لائنوں کو ترتیب میں ترتیب سے چیک کریں ، تاکہ واحد غیر متحرک K لائن غلط سگنل پیدا نہ ہو۔
قیمتوں میں تبدیلی کی شرح کے اشارے کے ساتھ مل کر ، یہ طے کیا جاسکتا ہے کہ آیا اس میں کمی واقع ہوئی ہے یا نہیں ، تاکہ واپسی کا موقع ضائع نہ ہو۔
مقدار توانائی کے اشارے میں شامل ہونے کے فیصلے میں ، صرف مقدار کے ساتھ قیمت کے ساتھ ہی سگنل پیدا ہوتا ہے ، تاکہ ناکافی توڑ سے بچا جاسکے۔
اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ ، اس کے علاوہ
لہذا ، اس حکمت عملی میں مجموعی طور پر تشکیل کی اصلاح ، فیصلہ سازی کی سختی ، اور خود بخود موافقت کی خصوصیات ہیں ، جو رجحانات کو پکڑنے کے لئے بہترین ہیں۔
اگرچہ اس حکمت عملی میں جعلی دراندازی اور مداخلت کے رجحانات کو فلٹر کرنے کے لئے بہت ساری اصلاحات کی گئی ہیں ، لیکن اس میں کچھ خطرات موجود ہیں جن کے بارے میں آگاہ رہنا چاہئے:
پیرامیٹرز کی ترتیب بہت پیچیدہ ہے ، مختلف پیرامیٹرز کے مجموعے کے اثر میں فرق بہت زیادہ ہے ، بہت سارے ٹیسٹوں کے بعد بہترین پیرامیٹرز تلاش کرنے کی ضرورت ہے ، اور غلط ترتیب سے بہت زیادہ غلط سگنل پیدا ہوسکتے ہیں۔
تیز رفتار اوسط اور گھنٹوں سے زیادہ چینل کے وقفے سے بار بار پوزیشن کھولنے اور بند کرنے کا خطرہ ہوتا ہے ، جو پائیدار ٹریڈنگ رجحانات کے لئے نقصان دہ ہے۔
خود کار طریقے سے روکنے والے نقصانات کی روک تھام کی مقدار کا حساب کتاب سادہ معیاری فرق پر منحصر ہے ، جس میں انتہائی حالات میں روک تھام بہت کم ہوسکتی ہے۔
اس کے نتیجے میں ، اس کے نتیجے میں ، اس کے نتیجے میں ، اس کے نتیجے میں ، اس کے نتیجے میں ، اس کے نتیجے میں ، اس کے نتیجے میں۔
یہ حکمت عملی رجحانات کی پیروی کرنے کی حکمت عملی میں شامل ہے اور اس نے غیر مستحکم مارکیٹوں میں خراب کارکردگی کا مظاہرہ کیا ہے۔
ان خطرات کو کنٹرول کرنے کے لئے، مندرجہ ذیل اقدامات کی سفارش کی جاتی ہے:
اس کے علاوہ ، آپ کو اس بات پر غور کرنے کی ضرورت ہے کہ کیا آپ کے پاس اس کی ضرورت ہے کہ آپ اس کی جانچ پڑتال کریں اور اس کی جانچ کریں۔
مناسب طریقے سے چینل کے وقفے کو کھولنے، منتقل اوسط مدت کو مناسب طریقے سے بڑھا دیا جا سکتا ہے، غیر ضروری کھلی پوزیشن کی تعدد کو کم کرنا.
زیادہ اعلی درجے کی اتار چڑھاؤ کی شرح کے حساب کے ماڈل جیسے ہیج فنڈز کو متعارف کرانے پر غور کیا جاسکتا ہے۔
تکنیکی اشارے کے ذریعہ تجارت سے بچنے کے لئے بنیادی معلومات کا بروقت حوالہ دیں۔
مارکیٹ کی حالت کا اندازہ لگانے کے لئے ، اتار چڑھاؤ والے بازاروں میں تجارت کو روکنا۔
اس حکمت عملی کو مزید بہتر بنانے کے لیے کچھ نکات یہ ہیں:
مشین لرننگ الگورتھم کو شامل کریں ، پیرامیٹرز کو خود بخود بہتر بنائیں۔ مختلف مارکیٹ کے ماحول میں پیرامیٹرز کی کارکردگی کو ریکارڈ کرنے ، استفسار کی میزیں بنانے ، متحرک اصلاحات کو نافذ کریں۔
مارکیٹ کی حالت کے بارے میں زیادہ سے زیادہ فیصلے ، جیسے یہ فیصلہ کرنا کہ کیا رجحان ہے یا زلزلے کا ماڈیول ، غیر ضروری نقصان سے بچنے کے لئے زلزلے کی مارکیٹ میں تجارت کو روکنا۔
نقصان کی روک تھام کی حکمت عملی کو بہتر بنائیں۔ اس کے علاوہ دیگر نقصانات کو روکنے کے طریقوں پر غور کیا جاسکتا ہے ، جیسے ٹریکنگ اسٹاپ ، تناسب اسٹاپ وغیرہ۔
بنیادی عوامل کو شامل کریں ، اہم بنیادی واقعات کی صورت میں انتباہات جاری کریں ، صرف تکنیکی اشارے پر نقصانات سے بچیں۔
اس حکمت عملی کو دیگر غیر متعلقہ حکمت عملیوں کے ساتھ جوڑنے کے لئے ایک مجموعہ کو بہتر بنانا ، جس سے خطرے کو مزید پھیلا دیا جاسکتا ہے۔
کوانٹم ٹریڈنگ فریم ورک میں شامل ہونا ، سگنل کو خود کار طریقے سے نافذ کرنا ، اور سخت خطرے پر قابو پانا۔
مجموعی طور پر ، یہ حکمت عملی کریپٹوکرنسی مارکیٹ میں رجحان کے مواقع کو پکڑنے کے لئے مجموعی طور پر موزوں ہے۔ یہ کثیر چینل اور متحرک اوسط کا استعمال کرتے ہوئے ٹریڈنگ سگنل تیار کرتا ہے ، اور جعلی توڑنے والے شور کو مؤثر طریقے سے فلٹر کرتا ہے ، اور رجحان کے منافع کو کامیابی سے لاک کرتا ہے۔ تاہم ، پیرامیٹرز کی اصلاح ، اسٹاپ نقصان کے طریقوں ، مارکیٹ کی حالت کے فیصلے وغیرہ پر توجہ دینے کی ضرورت ہے۔ اگر اس میں مسلسل بہتری آسکتی ہے تو ، مستحکم سرمایہ کاری کی واپسی کی امید ہے۔ یہ ایک عمدہ مثال فراہم کرتا ہے جس میں مقدار کی تجارت کی حکمت عملی کو ڈیزائن کیا جاسکتا ہے۔
/*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)