Exemple #1
0
        protected override bool Process(MarketData indicator, DateTime updateTime, Price value, ref Signal.Tick tradingOrder)
        {
            KeyValuePair <DateTime, Price>?timeValueLow  = _low.TimeSeries[updateTime];
            KeyValuePair <DateTime, Price>?timeValueHigh = _high.TimeSeries[updateTime];

            if (timeValueLow == null || timeValueHigh == null)
            {
                return(false);
            }
            if (_high.TimeSeries.TotalMinutes(updateTime) < _high.Period / 60)
            {
                return(false);
            }
            Price       lowWMA        = timeValueLow.Value.Value;
            Price       highWMA       = timeValueHigh.Value.Value;
            var         signalValue   = lowWMA - highWMA;
            SIGNAL_CODE oldSignalCode = _signalCode;

            if (signalValue.Offer > 0)
            {
                tradingOrder = _onBuy;
                _signalCode  = SIGNAL_CODE.BUY;
            }
            else if (signalValue.Bid < 0)
            {
                tradingOrder = _onSell;
                _signalCode  = SIGNAL_CODE.SELL;
            }
            else
            {
                return(false);
            }
            return(oldSignalCode != SIGNAL_CODE.UNKNOWN && oldSignalCode != SIGNAL_CODE.HOLD && oldSignalCode != _signalCode);
        }
Exemple #2
0
 public Trade(DateTime tradingTime, string epic, SIGNAL_CODE direction, int size, decimal price, int placeHolder = 0)
 {
     _tradingTime = tradingTime;
     _epic        = epic;
     _direction   = direction;
     _size        = size;
     _price       = price;
     _placeHolder = placeHolder;
 }
Exemple #3
0
        public override void Insert(DateTime updateTime, Signal signal, SIGNAL_CODE code, decimal stockvalue)
        {
            check(updateTime, signal.Id);
            string tradeRef = signal.Trade == null ? "" : " " + signal.Trade.Reference;
            var    newLine  = string.Format("{0},{1},{2},{3},{4},{5}{6}",
                                            DATATYPE_SIGNAL, signal.Id,
                                            formatDateTime(updateTime), tradeRef, (int)code, stockvalue, Environment.NewLine);

            _csvSignalStringBuilder.Append(newLine);
        }
Exemple #4
0
 public Trade(DateTime tradingTime, string epic, SIGNAL_CODE direction, int size, decimal price, int placeHolder = 0, TradeCancelled onTradeCancelled = null)
 {
     _tradingTime = tradingTime;
     _epic = epic;
     _direction = direction;
     _size = size;
     _price = price;
     _placeHolder = placeHolder;
     _tradeCancelled = onTradeCancelled;
 }
Exemple #5
0
 public Trade(Row row)
 {
     _id = (string)row[0];
     _confirmationTime = new DateTime(((DateTimeOffset)row[1]).Ticks, DateTimeKind.Local);
     _direction = (SIGNAL_CODE)(int)row[2];
     _epic = (string)row[3];
     _price = (decimal)row[4];
     _size = (int)row[5];
     _reference = (string)row[6];
     _tradingTime = new DateTime(((DateTimeOffset)row[7]).Ticks, DateTimeKind.Local);
 }
Exemple #6
0
 public Trade(Row row)
 {
     _id = (string)row.GetValue(typeof(string).GetType(), "tradeid");
     _confirmationTime = new DateTime(((DateTime)row.GetValue(typeof(DateTimeOffset).GetType(), "confirmation_time")).Ticks, DateTimeKind.Local);
     _direction        = (SIGNAL_CODE)(int)row.GetValue(typeof(int).GetType(), "direction");
     _epic             = (string)row.GetValue(typeof(string).GetType(), "mktdataid");
     _price            = (decimal)row.GetValue(typeof(decimal).GetType(), "price");
     _size             = (int)row.GetValue(typeof(int).GetType(), "size");
     _reference        = (string)row.GetValue(typeof(string).GetType(), "traderef");
     _tradingTime      = new DateTime(((DateTime)row.GetValue(typeof(DateTimeOffset).GetType(), "trading_time")).Ticks, DateTimeKind.Local);
 }
Exemple #7
0
 public ModelMacD(MarketData index, int lowPeriod = 2, int midPeriod = 10, int highPeriod = 60, MarketData tradingIndex = null)
 {
     if (Config.Settings.ContainsKey("ASSUMPTION_TREND"))
         _trendAssumption = Config.Settings["ASSUMPTION_TREND"] == "BULL" ? SIGNAL_CODE.BUY : SIGNAL_CODE.SELL;
     List<MarketData> mktData = new List<MarketData>();
     mktData.Add(index);
     _mktData = mktData;
     _index = index;
     _tradingIndex = tradingIndex == null ? index : tradingIndex;
     _lowPeriod = lowPeriod;
     _midPeriod = midPeriod;
     _highPeriod = highPeriod;
 }
Exemple #8
0
 public IndicatorWatershed(MarketData mktData, int resolutionMinutes, int nbPools, IndicatorRSI rsi)
     : base("Water_" + resolutionMinutes + "_" + nbPools + "_", new List <MarketData> {
     mktData
 })
 {
     _resolutionSeconds = resolutionMinutes * 60;
     _nbPools           = nbPools;
     _rsi = rsi;
     if (Config.Settings.ContainsKey("ASSUMPTION_TREND"))
     {
         _trend = Config.Settings["ASSUMPTION_TREND"] == "BEAR" ? SIGNAL_CODE.SELL : SIGNAL_CODE.BUY;
     }
 }
Exemple #9
0
 public SignalMacD(MarketData asset, int lowPeriod, int highPeriod, IndicatorEMA low = null, IndicatorEMA high = null, MarketData tradingAsset = null)
     : base("MacD_" + lowPeriod + "_" + highPeriod + "_" + asset.Id, asset, tradingAsset)
 {
     if (Config.Settings.ContainsKey("ASSUMPTION_TREND"))
         _trendAssumption = Config.Settings["ASSUMPTION_TREND"] == "BULL" ? SIGNAL_CODE.BUY : SIGNAL_CODE.SELL;
     _low = low == null ? new IndicatorEMA(asset, lowPeriod) : new IndicatorEMA(low);
     if (low != null)
         _low.PublishingEnabled = false;
     _high = high == null ? new IndicatorEMA(asset, highPeriod) : new IndicatorEMA(high);
     if (high != null)
         _high.PublishingEnabled = false;
     _mktIndicator.Add(_low);
     _mktIndicator.Add(_high);
 }
Exemple #10
0
        public ModelMacD(MarketData index, int lowPeriod = 2, int midPeriod = 10, int highPeriod = 60, MarketData tradingIndex = null)
        {
            if (Config.Settings.ContainsKey("ASSUMPTION_TREND"))
            {
                _trendAssumption = Config.Settings["ASSUMPTION_TREND"] == "BULL" ? SIGNAL_CODE.BUY : SIGNAL_CODE.SELL;
            }
            List <MarketData> mktData = new List <MarketData>();

            mktData.Add(index);
            _mktData      = mktData;
            _index        = index;
            _tradingIndex = tradingIndex == null ? index : tradingIndex;
            _lowPeriod    = lowPeriod;
            _midPeriod    = midPeriod;
            _highPeriod   = highPeriod;
        }
Exemple #11
0
 public SignalMacD(MarketData asset, int lowPeriod, int highPeriod, IndicatorEMA low = null, IndicatorEMA high = null, MarketData tradingAsset = null)
     : base("MacD_" + lowPeriod + "_" + highPeriod + "_" + asset.Id, asset, tradingAsset)
 {
     if (Config.Settings.ContainsKey("ASSUMPTION_TREND"))
     {
         _trendAssumption = Config.Settings["ASSUMPTION_TREND"] == "BULL" ? SIGNAL_CODE.BUY : SIGNAL_CODE.SELL;
     }
     _low = low == null ? new IndicatorEMA(asset, lowPeriod) : new IndicatorEMA(low);
     if (low != null)
     {
         _low.PublishingEnabled = false;
     }
     _high = high == null ? new IndicatorEMA(asset, highPeriod) : new IndicatorEMA(high);
     if (high != null)
     {
         _high.PublishingEnabled = false;
     }
     _mktIndicator.Add(_low);
     _mktIndicator.Add(_high);
 }
Exemple #12
0
 public Trade(Trade cpy, bool opposite = false, DateTime?trading_time = null)
 {
     this._epic = cpy._epic;
     if (opposite)
     {
         this._direction   = (cpy._direction == SIGNAL_CODE.BUY ? SIGNAL_CODE.SELL : SIGNAL_CODE.BUY);
         this._tradingTime = trading_time.Value;
     }
     else
     {
         this._direction        = cpy._direction;
         this._tradingTime      = cpy._tradingTime;
         this._confirmationTime = cpy._confirmationTime;
     }
     this._size        = cpy._size;
     this._reference   = cpy._reference;
     this._id          = cpy._id;
     this._price       = cpy._price;
     this._placeHolder = cpy._placeHolder;
 }
Exemple #13
0
 public Trade(Trade cpy, bool opposite = false, DateTime? trading_time = null)
 {
     this._epic = cpy._epic;
     if (opposite)
     {
         this._direction = (cpy._direction == SIGNAL_CODE.BUY ? SIGNAL_CODE.SELL : SIGNAL_CODE.BUY);
         this._tradingTime = trading_time.Value;
     }
     else
     {
         this._direction = cpy._direction;
         this._tradingTime = cpy._tradingTime;
         this._confirmationTime = cpy._confirmationTime;
     }
     this._size = cpy._size;
     this._reference = cpy._reference;
     this._id = cpy._id;
     this._price = cpy._price;
     this._placeHolder = cpy._placeHolder;
     this._tradeCancelled = cpy._tradeCancelled;
 }
Exemple #14
0
        public override void Insert(DateTime updateTime, Signal signal, SIGNAL_CODE code, decimal mktdatavalue)
        {
            if (Config.TradingEnabled)
            {
                if (signal.Trade == null)
                {
                    return;
                }
                if (signal.Trade.Reference == "")
                {
                    return;
                }
            }
            if (_session == null)
            {
                throw new ApplicationException(EXCEPTION_CONNECTION_CLOSED);
            }
            string tradeRef = signal.Trade == null ? null : " " + signal.Trade.Reference;

            executeAsyncQuery(string.Format(DB_INSERTION + "(signalid, trading_time, tradeid, value, mktdatavalue) values ('{2}', {3}, '{4}', {5}, {6})",
                                            DB_HISTORICALDATA, DATATYPE_SIGNAL, signal.Id, ToUnixTimestamp(updateTime), tradeRef, Convert.ToInt32(code), mktdatavalue));
        }
Exemple #15
0
        public override void Insert(DateTime updateTime, Signal signal, SIGNAL_CODE code, decimal stockvalue)
        {
            var time = new DateTime(updateTime.Year, updateTime.Month, updateTime.Day,
                                    updateTime.Hour, updateTime.Minute, updateTime.Second);

            if (((SIGNAL_CODE)_expectedSignalData[signal.Id].Value(time).Value.Value.Bid != code) ||
                Math.Abs(_expectedSignalData[signal.Id].Value(time).Value.Value.Offer - stockvalue) > TOLERANCE)
            {
                string error;
                if ((SIGNAL_CODE)_expectedSignalData[signal.Id].Value(time).Value.Value.Bid != code)
                {
                    error = "Test failed: signal " + signal.Name + " time " + time.ToShortTimeString() + " expected value " +
                            ((SIGNAL_CODE)_expectedSignalData[signal.Id].Value(time).Value.Value.Bid).ToString() + " != " + code.ToString();
                }
                else
                {
                    error = "Test failed: signal stock value " + signal.Name + " time " + time.ToShortTimeString() + " expected value " +
                            (_expectedSignalData[signal.Id].Value(time).Value.Value.Offer).ToString() + " != " + stockvalue.ToString();
                }
                Log.Instance.WriteEntry(error, EventLogEntryType.Error);
                throw new ApplicationException(error);
            }
        }
Exemple #16
0
 protected void OnUpdate(MarketData mktData, DateTime updateTime, Price value)
 {
     if (_signalProcessing)
     {
         return;
     }
     lock (_mktIndicator)
     {
         if (_signalProcessing)
         {
             return;
         }
         try
         {
             _signalProcessing = true;
             Signal.Tick tradingOrder = _onHold;
             bool        signaled     = Process(mktData, updateTime, value, ref tradingOrder);
             if (signaled)
             {
                 // send a signal
                 var stockValue = _asset.TimeSeries[updateTime].Value.Value;
                 if (tradingOrder(this, updateTime, stockValue))
                 {
                     if (_signalCode == SIGNAL_CODE.BUY)
                     {
                         if (_oldSignalCode == SIGNAL_CODE.SELL)
                         {
                             PublisherConnection.Instance.Insert(updateTime.AddSeconds(-1), this, _signalCode, stockValue.Offer);
                         }
                         PublisherConnection.Instance.Insert(updateTime, this, _signalCode, stockValue.Offer);
                     }
                     else if (_signalCode == SIGNAL_CODE.SELL)
                     {
                         if (_oldSignalCode == SIGNAL_CODE.BUY)
                         {
                             PublisherConnection.Instance.Insert(updateTime.AddSeconds(-1), this, _signalCode, stockValue.Bid);
                         }
                         PublisherConnection.Instance.Insert(updateTime, this, _signalCode, stockValue.Bid);
                     }
                     else if (_signalCode == SIGNAL_CODE.HOLD)
                     {
                         if (_oldSignalCode == SIGNAL_CODE.BUY)
                         {
                             PublisherConnection.Instance.Insert(updateTime, this, SIGNAL_CODE.SELL, stockValue.Bid);
                         }
                         else if (_oldSignalCode == SIGNAL_CODE.SELL)
                         {
                             PublisherConnection.Instance.Insert(updateTime, this, SIGNAL_CODE.BUY, stockValue.Offer);
                         }
                     }
                     else if (_signalCode == SIGNAL_CODE.FAILED)
                     {
                         PublisherConnection.Instance.Insert(updateTime, this, _signalCode, stockValue.Bid);
                     }
                     _oldSignalCode = _signalCode;
                 }
             }
         }
         finally
         {
             _signalProcessing = false;
         }
     }
 }
Exemple #17
0
        public bool Update(DateTime updateTime, Price value, Price rsi)
        {
            var curValue = value.Mid();

            if (StartValue == decimal.MinValue)
            {
                StartValue = curValue;
            }
            if (GlobalTrend == SIGNAL_CODE.BUY)
            {
                if (ReachedExtremum)
                {
                    if (curValue > LastValue)
                    {
                        PoolTrend = LastValue < StartValue ? SIGNAL_CODE.SELL : SIGNAL_CODE.BUY;
                        Depth     = LastValue < StartValue ? ExtremumValue - StartValue : ExtremumValue - LastValue;
                        return(true);
                    }
                }
                else
                {
                    if (curValue > ExtremumValue)
                    {
                        ExtremumValue = curValue;
                        ExtremumTime  = updateTime;
                    }
                    else if (curValue < ExtremumValue)
                    {
                        ReachedExtremum = true;
                    }
                }
            }
            else
            {
                if (ReachedExtremum)
                {
                    if (curValue < LastValue)
                    {
                        PoolTrend = LastValue < StartValue ? SIGNAL_CODE.SELL : SIGNAL_CODE.BUY;
                        Depth     = LastValue < StartValue ? LastValue - ExtremumValue : StartValue - ExtremumValue;
                        return(true);
                    }
                }
                else
                {
                    if (curValue < ExtremumValue)
                    {
                        ExtremumValue = curValue;
                        ExtremumTime  = updateTime;
                    }
                    else if (curValue > ExtremumValue)
                    {
                        ReachedExtremum = true;
                    }
                }
            }
            LastTime  = updateTime;
            LastValue = curValue;
            LastRsi   = rsi.Bid;
            return(false);
        }
Exemple #18
0
 public Pool(SIGNAL_CODE globalTrend, DateTime startTime)
 {
     GlobalTrend   = globalTrend;
     StartTime     = startTime;
     ExtremumValue = GlobalTrend == SIGNAL_CODE.BUY ? decimal.MinValue : decimal.MaxValue;
 }
Exemple #19
0
 public abstract void Insert(DateTime updateTime, Signal signal, SIGNAL_CODE code, decimal stockvalue);
Exemple #20
0
 public override void Insert(DateTime updateTime, Signal signal, SIGNAL_CODE code, decimal stockvalue)
 {
     var time = new DateTime(updateTime.Year, updateTime.Month, updateTime.Day,
         updateTime.Hour, updateTime.Minute, updateTime.Second);
     if (((SIGNAL_CODE)_expectedSignalData[signal.Id].Value(time).Value.Value.Bid != code) ||
         Math.Abs(_expectedSignalData[signal.Id].Value(time).Value.Value.Offer - stockvalue) > TOLERANCE)
     {
         string error;
         if ((SIGNAL_CODE)_expectedSignalData[signal.Id].Value(time).Value.Value.Bid != code)
             error = "Test failed: signal " + signal.Name + " time " + time.ToShortTimeString() + " expected value " +
            ((SIGNAL_CODE)_expectedSignalData[signal.Id].Value(time).Value.Value.Bid).ToString() + " != " + code.ToString();
         else
             error = "Test failed: signal stock value " + signal.Name + " time " + time.ToShortTimeString() + " expected value " +
            (_expectedSignalData[signal.Id].Value(time).Value.Value.Offer).ToString() + " != " + stockvalue.ToString();
         Log.Instance.WriteEntry(error, EventLogEntryType.Error);
         throw new ApplicationException(error);
     }
 }
Exemple #21
0
 public ReplayPositionUpdateInfo(DateTime timestamp, string epic, string dealId, string dealRef, string status, string dealStatus, int size, decimal level, SIGNAL_CODE direction)
     : base(null)
 {
     _name = epic;
     _id = dealId;
     _itemData["timestamp"] = string.Format("{0}-{1}-{2}T {3}:{4}:{5}.{6}", timestamp.Year, timestamp.Month, timestamp.Day,
                                                        timestamp.Hour, timestamp.Minute, timestamp.Second, timestamp.Millisecond);
     _itemData["dealReference"] = dealRef;
     _itemData["status"] = status;
     _itemData["dealStatus"] = dealStatus;
     _itemData["size"] = size.ToString();
     _itemData["level"] = level.ToString();
     _itemData["channel"] = "PublicRestOTC";
     _itemData["direction"] = direction == SIGNAL_CODE.BUY ? "BUY" : (direction == SIGNAL_CODE.SELL ? "SELL" : "UNKNOWN");
 }
Exemple #22
0
 public ReplayPositionUpdateInfo(DateTime timestamp, string epic, string dealId, string dealRef, string status, string dealStatus, int size, decimal level, SIGNAL_CODE direction)
     : base(null)
 {
     _name = epic;
     _id   = dealId;
     _itemData["timestamp"] = string.Format("{0}-{1}-{2}T {3}:{4}:{5}.{6}", timestamp.Year, timestamp.Month, timestamp.Day,
                                            timestamp.Hour, timestamp.Minute, timestamp.Second, timestamp.Millisecond);
     _itemData["dealReference"] = dealRef;
     _itemData["status"]        = status;
     _itemData["dealStatus"]    = dealStatus;
     _itemData["size"]          = size.ToString();
     _itemData["level"]         = level.ToString();
     _itemData["channel"]       = "PublicRestOTC";
     _itemData["direction"]     = direction == SIGNAL_CODE.BUY ? "BUY" : (direction == SIGNAL_CODE.SELL ? "SELL" : "UNKNOWN");
 }
Exemple #23
0
 public override void Insert(DateTime updateTime, Signal signal, SIGNAL_CODE code, decimal stockvalue)
 {
     check(updateTime, signal.Id);
     string tradeRef = signal.Trade == null ? "" : " " + signal.Trade.Reference;
     var newLine = string.Format("{0},{1},{2},{3},{4},{5}{6}",
         DATATYPE_SIGNAL, signal.Id,
         formatDateTime(updateTime), tradeRef, (int)code, stockvalue, Environment.NewLine);
     _csvSignalStringBuilder.Append(newLine);
 }
Exemple #24
0
 public abstract void Insert(DateTime updateTime, Signal signal, SIGNAL_CODE code, decimal stockvalue);