コード例 #1
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
        public void testOutputsWithIntercept()
        {
            x         = new RootSpud <double>(values.manager);
            indicator = new QRegression(values, x, 10, false);
            addPoint(-5, -1);
            hasNaN();
            addPoint(5, 3);
            addPoint(1, 0.5);
            addPoint(3, 1);
            addPoint(2, 1.1);
            addPoint(8, 1.3);
            addPoint(-2, -1);
            addPoint(-8, -5);
            addPoint(1, 0.5);
            addPoint(0, 0);

            var residuals = indicator[0].getResiduals();

            AlmostEqual(residuals[0], -3.48098, 1e-5);
            AlmostEqual(residuals[1], -1.24643, 1e-5);
            AlmostEqual(residuals[7], 1.28446, 1e-5);
            AlmostEqual(residuals[8], -0.39302, 1e-5);
            AlmostEqual(residuals[9], -0.42234, 1e-5);
            AlmostEqual(indicator[0].getLastResidual(), -0.42234, 1e-5);
            AlmostEqual(indicator[0].getSigma(), 2.29937, 1e-5);
            AlmostEqual(indicator[0].getLastZScore(), -0.18367, 1e-5);
            AlmostEqual(indicator[0].getNumFactors(), 2, 1e-5);
            AlmostEqual(indicator[0].predict(5), 10.12916, 1e-5);
            AlmostEqual(indicator[0].rSquare(), 0.78253, 1e-5);
            AlmostEqual(indicator[0].rSquareAdj(), 0.75535, 1e-5);
        }
コード例 #2
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
        public void testWeightedRegression()
        {
            x         = new RootSpud <double>(values.manager);
            indicator = new QRegression(values, x, 10, false, new [] { 0.5, 0.5358867, 0.5743492, 0.6155722, 0.6597540, 0.7071068, 0.7578583, 0.8122524, 0.8705506, 0.9330330 });

            addPoint(-5, -1);
            hasNaN();
            addPoint(5, 3);
            addPoint(1, 0.5);
            addPoint(3, 1);
            addPoint(2, 1.1);
            addPoint(8, 1.3);
            addPoint(-2, -1);
            addPoint(-8, -5);
            addPoint(1, 0.5);
            addPoint(0, 0);
            checkOutputs(0.5499542078002, 1.91841053644205);
            AlmostEqual(indicator[0].getLastResidual(), -0.54995, 1e-5);
            AlmostEqual(indicator[0].getLastResidual(true), -0.53122, 1e-5);
            AlmostEqual(indicator[0].getSigma(), 2.30431, 1e-5);
            AlmostEqual(indicator[0].getSigma(true), 1.84317, 1e-5);
            AlmostEqual(indicator[0].getLastZScore(), -0.18368, 1e-5);
            AlmostEqual(indicator[0].getLastZScore(true), -0.26229, 1e-5);
            AlmostEqual(indicator[0].rSquare(), 0.77860, 1e-5);
            AlmostEqual(indicator[0].rSquare(true), 0.79859, 1e-5);
            AlmostEqual(indicator[0].rSquareAdj(true), 0.77341, 1e-5);
        }
コード例 #3
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
        public void testOutputsNoIntercept()
        {
            x         = new RootSpud <double>(values.manager);
            indicator = new QRegression(values, x, 10, true);
            addPoint(-5, -1);
            hasNaN();
            addPoint(5, 3);
            addPoint(1, 0.5);
            addPoint(3, 1);
            addPoint(2, 1.1);
            addPoint(8, 1.3);
            addPoint(-2, -1);
            addPoint(-8, -5);
            addPoint(1, 0.5);
            addPoint(0, 1);

            checkOutputs(0, 1.89855);
            var residuals = indicator[0].getResiduals();

            AlmostEqual(residuals[0], -3.10144, 1e-5);
            AlmostEqual(residuals[1], -0.69565, 1e-5);
            AlmostEqual(residuals[7], 1.49275, 1e-5);
            AlmostEqual(residuals[8], 0.05072, 1e-5);
            AlmostEqual(residuals[9], -1.89855, 1e-5);
            AlmostEqual(indicator[0].getLastResidual(), -1.89855, 1e-5);
            AlmostEqual(indicator[0].getSigma(), 2.30395, 1e-5);
            AlmostEqual(indicator[0].getLastZScore(), -0.92569, 1e-5);
            AlmostEqual(indicator[0].getNumFactors(), 1, 1e-5);
            AlmostEqual(indicator[0].predict(5), 9.49275, 1e-5);
            AlmostEqual(indicator[0].rSquare(), 0.75749, 1e-5);
            AlmostEqual(indicator[0].rSquareAdj(), 0.73054, 1e-5);
        }
コード例 #4
0
        public NBarFade(QREBridgeBase bridge, Symbol symbol) : base(bridge, symbol)
        {
            atrLen         = parameter <int>("ATRLen");
            nDays          = parameter <int>("nDays");
            nATREntry      = parameter <double>("nATRentry");
            stopAfStep     = parameter <double>("stopAfStep");
            stopAfMax      = parameter <double>("stopAfMax");
            entryBarWindow = parameter <double>("entryBarWindow");
            closeBetter    = parameter <bool>("closeBetter");
            riskDollars    = parameter <double>("riskDollars");

            atr           = new AverageTrueRangeEW(bars, atrLen); // this should be a daily spud
            nATRStopStart = nATREntry * parameter <double>("exitATRmultiple");

            entryHighestHigh = bars.high.highest(nDays);
            entryLowestLow   = bars.low.lowest(nDays);
            var halfNDays = (int)Math.Round(nDays * 0.5, 0);

            exitHighestHigh = bars.high.highest(halfNDays);
            exitLowestLow   = bars.low.lowest(halfNDays);

            inConfirm = false;

            //Plot methods
            parabolicStop = null;
            stopIndicator = new RootSpud <double>(bars.manager);
            addToPlot(stopIndicator, "ParabolicStop", Color.Red);
            addToPlot(entryHighestHigh, "entryHighestHigh", Color.LightBlue);
            addToPlot(entryLowestLow, "entryLowestLow", Color.Blue);
            addToPlot(exitHighestHigh, "exitHighestHigh", Color.Pink);
            addToPlot(exitLowestLow, "exitLowestLow", Color.Salmon);
            addToPlot(bars.close, "price", Color.Purple);
            addToPlot(atr, "ATR", Color.Blue, "ATRPane");
        }
コード例 #5
0
ファイル: RSI.cs プロジェクト: TzarIvan/ratel
 public RSI(Spud <double> values, int halfLife) : base(values.manager)
 {
     this.values = dependsOn(values);
     upChanges   = new RootSpud <double>(manager);
     dnChanges   = new RootSpud <double>(manager);
     upAverage   = new EWMA(upChanges, halfLife);
     dnAverage   = new EWMA(dnChanges, halfLife);
 }
コード例 #6
0
        public void testGoLive()
        {
            var baseSpud = new RootSpud <double>(bridge().manager);
            var spud     = new LiveSpud(baseSpud);

            IsFalse(spud);
            processTick(1.5);
            IsTrue(spud);
        }
コード例 #7
0
ファイル: KAMA.cs プロジェクト: TzarIvan/ratel
 public KAMA(Spud <double> values, double maFastLength, double maSlowLength, int calcBars) : base(values.manager)
 {
     this.values   = dependsOn(values);
     decayFast     = 2 / (maFastLength + 1);
     decaySlow     = 2 / (maSlowLength + 1);
     this.calcBars = calcBars;
     noise         = new RootSpud <double>(values.manager);
     noiseSum      = new AggregatorSpud <double>(noise, sum, calcBars);
 }
コード例 #8
0
ファイル: CommodityCarry.cs プロジェクト: TzarIvan/ratel
 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);
 }
コード例 #9
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
 public void testYIsConstant()
 {
     x         = new RootSpud <double>(values.manager);
     indicator = new QRegression(values, x, 3, false);
     addPoint(8, 5);
     hasNaN();
     addPoint(8, 6);
     hasNaN();
     addPoint(8, 9);
     checkOutputs(8, 0);
 }
コード例 #10
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
 public void testXIsConstant()
 {
     x         = new RootSpud <double>(values.manager);
     indicator = new QRegression(values, x, 3, false);
     addPoint(5, 2);
     hasNaN();
     addPoint(6, 2);
     hasNaN();
     addPoint(9, 2);
     checkOutputs(6.66666, 0);
 }
コード例 #11
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
 public void testYAndYAreZero()
 {
     x         = new RootSpud <double>(values.manager);
     indicator = new QRegression(values, x, 3, false);
     addPoint(0, 0);
     hasNaN();
     addPoint(0, 0);
     hasNaN();
     addPoint(0, 0);
     checkOutputs(0, 0);
 }
コード例 #12
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
 public void testXHasInfinity()
 {
     x         = new RootSpud <double>(values.manager);
     indicator = new QRegression(values, x, 3, false);
     addPoint(5, 2);
     hasNaN();
     addPoint(double.NegativeInfinity, 2);
     hasNaN();
     addPoint(9, 2);
     hasNaN();
 }
コード例 #13
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
 public void testXIsConstant()
 {
     x         = new RootSpud <double>(values.manager);
     slope     = new RootSpud <double>(values.manager);
     indicator = new QRegressionForcedSlope(values, x, 3, slope);
     addPoint(2, -1, 0.5);
     hasNaN();
     addPoint(3, -1, 0.5);
     hasNaN();
     addPoint(1, -1, 0.7);
     checkOutputs(2.7, 0.7);
 }
コード例 #14
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
 public void testBasicUseCase()
 {
     x         = new RootSpud <double>(values.manager);
     indicator = new QRegression(values, x, 3, false);
     addPoint(7, 9);
     hasNaN();
     addPoint(6, 8);
     hasNaN();
     addPoint(5, 0);
     checkOutputs(4.952055, 0.18493);
     addPoint(6, 8);
     checkOutputs(5, 0.125);
     addPoint(9, 7);
     checkOutputs(5.21929, 0.28947);
 }
コード例 #15
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
 public void testLongSeries()
 {
     x         = new RootSpud <double>(values.manager);
     indicator = new QRegression(values, x, 10, false);
     addPoint(-5, -1);
     hasNaN();
     addPoint(5, 3);
     addPoint(1, 0.5);
     addPoint(3, 1);
     addPoint(2, 1.1);
     addPoint(8, 1.3);
     addPoint(-2, -1);
     addPoint(-8, -5);
     addPoint(1, 0.5);
     addPoint(0, 0);
     checkOutputs(0.42234, 1.94136);
 }
コード例 #16
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
 public void testSlopeHasInfinity()
 {
     x         = new RootSpud <double>(values.manager);
     slope     = new RootSpud <double>(values.manager);
     indicator = new QRegressionForcedSlope(values, x, 3, slope);
     addPoint(-5, -1, 0.5);
     hasNaN();
     addPoint(1, -2, 0);
     hasNaN();
     addPoint(-3, 0, 0.5);
     addPoint(-5, -1, double.NegativeInfinity);
     hasNaN();
     addPoint(8, 3, 0.7);
     checkOutputs(-0.46666, 0.7);
     addPoint(5, 1, 0);
     checkOutputs(2.66666, 0);
     addPoint(4, 0, -2);
     checkOutputs(8.33333, -2);
 }
コード例 #17
0
        public ParabolicStop(
            Position position, BarSpud bars, double initialStopPrice, double afStep,
            double afMax, int lookbackBars, string name
            ) : base(position, name, PROTECTIVE_STOP, bars.manager)
        {
            this.initialStopPrice = initialStopPrice;
            this.afStep           = afStep;
            this.afMax            = afMax;
            this.bars             = bars;
            af = dependsOn(new RootSpud <double>(manager));
            af.set(afStep);

            extreme = dependsOn(position.longShort(bars.high, bars.low));
            var extremeSide = position.longShort(MinMax <double> .MAX, MinMax <double> .MIN);

            maxExtreme            = dependsOn(extreme.minMax(extremeSide));
            opposite              = position.direction().isLong() ? bars.low : bars.high;
            recentOppositeExtreme = dependsOn(position.direction().isLong() ? opposite.lowest(lookbackBars) : opposite.highest(lookbackBars));
            numBars = dependsOn(new BarCounter(bars));
        }
コード例 #18
0
ファイル: TestQRegression.cs プロジェクト: TzarIvan/ratel
 public void testLongSeries()
 {
     x         = new RootSpud <double>(values.manager);
     slope     = new RootSpud <double>(values.manager);
     indicator = new QRegressionForcedSlope(values, x, 10, slope);
     addPoint(-5, -1, 0.5);
     hasNaN();
     addPoint(5, 3, 0.5);
     addPoint(1, 0.5, 2);
     addPoint(3, 1, 0.2);
     addPoint(2, 1.1, 0.6);
     addPoint(8, 1.3, 0.4);
     addPoint(-2, -1, 0.6);
     addPoint(-8, -5, 1.9);
     addPoint(1, 0.5, 2);
     addPoint(0, 0, 1.678);
     checkOutputs(0.43288, 1.678);
     addPoint(5, 1, 1.5);
     checkOutputs(1.14, 1.5);
     addPoint(4, 1, 0);
     checkOutputs(1.4, 0);
 }
コード例 #19
0
ファイル: SpudTestCase.cs プロジェクト: TzarIvan/ratel
 public void setUp()
 {
     manager = new SpudManager();
     values  = new RootSpud <SOURCE>(manager);
 }