CGC_Codes

regimen switch

Jun 7th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.25 KB | None | 0 0
  1. using QuantSys.Analytics.Timeseries.Indicators.Misc;
  2. using QuantSys.Analytics.Timeseries.Indicators.Oscillators;
  3. using QuantSys.Analytics.Timeseries.Indicators.Transforms;
  4. using QuantSys.MarketData;
  5. using QuantSys.TradeEngine.AccountManagement;
  6. using QuantSys.TradeEngine.Simulation.Account;
  7.  
  8. namespace QuantSys.TradeEngine.Strategy
  9. {
  10.     public class RegimeSwitch : AbstractStrategy
  11.     {
  12.         public IAccountManager IAccountManager { get; set; }
  13.  
  14.         private const double VOL = 0.5;
  15.         private const double STOPLEVEL = 0.002;
  16.  
  17.         public RegimeSwitch()
  18.         {
  19.             AttachIndicator("PRankHistVol", new PercentileRank(252, new HistoricalVol(200)));
  20.             AttachIndicator("MACD", new MACD());
  21.             AttachIndicator("RSI", new UltimateOscillator());
  22.         }
  23.  
  24.         public override void OnTick(params Tick[] t)
  25.         {
  26.  
  27.             foreach (var indicator in indicatorList)
  28.             {
  29.                 indicator.Value.HandleNextTick(t[0]);
  30.             }
  31.  
  32.            
  33.             if (t[0].AskClose - t[0].BidClose > STOPLEVEL) return;
  34.  
  35.            
  36.             if (indicatorList["PRankHistVol"][0] < VOL)
  37.             {
  38.                 double RSI = indicatorList["RSI"][0];
  39.                 double prevRSI = indicatorList["RSI"][1];
  40.  
  41.                 if (RSI >= 70 && prevRSI < 70)
  42.                 {
  43.                     if (IAccountManager.ExistsShortPositionForSymbol(t[0].Symbol))
  44.                     {
  45.                         IAccountManager.ClosePosition(t[0].Symbol);
  46.                         IAccountManager.PlaceMarketOrder(t[0].Symbol, 10000, Position.PositionSide.Long, STOPLEVEL);
  47.                     }
  48.                     else if (!IAccountManager.ExistsPositionForSymbol(t[0].Symbol))
  49.                     {
  50.                         IAccountManager.PlaceMarketOrder(t[0].Symbol, 10000, Position.PositionSide.Long, STOPLEVEL);
  51.                     }
  52.  
  53.                 }
  54.  
  55.                 if (RSI <= 30 && prevRSI > 30)
  56.                 {
  57.                     if (IAccountManager.ExistsLongPositionForSymbol(t[0].Symbol))
  58.                     {
  59.                         IAccountManager.ClosePosition(t[0].Symbol);
  60.                         IAccountManager.PlaceMarketOrder(t[0].Symbol, 10000, Position.PositionSide.Short, STOPLEVEL);
  61.                     }
  62.                     else if (!IAccountManager.ExistsPositionForSymbol(t[0].Symbol))
  63.                     {
  64.                         IAccountManager.PlaceMarketOrder(t[0].Symbol, 10000, Position.PositionSide.Short, STOPLEVEL);
  65.                     }
  66.  
  67.                 }
  68.             }
  69.  
  70.            
  71.             else if (indicatorList["PRankHistVol"][0] > VOL)
  72.             {
  73.                 double MACD = indicatorList["MACD"][0];
  74.                 double prevMACD = indicatorList["MACD"][1];
  75.                 double MACDSignal = ((MACD)indicatorList["MACD"]).SubIndicators["Signal"][0];
  76.  
  77.                 if (MACD > MACDSignal && prevMACD < MACDSignal && MACD < 0)
  78.                 {
  79.                     if (IAccountManager.ExistsShortPositionForSymbol(t[0].Symbol))
  80.                     {
  81.                         IAccountManager.ClosePosition(t[0].Symbol);
  82.                         IAccountManager.PlaceMarketOrder(t[0].Symbol, 10000, Position.PositionSide.Long, STOPLEVEL);
  83.                     }
  84.                     else if (!IAccountManager.ExistsPositionForSymbol(t[0].Symbol))
  85.                     {
  86.                         IAccountManager.PlaceMarketOrder(t[0].Symbol, 10000, Position.PositionSide.Long, STOPLEVEL);
  87.                     }
  88.  
  89.                 }
  90.  
  91.                 if (MACD < MACDSignal && prevMACD > MACDSignal && MACD > 0)
  92.                 {
  93.                     if (IAccountManager.ExistsLongPositionForSymbol(t[0].Symbol))
  94.                     {
  95.                         IAccountManager.ClosePosition(t[0].Symbol);
  96.                         IAccountManager.PlaceMarketOrder(t[0].Symbol, 10000, Position.PositionSide.Short, STOPLEVEL);
  97.                     }
  98.                     else if (!IAccountManager.ExistsPositionForSymbol(t[0].Symbol))
  99.                     {
  100.                         IAccountManager.PlaceMarketOrder(t[0].Symbol, 10000, Position.PositionSide.Short, STOPLEVEL);
  101.                     }
  102.                 }
  103.             }
  104.  
  105.         }
  106.     }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment