| Overall Statistics |
|
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
using System;
using MathNet.Numerics.Statistics;
using QuantConnect.Data;
using QuantConnect.Securities.Future;
using QuantConnect.Interfaces;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data;
using QuantConnect.Interfaces;
using QuantConnect.Securities;
using QuantConnect.Securities.Future;
//using QuantConnect.
namespace QuantConnect.Algorithm.CSharp
{
public class Intermarket_ES : QCAlgorithm
{
private Symbol _contractSymbol;
// S&P 500 EMini futures
private const string RootSP500 = Futures.Indices.SP500EMini;
public Symbol SP500_Symbol = QuantConnect.Symbol.Create(RootSP500, SecurityType.Future, Market.USA);
// Gold futures
//private const string RootGold = Futures.Metals.Gold;
//public Symbol Gold = QuantConnect.Symbol.Create(RootGold, SecurityType.Future, Market.USA);
// Swiss Franc futures
private const string RootSF = Futures.Currencies.CHF;
public Symbol SF_Symbol = QuantConnect.Symbol.Create(RootSF, SecurityType.Future, Market.USA);
// public Symbol HYG_Symbol = QuantConnect.Symbol.Create("HYG", SecurityType.Equity, Market.USA);
private double coefficient1;
private double coefficient2;
private RollingWindow<decimal> Close_ES;
private RollingWindow<decimal> Close_HYG;
private RollingWindow<decimal> Close_SF;
public override void Initialize()
{
SetStartDate(2016, 1, 2); //Set Start Date
SetEndDate(2016, 3, 30);
SetCash(100000); //Set Strategy Cash
var future_ES = AddFuture(RootSP500,Resolution.Minute);
var future_SF = AddFuture(RootSF,Resolution.Minute);
// set our expiry filter for this futures chain
future_ES.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));
future_SF.SetFilter(TimeSpan.Zero, TimeSpan.FromDays(182));
//Close_ES = new RollingWindow<decimal>(34);
//Close_HYG = new RollingWindow<decimal>(34);
//Close_SF = new RollingWindow<decimal>(34);
// Schedule.On(DateRules.EveryDay("ES"), TimeRules.BeforeMarketClose("ES",182), () =>
// {
// out_str(" --> EveryDay.SPY 10 min before close: Fired at: " + Time);
// });
AddEquity("HYG", Resolution.Minute);
var benchmark = AddEquity("SPY", Resolution.Minute);
SetBenchmark(benchmark.Symbol);
}
/// OnData event is the primary entry point for your algorithm.
/// Each new data point will be pumped in here.
/// Slice object keyed by symbol containing the stock data
public override void OnData(Slice slice)
//-----------------------------------------------------------------
{
decimal act_Close_Price = 0.0m;
DateTime act_Close_Time;
Symbol act_contract_symbol ="";
decimal act_Close_Price_ES = 0.0m;
decimal act_Close_Price_SF = 0.0m;
Symbol SF_contract_symbol ="";
Symbol ES_contract_symbol ="";
FuturesChain chain2;
var keys = slice.Keys;
foreach (var key in keys)
{
//if (key.ToString().IndexOf("HYG") >= 0)
Debug("Key using To.String() method: " + key.ToString());
//var ticker_sym = key.ToString();
}
// Explore the future contract chain
if (slice.FuturesChains.TryGetValue(SP500_Symbol, out chain2))
{
//var underlying = chain2.Underlying;
var contracts = chain2.Contracts.Values;
foreach (var contract in contracts)
{
ES_contract_symbol = contract.Symbol;
_contractSymbol = contract.Symbol;
act_Close_Price_ES = contract.LastPrice;
}
}
if (slice.FuturesChains.TryGetValue(SF_Symbol, out chain2))
{
var contracts = chain2.Contracts.Values;
foreach (var contract in contracts)
{
SF_contract_symbol =contract.Symbol;
act_Close_Price_SF = contract.LastPrice;
// out_str ("Price=" + contract.LastPrice + " " + contract.Symbol);
}
}
var x1 = 0.0m;
/*
var HYGTradeBar = slice.Bars["HYG"];
out_str(HYGTradeBar.Close.ToString());
try {
x1 = slice[HYG_Symbol].Close;
var _symbol = slice[HYG_Symbol].Symbol.ToString();
} catch (Exception e) {
Debug($"{e}");
Log(Time.Date.ToShortDateString() + " Exception Data Error");
} */
//if (slice.ContainsKey("HYG")) {
//x1 = slice.Bars[HYG_Symbol].Close;
out_str (Time.Date.ToString() + " " +
ES_contract_symbol + "=" + act_Close_Price_ES + " " +
SF_contract_symbol + "=" + act_Close_Price_SF + " HYG=" + x1);
// }
//MarketOrder(act_contract_symbol, 1);
// if (!Portfolio.Invested)
// {
// SetHoldings(_spy, 1);
// Debug("Purchased Stock");
//}
}
public void OnData(TradeBars data)
//---------------------------------------------------------
{
//Debug(data["HYG"].Close.ToString ("##.###") );
//TradeBar chain;
//Debug( //data[_symb_name].Open.ToString ("##.###") + "\",\"" +
//data[_symb_name].High.ToString ("##.###") + "\",\"" +
//data[_symb_name].Low.ToString ("##.###") + "\",\"" +
//+ data[_symb_name].Volume);
// data["HYG"].Close.ToString ("##.###") );
}
private void find_futureContract_toBe_rolled(Slice slice) {
//-----------------------------------------------------------
decimal act_Close_Price = 0.0m;
DateTime act_Close_Time;
Symbol act_contract_symbol ="";
decimal act_Close_Price_ES = 0.0m;
foreach(var chain in slice.FutureChains)
{
// find the front contract expiring no earlier than in 90 days
// out_str(" in future chain");
var contract = (
from futuresContract in chain.Value.OrderBy(x => x.Expiry)
where futuresContract.Expiry > Time.Date.AddDays(90)
select futuresContract
).FirstOrDefault();
// if found, trade it
if (contract != null)
{
//if (Time.Minute % 60 == 0)
// MarketOrder(contract.Symbol, quantity);
act_Close_Price = contract.LastPrice;
act_Close_Time = contract.Time;
act_contract_symbol = contract.Symbol;
_contractSymbol = act_contract_symbol;
act_Close_Price_ES = act_Close_Price;
MarketOrder(act_contract_symbol, 1);
// out_str ("Price=" + contract.LastPrice + " " + contract.Symbol);
}
}
}
/// <summary>
/// Order fill event handler. On an order fill update the resulting information is passed to this method.
/// </summary>
/// <param name="orderEvent">Order event details containing details of the evemts</param>
/// <remarks>This method can be called asynchronously and so should only be used by seasoned C# experts. Ensure you use proper locks on thread-unsafe objects</remarks>
public override void OnOrderEvent(OrderEvent orderEvent)
{
Log(orderEvent.ToString());
}
public override void OnEndOfAlgorithm()
{
// Get the margin requirements
var buyingPowerModel = Securities[_contractSymbol].BuyingPowerModel;
var futureMarginModel = buyingPowerModel as FutureMarginModel;
if (buyingPowerModel == null)
{
throw new Exception($"Invalid buying power model. Found: {buyingPowerModel.GetType().Name}. Expected: {nameof(FutureMarginModel)}");
}
var initialOvernight = futureMarginModel?.InitialMarginRequirement;
var maintenanceOvernight = futureMarginModel?.MaintenanceMarginRequirement;
}
public void out_str(string _string)
//---------------------------------------------------
{
//Log(_string);
Debug(_string);
if (LiveMode) {
Log(_string);
Debug(_string);
}
}
}
public class calc_pair_Correlation
//-------------------------------------------
{
public calc_pair_Correlation(string ticker1, string ticker2)
{
Ticker=ticker1;
}
public string Ticker;
double[] x;
double[] y1;
public void Update(decimal value1, decimal value2) {
var coefficient1 = Correlation.Pearson(x, y1);
}
}
}