Ejemplo n.º 1
0
 private void StrategyShortPut() => UseAccountManager(am => {
   var puts = OpenPuts().ToList();
   var distanceOk = (from curPut in CurrentPut
                     from openPut in puts.OrderBy(p => p.contract.Strike).Take(1).ToList()
                     let strikeAvg = curPut.strikeAvg
                     let openPutPrice = openPut.price.Abs()
                     let openPutStrike = openPut.contract.Strike
                     where curPut.option.LastTradeDateOrContractMonth == openPut.contract.LastTradeDateOrContractMonth
                     && strikeAvg + openPutPrice > openPutStrike
                     select true
                     ).IsEmpty();
   var hasOptions = puts.Count +
     am.UseOrderContracts(OrderContracts =>
     (from put in CurrentPut
      join oc in OrderContracts.Where(o => !o.isDone & o.order.Action == "SELL") on put.instrument equals oc.contract.Instrument
      select true
      )).Concat().Count();
   var hasSellOrdes = am.UseOrderContracts(OrderContracts =>
   (from oc in OrderContracts.Where(o => !o.isDone && o.contract.IsPut && !o.contract.IsCombo && o.order.Action == "SELL")
    select true
    )).Concat().Count();
   if(distanceOk && hasOptions < TradeCountMax) {
     TradeConditionsEval()
       .DistinctUntilChanged(td => td)
       .Where(td => td.HasUp())
       .Take(1)
       .ForEach(_ => {
         var pos = -puts.Select(p => p.position.Abs()).DefaultIfEmpty(TradingRatio.ToInt()).Max();
         CurrentPut?.ForEach(p => {
           Log = new Exception($"{nameof(TradeConditionsTrigger)}:{nameof(am.OpenTrade)}:{new { p.option, pos, Thread.CurrentThread.ManagedThreadId }}");
           am.OpenTrade(p.option, pos, p.ask, 0.2, true, ServerTime.AddMinutes(5));
         });
       });
   }
 });
Ejemplo n.º 2
0
 private void StrategyLong() => UseAccountManager(am => {
   var hasOrders = am.UseOrderContracts(ocs => ocs.Where(o => o.contract.Instrument == Pair && !o.isDone)).Concat().Any();
   if(Trades.IsEmpty() && !hasOrders) {
     TradeConditionsEval()
       .DistinctUntilChanged(td => td)
       .Where(td => td.HasUp())
       .Take(1)
       .ForEach(_ => {
         var pos = TradingRatio.ToInt();
         Log = new Exception($"{nameof(StrategyLong)}:{nameof(am.OpenTrade)}:{new { Pair }}");
         var p = CurrentPrice.Bid;
         am.OpenTrade(Pair, pos, p, CalculateTakeProfit(), true, ServerTime.AddMinutes(10));
       });
   }
 });
Ejemplo n.º 3
0
 private void StrategyShortStraddle() => UseAccountManager(am => {
   var straddles = OpenStraddles(am);
   var hasOrders = am.UseOrderContracts(ocs => ocs.Where(o => !o.isDone)).Concat().Any();
   if(straddles.IsEmpty() && !hasOrders) {
     TradeConditionsEval()
       .DistinctUntilChanged(td => td)
       .Where(td => td.HasUp())
       .Take(1)
       .ForEach(_ => {
         var pos = -TradingRatio.ToInt();
         CurrentStraddle?.ForEach(p => {
           Log = new Exception($"{nameof(StrategyShortStraddle)}:{nameof(am.OpenTrade)}:{new { p.combo.contract, pos, Thread.CurrentThread.ManagedThreadId }}");
           am.OpenTrade(p.combo.contract, pos, p.ask, 0.2, true, ServerTime.AddMinutes(10));
         });
       });
   }
 });