public DTDRichCheap(QREBridgeBase bridge, Symbol symbol) : base(bridge, symbol) { requireOrdered("exitShortLevel", "triggerShort"); requireOrdered("triggerLong", "exitLongLevel"); requireOrdered("triggerLong", "exitShortLevel"); requireOrdered("exitLongLevel", "triggerShort"); if (!isActive()) { return; } richCheap = symbol.relatedSuffix("RICHCHEAP").doubles(bars); dtd = symbol.relatedSuffix("DTD").doubles(bars); lengthZScore = parameter <int>("lengthZScore"); zScore = new ZScoreSpud(richCheap, lengthZScore, true); triggerLong = parameter <double>("triggerLong"); triggerShort = parameter <double>("triggerShort"); exitShort = parameter <double>("exitShortLevel"); exitLong = parameter <double>("exitLongLevel"); stopLoss = parameter <double>("lossStopLevel"); deactivate(() => dtd.hasContent() && richCheap.count() >= lengthZScore); addToPlot(dtd, "DTD", Color.Red, "dtd"); addToPlot(richCheap, "Rich / Cheap", Color.Blue, "richCheap"); }
public ReverseDTD(QREBridgeBase bridge, Symbol symbol) : base(bridge, symbol) { requireOrdered("exitShortLevel", "triggerShort"); requireOrdered("triggerLong", "exitLongLevel"); requireOrdered("triggerLong", "exitShortLevel"); requireOrdered("exitLongLevel", "triggerShort"); if (!isActive()) { return; } richCheap = symbol.relatedSuffixFromFirstDot(".DTD.EQUITY.RICHCHEAP").doubles(bars); dtd = symbol.relatedSuffixFromFirstDot(".DTD.EQUITY").doubles(bars); stockPrice = symbol.relatedSuffixFromFirstDot(".UNADJSTOCKPRICE").doubles(bars); lengthZScore = parameter <int>("lengthZScore"); zScore = new ZScoreSpud(richCheap, lengthZScore, true); triggerLong = parameter <double>("triggerLong"); triggerShort = parameter <double>("triggerShort"); exitShort = parameter <double>("exitShortLevel"); exitLong = parameter <double>("exitLongLevel"); stopLoss = parameter <double>("stopLoss"); timeStopBars = parameter <double>("timeStopBars"); trailingStopFlag = parameter <double>("trailingStopFlag"); minPrice = parameter <double>("minPrice"); tradeSize = parameter <double>("tradeSize"); atr = new AverageTrueRangeEW(bars, parameter <int>("ATRLen")); trailingStop = 0; deactivate(() => dtd.hasContent() && richCheap.count() >= lengthZScore); addToPlot(dtd, "DTD", Color.Red, "dtd"); addToPlot(richCheap, "Rich / Cheap", Color.Blue, "richCheap"); }
public DTDRichCheapV2(QREBridgeBase bridge, Symbol symbol) : base(bridge, symbol) { requireOrdered("exitShortLevel", "triggerShort"); requireOrdered("triggerLong", "exitLongLevel"); requireOrdered("triggerLong", "exitShortLevel"); requireOrdered("exitLongLevel", "triggerShort"); if (!isActive()) { return; } richCheap = symbol.relatedSuffix("RICHCHEAP").doubles(bars); dtd = symbol.relatedSuffix("DTD").doubles(bars); spread = symbol.relatedSuffix("SPREAD").doubles(bars); lengthZScore = parameter <int>("lengthZScore"); zScore = new ZScoreSpud(richCheap, lengthZScore, true); dv01 = symbol.relatedSuffix("DV01").doubles(bars); triggerLong = parameter <double>("triggerLong"); triggerShort = parameter <double>("triggerShort"); exitShort = parameter <double>("exitShortLevel"); exitLong = parameter <double>("exitLongLevel"); stopLoss = parameter <double>("lossStopLevel"); timeStopBars = parameter <double>("timeStopBars"); trailingStopFlag = parameter <double>("trailingStopFlag"); maxSpread = parameter <double>("maxSpread"); profitObjectiveMultiple = parameter <double>("profitObjectiveMultiple"); trailingStop = 0; deactivate(() => dtd.hasContent() && richCheap.count() >= lengthZScore); addToPlot(dtd, "DTD", Color.Red, "dtd"); addToPlot(richCheap, "Rich / Cheap", Color.Blue, "richCheap"); }