Beispiel #1
0
        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");
        }
Beispiel #2
0
        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");
        }
Beispiel #3
0
        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");
        }
Beispiel #4
0
 public CommodityCarry(QREBridgeBase bridge, Pair pair) : base(bridge, pair)
 {
     leftPrior   = prior(pair.left).bars(bars[pair.left]);
     rightPrior  = prior(pair.right).bars(bars[pair.right]);
     spread      = new Minus(bars[pair.left].close, bars[pair.right].close);
     vol         = new StdDeviationOfSample(spread, parameter <int>("volWindow"));
     cutoff      = parameter <double>("payoutRatioCutoff");
     payoutRatio = new RootSpud <double>(bridge.manager);
 }
Beispiel #5
0
 public override void setUp()
 {
     base.setUp();
     nextBarDate = date("2009/05/05");
     if (arguments().runInNativeCurrency)
     {
         return;
     }
     fxSpud = bridge().fxRates.get(symbol());
     fxSpud.enterTestMode();
 }
Beispiel #6
0
 public FXCarry(QREBridgeBase bridge, Symbol symbol) : base(bridge, symbol)
 {
     payoutRatio        = payoutRatioSymbol(symbol).doubles(bars);
     atr                = new AverageTrueRange(bars, 100);
     tradeSizeParameter = parameter <double>("TradeSize");
     recoveryAmount     = parameter <double>("RecoveryAmount") * tradeSizeParameter;
     recoveryPeriod     = parameter <int>("RecoveryPeriod");
     trigger            = parameter <double>("Trigger");
     maxTrigger         = parameter <double>("MaxTrigger");
     triggerCushion     = parameter <double>("TriggerCushion");
     addToPlot(payoutRatio, "payoutRatio", Color.Red, "payoutRatio");
     bars.close.prepare();
     stoppedOut();
 }
Beispiel #7
0
        public CouponSwap(QREBridgeBase bridge, Symbol symbol) : base(bridge, symbol)
        {
            //Set up signal data
            string tickerHeader;

            if (symbol.name.Substring(symbol.name.Length - 3, 3) == "TRS")
            {
                tickerHeader = symbol.name.Substring(0, 5);
            }
            else if (Regex.IsMatch(symbol.name, @"....\.\d"))
            {
                var tickerParts = symbol.name.Split(Convert.ToChar("."));
                tickerHeader = (tickerParts[0] == "FNCL" ? "F" : "D");
                tickerHeader = tickerHeader + tickerParts[1] + tickerParts[2];
                tickerHeader = tickerHeader + tickerParts[3] + tickerParts[4];
            }
            else
            {
                throw Bomb.toss("Bad symbol name, not able to figure out the signal data.");
            }

            modelPrice  = new Symbol(tickerHeader + "MDL").doubles(bars);
            actualPrice = new Symbol(tickerHeader + "ACT").doubles(bars);
            rollDecimal = new Symbol(tickerHeader + "WRL").doubles(bars);
            rollTicks   = new Times(rollDecimal, rollDecimal.manager.constant(32.0));

            tradeSize  = parameter <long>("TradeSize");
            maxSize    = parameter <long>("MaxPyramid") * tradeSize;
            entryTicks = parameter <double>("EntryTicks");
            stopTicks  = parameter <double>("StopTicks");

            richCheap       = new RichCheapSpud(modelPrice, actualPrice);
            longEntryCross  = new CrossOverSpud <double>(richCheap, entryTicks);
            shortEntryCross = new CrossOverSpud <double>(richCheap, -entryTicks);
            longExitCross   = new CrossOverSpud <double>(richCheap, parameter <double>("ExitTicks"));
            shortExitCross  = new CrossOverSpud <double>(richCheap, -parameter <double>("ExitTicks"));

            longMA           = new EWMA(richCheap, parameter <double>("HalfLife"));
            rollCutOff       = parameter <double>("RollCutOff");
            rollCutOffMargin = parameter <double>("RollCutOff.Margin");

            longRollCross  = new CrossOverSpud <double>(rollDecimal, -(rollCutOff - rollCutOffMargin) / 32);
            shortRollCross = new CrossOverSpud <double>(rollDecimal, (rollCutOff - rollCutOffMargin) / 32);

            //Add Plots
            addToPlot(modelPrice, "Model Price", Color.Red, "Coupon Swap");
            addToPlot(actualPrice, "Actual Price", Color.Blue, "Coupon Swap");
            addToPlot(rollTicks, "Weighted Roll", Color.Green, "Roll");
        }
Beispiel #8
0
        public LiqInjT(QREBridgeBase bridge, Symbol symbol) : base(bridge, symbol)
        {
            beta      = symbol.relatedPrefix("LIB" + "10").doubles(bars);
            betaShort = symbol.relatedPrefix("LIO" + "10").doubles(bars);
            residual  = symbol.relatedPrefix("LIV" + "10").doubles(bars);
            zScore    = symbol.relatedPrefix("LIZ" + "10").doubles(bars, 0);
            tc        = symbol.relatedPrefix("LIC" + "10").doublesNoLive(bars);
            acf       = new EWAcf(zScore, parameter <double>("acfHalfLife"), parameter <int>("acfLag"));

            zScoreMin       = parameter <double>("zScoreMin");
            pScoreMin       = parameter <double>("pScoreMin");
            betaMin         = parameter <double>("betaMin");
            betaMax         = parameter <double>("betaMax");
            acfTrigger      = parameter <double>("acfTrigger");
            risk            = parameter <long>("risk");
            stopMultiple    = parameter <double>("stopMultiple");
            targetNetProfit = stopMultiple * risk;
        }
Beispiel #9
0
        public LiqInj(QREBridgeBase bridge, Symbol symbol) : base(bridge, symbol)
        {
            version  = symbol.name.Substring(3, 2);
            residual = symbol.relatedPrefix("PTV" + version).doubles(bars);
            tc       = symbol.relatedPrefix("PTC" + version).doublesNoLive(bars);
            rSquare  = symbol.relatedPrefix("PTR" + version).doubles(bars);
            hedge    = symbol.relatedPrefix("PTH" + version).doubles(bars);
            scale    = symbol.relatedPrefix("PTS" + version).doublesNoLive(bars, 0);
            var atrLength = parameter <int>("ATRLength");

            nATR = parameter <double>("nATR");
            if (nATR != 0 && atrLength != 0)
            {
                atr = new AverageTrueRange(bars, atrLength);
            }
            zScore = symbol.relatedPrefix("PTZ" + version).doubles(bars, 0);
            acf    = new EWAcf(zScore, parameter <double>("acfHalfLife"), parameter <int>("acfLag"));

            zScoreMin              = parameter <double>("zScoreMin");
            pScoreMin              = parameter <double>("pScoreMin");
            rSquareMin             = parameter <double>("rSquareMin");
            hedgeSwitch            = parameter <int>("hedgeSwitch");
            hedgeMin               = parameter <double>("hedgeMin");
            hedgeMax               = parameter <double>("hedgeMax");
            acfTrigger             = parameter <double>("acfTrigger");
            scaleMin               = parameter <double>("scaleMin");
            startSize              = parameter <long>("startSize");
            stopMultiple           = parameter <double>("stopMultiple");
            bridge.manager.onLive += () => {
                if (startOfDayPosition != null)
                {
                    livePosition = startOfDayPosition;
                }
                if (startOfDayTargetNetProfit.HasValue)
                {
                    liveTargetNetProfit = startOfDayTargetNetProfit;
                }
            };
            addToPlot(zScore, "zScore", Color.Red, "zScore");
        }
Beispiel #10
0
 public FXCarryV2(QREBridgeBase bridge, Symbol symbol) : base(bridge, symbol)
 {
     payoutRatioLong  = payoutRatioSymbol(symbol, "Long").doubles(bars).allowStaleTicks();
     payoutRatioShort = payoutRatioSymbol(symbol, "Short").doubles(bars).allowStaleTicks();
     nATR             = parameter <int>("nATR");
     atrLen           = parameter <int>("ATRLen");
     atr                   = new AverageTrueRange(bars, atrLen);
     riskDollars           = parameter <double>("RiskDollars");
     bollingerBandBarsBack = parameter <int>("BollingerBandBarsBack");
     ma = new Average(bars.close, bollingerBandBarsBack);
     bollingerBandDeviations = parameter <double>("BollingerBandDeviations");
     trigger        = parameter <double>("Trigger");
     maxTrigger     = parameter <double>("MaxTrigger");
     triggerCushion = parameter <double>("TriggerCushion");
     addToPlot(payoutRatioLong, "payoutRatioLong", Color.Red, "payoutRatioLong");
     addToPlot(payoutRatioShort, "payoutRatioShort", Color.Red, "payoutRatioShort");
     upperBand = new BollingerBand(bars.close, bollingerBandBarsBack, bollingerBandDeviations);
     lowerBand = new BollingerBand(bars.close, bollingerBandBarsBack, -bollingerBandDeviations);
     addToPlot(upperBand, "upperBand", Color.Blue);
     addToPlot(lowerBand, "lowerBand", Color.Blue);
     bars.close.prepare();
     stoppedOut = true;
 }
Beispiel #11
0
 public SymbolSpud <double> doublesNoLive(BarSpud spud, double defalt)
 {
     return(SymbolSpud <double> .doubles(this, spud, defalt, true));
 }
Beispiel #12
0
 public SymbolSpud <double> doubles(BarSpud spud, double defalt)
 {
     return(SymbolSpud <double> .doubles(this, spud, defalt));
 }
Beispiel #13
0
 public SymbolSpud <double> doubles(BarSpud spud)
 {
     return(SymbolSpud <double> .doubles(this, spud));
 }
Beispiel #14
0
 public SymbolSpud <Bar> bars(BarSpud spud)
 {
     return(SymbolSpud <Bar> .bars(this, spud));
 }
Beispiel #15
0
 public CdsSlippage(Symbol symbol, BarSpud bars) : base(symbol, bars)
 {
     spreads = symbol.relatedSuffix("SPREAD").doubles(bars);
     dv01    = symbol.relatedSuffix("DV01").doubles(bars);
 }