예제 #1
0
        protected override void CalcBar()
        {
            slope_roc.Value = (current_regression[0] - past_regression[0]) - (current_regression[1] - past_regression[1]);
            stdev.Call();

            //Output.WriteLine("zscore={0}, slope_roc.Value={1}", stdev[0], slope_roc.Value);

            bool close_long, close_short, open_long, open_short;

            close_long  = (slope_roc.Value > take_profit_zscore) || (slope_roc.Value < -bias_reset_zscore);
            close_short = (slope_roc.Value < -take_profit_zscore) || (slope_roc.Value > bias_reset_zscore);

            if (!trade_enabled && ((slope_roc[0] > 0.0 && slope_roc[1] < 0.0) || (slope_roc[0] < 0.0 && slope_roc[1] > 0.0)))
            {
                trade_enabled = true;
            }

            open_long  = (slope_roc.Value > bias_reset_zscore) && trade_enabled;
            open_short = (slope_roc.Value < -bias_reset_zscore) && trade_enabled;

            if (StrategyInfo.MarketPosition == 0)
            {
                if (open_long)
                {
                    long_order.Send();
                }
                if (open_short)
                {
                    short_order.Send();
                }
            }
            else if (StrategyInfo.MarketPosition < 0)
            {
                if (close_short)
                {
                    close_short_order.Send();
                    trade_enabled = false;
                }
            }
            else if (StrategyInfo.MarketPosition > 0)
            {
                if (close_long)
                {
                    close_long_order.Send();
                    trade_enabled = false;
                }
            }
        }