public static void TestCCI() { iCCI cci = new iCCI(20); cci.ReceiveTick(1302.67, 1302.67, 1263.23, 1263.84); cci.ReceiveTick(1268.65, 1294.65, 1261, 1292.3101); cci.ReceiveTick(1274.76, 1274.76, 1251, 1251); cci.ReceiveTick(1280.27, 1304.02, 1280.27, 1295.3); cci.ReceiveTick(1286.75, 1310.33, 1270.73, 1304.6); cci.ReceiveTick(1306.13, 1322.4301, 1299.53, 1320.09); cci.ReceiveTick(1328.35, 1347.27, 1314.96, 1315.45); cci.ReceiveTick(1305.72, 1305.72, 1279.09, 1279.6801); cci.ReceiveTick(1272.9399, 1292.36, 1270.59, 1291.4); cci.ReceiveTick(1286.85, 1292.73, 1267.6899, 1275.88); cci.ReceiveTick(1292.91, 1298.5, 1258.85, 1259.9399); cci.ReceiveTick(1244.52, 1263.9, 1233.08, 1252.13); cci.ReceiveTick(1233.9399, 1242.91, 1216.1899, 1216.45); cci.ReceiveTick(1229.47, 1232.96, 1216.24, 1221.09); cci.ReceiveTick(1209.13, 1209.72, 1177.41, 1184.9301); cci.ReceiveTick(1170.95, 1200.45, 1169.04, 1182.17); cci.ReceiveTick(1195.6, 1227.23, 1184.12, 1222.29); cci.ReceiveTick(1231.85, 1239.62, 1206.91, 1221.61); cci.ReceiveTick(1213.77, 1235.08, 1198.12, 1199.16); double v; v = cci.Value(); if ((v != 0) || (cci.isPrimed())) { Framework.Logger(2, "ERROR: CCI should not be primed yet"); } cci.ReceiveTick(1187.48, 1190.74, 1160.0699, 1172.0601); v = cci.Value(); if (Math.Abs(v - (-136.0742924)) < 0.001) { Framework.Logger(2, "CCI returned correct value -136.074"); } cci.ReceiveTick(1180.26, 1214.01, 1160.71, 1213.72); v = cci.Value(); if (Math.Abs(v - (-87.47)) < 0.01) { Framework.Logger(2, "CCI returned correct value -87.47"); } }
public override void ReceiveCandle(sCandle pCandle, int pPeriod, string pCBTitle) { if ((pPeriod == Minutes) && (pCBTitle == "cbx")) { Candle = pCandle; CCI.ReceiveTick(pCandle.O, pCandle.H, pCandle.L, pCandle.C); TCCI.ReceiveTick(pCandle.O, pCandle.H, pCandle.L, pCandle.C); // need to put primed values into this indicators // not primed right now to decrease down time CCIH.Add(CCI.Value()); TCCIH.Add(CCI.Value()); CCISlope.ReceiveTick(CCI.Value()); if (CCI.isPrimed() && TCCI.isPrimed()) { DecisionFunction(); } } }
// decide if we are entering or exiting a long or short trade // different criteria can be used for each condition private void DecisionFunction() { switch (Framework.Account.InTrade()) { // if we are not in a trade, see to enter long or short case 0: { // seems like a repetitive check if (Framework.Account.InTrade() == 0) { if (EntryCriteriaLong()) { Framework.Account.EnterTrade(1); Framework.Account.SetTrailingStop(0.0018); } } // now is not a repetitive check since // EntryCriteriaLong might have entered a trade // so check again if (Framework.Account.InTrade() == 0) { if (EntryCriteriaShort()) { Framework.Account.EnterTrade(1); Framework.Account.SetTrailingStop(0.0018); } } break; } // if we are currently long, look for a long exit strategy case 1: { if (EntryCriteriaShort()) { Framework.Account.ExitTrade(); //Framework.Account.EnterTrade(-1); } break; } // if we are currently short, look for a short exit strategy case -1: { if (EntryCriteriaLong()) { Framework.Account.ExitTrade(); //Framework.Account.EnterTrade(1); } break; } } // extract values from indicators and account // and log them to a file (used to create a graph with a separate app) double logInTrade = Framework.Account.InTrade(); double logMargin = Framework.Account.GetAccount().C; double C = cbx.GetCandle(0).C; double TP = (cbx.GetCandle(0).C + cbx.GetCandle(0).H + cbx.GetCandle(0).L) / 3; double hma = HMA.Value(); double fma = FMA.Value(); double deriv1 = ((double)Deriv1.GetItem(0)); double deriv2 = ((double)Deriv2.GetItem(0)); double sma; double bband1; double bband2; double pb; double bw; double srsi = StochRSI.Value(); double cci = CCI.Value(); BBands.Value(out bband1, out sma, out bband2, out pb, out bw); // write monitored valued to the numerical output file // Framework.WriteGraphLine("InTrade,Margin,C,TP,FMA,HMA,Deriv1,Deriv2,SMA,BBand1,BBand2,%b,Bandwidth,StochRSI,CCI"); Framework.WriteGraphLine(logInTrade + "," + logMargin + "," + C + "," + TP + "," + fma + "," + hma + "," + deriv1 + "," + deriv2 + "," + sma + "," + bband1 + "," + bband2 + "," + pb + "," + bw + "," + srsi + "," + cci); }
public string GetValues() { string Values; double BPlus, BSMA, BMinus, PctB, BW; double Deriv1, Deriv2; double MACDv, MACDs, MACDh; double STARCPlus, STARCSMA, STARCMinus; double STOv, STOs; double ATRv = ATR.Value(); BB.Value(out BPlus, out BSMA, out BMinus, out PctB, out BW); double CCIv = CCI.Value(); Derivatives.Value(out Deriv1, out Deriv2); double EMAv = EMA.Value(); double FMAv = FMA.Value(); double HMAv = HMA.Value(); MACD.Value(out MACDv, out MACDs, out MACDh); double MOMv = Momemtum.Value(); double RSIv = RSI.Value(); double RKOv = Renko.Value(); double SMAv = SMA.Value(); STARCBands.Value(out STARCPlus, out STARCSMA, out STARCMinus); double STDv = STDDEV.Value(); double SLPv = Slope.Value(); double SRSv = StochRSI.Value(); Stochastics.Value(out STOv, out STOs); double STv = Stub.Value(); double TRDv = Trend.Value(); double TRv = TrueRange.Value(); double WMAv = WMA.Value(); string ATRp = ATR.isPrimed().ToString(); string BBp = BB.isPrimed().ToString(); string CCIp = CCI.isPrimed().ToString(); string DERp = Derivatives.isPrimed().ToString(); string EMAp = EMA.isPrimed().ToString(); string FMAp = FMA.isPrimed().ToString(); string HMAp = HMA.isPrimed().ToString(); string MACp = MACD.isPrimed().ToString(); string MOMp = Momemtum.isPrimed().ToString(); string RSIp = RSI.isPrimed().ToString(); string RKOp = Renko.isPrimed().ToString(); string SMAp = SMA.isPrimed().ToString(); string STCp = STARCBands.isPrimed().ToString(); string STDp = STDDEV.isPrimed().ToString(); string SLPp = Slope.isPrimed().ToString(); string SRSp = StochRSI.isPrimed().ToString(); string STOp = Stochastics.isPrimed().ToString(); string STp = Stub.isPrimed().ToString(); string TRDp = Trend.isPrimed().ToString(); string TRp = TrueRange.isPrimed().ToString(); string WMAp = WMA.isPrimed().ToString(); Values = Candle.O + "," + Candle.H + "," + Candle.L + "," + Candle.C + "," + ATRp + "," + ATRv + "," + BBp + "," + BPlus + "," + BSMA + "," + BMinus + "," + PctB + "," + BW + "," + CCIp + "," + CCIv + "," + DERp + "," + Deriv1 + "," + Deriv2 + "," + EMAp + "," + EMAv + "," + FMAp + "," + FMAv + "," + HMAp + "," + HMAv + "," + MACp + "," + MACDv + "," + MACDs + "," + MACDh + "," + MOMp + "," + MOMv + "," + RSIp + "," + RSIv + "," + RKOp + "," + RKOv + "," + SMAp + "," + SMAv + "," + STCp + "," + STARCPlus + "," + STARCSMA + "," + STARCMinus + "," + STDp + "," + STDv + "," + SLPp + "," + SLPv + "," + SRSp + "," + SRSv + "," + STOp + "," + STOv + "," + STOs + "," + STp + "," + STv + "," + TRDp + "," + TRDv + "," + TRp + "," + TRv + "," + WMAp + "," + WMAv; return(Values); }