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
Estimated Strategy Capacity
$0
Lowest Capacity Asset
#region imports
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Globalization;
    using System.Drawing;
    using QuantConnect;
    using QuantConnect.Algorithm.Framework;
    using QuantConnect.Algorithm.Framework.Selection;
    using QuantConnect.Algorithm.Framework.Alphas;
    using QuantConnect.Algorithm.Framework.Portfolio;
    using QuantConnect.Algorithm.Framework.Execution;
    using QuantConnect.Algorithm.Framework.Risk;
    using QuantConnect.Parameters;
    using QuantConnect.Benchmarks;
    using QuantConnect.Brokerages;
    using QuantConnect.Util;
    using QuantConnect.Interfaces;
    using QuantConnect.Algorithm;
    using QuantConnect.Indicators;
    using QuantConnect.Data;
    using QuantConnect.Data.Consolidators;
    using QuantConnect.Data.Custom;
    using QuantConnect.DataSource;
    using QuantConnect.Data.Fundamental;
    using QuantConnect.Data.Market;
    using QuantConnect.Data.UniverseSelection;
    using QuantConnect.Notifications;
    using QuantConnect.Orders;
    using QuantConnect.Orders.Fees;
    using QuantConnect.Orders.Fills;
    using QuantConnect.Orders.Slippage;
    using QuantConnect.Scheduling;
    using QuantConnect.Securities;
    using QuantConnect.Securities.Equity;
    using QuantConnect.Securities.Future;
    using QuantConnect.Securities.Option;
    using QuantConnect.Securities.Forex;
    using QuantConnect.Securities.Crypto;
    using QuantConnect.Securities.Interfaces;
    using QuantConnect.Storage;
    using QuantConnect.Data.Custom.AlphaStreams;
    using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
    using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
    using QuantConnect.Indicators.CandlestickPatterns;
    using Newtonsoft.Json;
#endregion

namespace QuantConnect.Algorithm.CSharp
{

    public partial class TestAlgo : QCAlgorithm
    {
		// PROGRAM VARIABLES
		public string base_symbol;
		private Symbol funding_symbol;
		private int i = 0;
		
		// INITIALIASE
        public override void Initialize()
        {
        	SetStartDate(2022, 7, 22);
            SetEndDate(2022, 7, 24);
			SetAccountCurrency("USD");
            SetCash(10000);


            var crypto = AddCrypto("BTCUSD", Resolution.Daily, Market.FTX);
			base_symbol = crypto.BaseCurrencySymbol;
			
            var fundingRate = AddData<FundingRates>("BTC_FR", Resolution.Daily);
			funding_symbol = fundingRate.Symbol;
						
            SetWarmUp(TimeSpan.FromDays(5));
            SetBrokerageModel(BrokerageName.FTX, AccountType.Margin);
        }
        
        // ONDATA
        public override void OnData(Slice data)
        {
			if(IsWarmingUp) { return; }
			
			if(data.ContainsKey(funding_symbol))
			{
				Debug($"Acctual Time {Time} | FR Time {data[funding_symbol].timestamp} | FR Symbol {data[funding_symbol].FTXsymbol} | FR Value {data[funding_symbol].Rate}");
			}
			
            try
            {
                if(i < 3)
                {
                    Debug($"Acctual Time {Time} | FR Time {data[funding_symbol].timestamp} | FR Symbol {data[funding_symbol].FTXsymbol} | FR Value {data[funding_symbol].Rate}");
                    i++;
                }
            }
            catch (Exception e)
            {
                Debug($"Error: {e.Message}");
            }

    	}
    }
    
    //CUSTOM DATA class
    public class FundingRates : BaseData
    {
    	[JsonProperty("time")]
        public DateTime timestamp;
        [JsonProperty("future")]
        public string FTXsymbol;
        [JsonProperty("rate")]
    	public decimal Rate;


        //DEFAULT CONSTRUCTOR: Custom data types need a default constructor.
        public FundingRates()
        {
            Symbol = "BTC_FR";
        }
  	
    	// Get data source and stream into algorithm
		public override SubscriptionDataSource GetSource(SubscriptionDataConfig config, DateTime date, bool isLive)
	    {
	        var source = "https://ftx.com/api/funding_rates?future=BTC-PERP";
	
	          return new SubscriptionDataSource(source, SubscriptionTransportMedium.Streaming);
	    }
	    
	    
	    //Configure CalendarEvent object with streamed data and then return the CalendarEvent object
	    public override BaseData Reader(SubscriptionDataConfig config, string line, DateTime date, bool isLive)
    	{
    		// Check if string is not empty
        	if (string.IsNullOrWhiteSpace(line))
        		// Return null object
            	return null;
		
            //Example Line Format:
            //{"future":"BTC-PERP","rate":-1e-6,"time":"2022-07-25T14:00:00+00:00"}
            FundingRates f = new FundingRates();
            try
            {
                f = JsonConvert.DeserializeObject<FundingRates>(line);
                f.EndTime = DateTime.UtcNow.ConvertFromUtc(config.ExchangeTimeZone);
                f.Value = f.Rate;
            }
            catch { /* Do nothing, possible error in json decoding */ }
            return f;

    	}
    
	}
}
#region imports
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Globalization;
    using System.Drawing;
    using QuantConnect;
    using QuantConnect.Algorithm.Framework;
    using QuantConnect.Algorithm.Framework.Selection;
    using QuantConnect.Algorithm.Framework.Alphas;
    using QuantConnect.Algorithm.Framework.Portfolio;
    using QuantConnect.Algorithm.Framework.Execution;
    using QuantConnect.Algorithm.Framework.Risk;
    using QuantConnect.Parameters;
    using QuantConnect.Benchmarks;
    using QuantConnect.Brokerages;
    using QuantConnect.Util;
    using QuantConnect.Interfaces;
    using QuantConnect.Algorithm;
    using QuantConnect.Indicators;
    using QuantConnect.Data;
    using QuantConnect.Data.Consolidators;
    using QuantConnect.Data.Custom;
    using QuantConnect.DataSource;
    using QuantConnect.Data.Fundamental;
    using QuantConnect.Data.Market;
    using QuantConnect.Data.UniverseSelection;
    using QuantConnect.Notifications;
    using QuantConnect.Orders;
    using QuantConnect.Orders.Fees;
    using QuantConnect.Orders.Fills;
    using QuantConnect.Orders.Slippage;
    using QuantConnect.Scheduling;
    using QuantConnect.Securities;
    using QuantConnect.Securities.Equity;
    using QuantConnect.Securities.Future;
    using QuantConnect.Securities.Option;
    using QuantConnect.Securities.Forex;
    using QuantConnect.Securities.Crypto;
    using QuantConnect.Securities.Interfaces;
    using QuantConnect.Storage;
    using QuantConnect.Data.Custom.AlphaStreams;
    using QCAlgorithmFramework = QuantConnect.Algorithm.QCAlgorithm;
    using QCAlgorithmFrameworkBridge = QuantConnect.Algorithm.QCAlgorithm;
#endregion
namespace QuantConnect.Algorithm.CSharp
{
	public partial class TestAlgo : QCAlgorithm
	{
		//****************************************************************************************************************************************
		//USER VARIABLES
		//****************************************************************************************************************************************
		
		private static string _AccountCurrency = "USD";
		private static decimal _StartingCash = 100000m;
    	Resolution _Res = Resolution.Daily;		// Reference resolution for our custom TradeBar
    	private static int barPerTimeSpan = 1;
    	private int  _WarmUpPeriod = 200;
    	public decimal _PctRisk = 0.10m;
		private decimal _StopLossPct = 0.05m;
		public TimeSpan HighVolatiltyEventHourStop = new TimeSpan(38, 0, 0);

		
    	//***Symbol List***
		List <string> _MySymbolList = new List <string>
		{
			"BTCUSD",
			"ETHUSD",
		};
		
	    	
	    //***Indicators***
	    public static int _ROCperiod = 5;

	}

}