| Overall Statistics |
|
Total Trades 93 Average Win 0.07% Average Loss 0% Compounding Annual Return 2.320% Drawdown 0.700% Expectancy 0 Net Profit 2.982% Sharpe Ratio 3.254 Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha -0.01 Beta 1.715 Annual Standard Deviation 0.006 Annual Variance 0 Information Ratio 0.429 Tracking Error 0.006 Treynor Ratio 0.012 Total Fees $11.75 |
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;
namespace QuantConnect
{
public partial class QCUMartingalePositionSizing : QCAlgorithm
{
string iSymbol = "MSFT";
string iChart = "Deals";
public override void Initialize()
{
SetCash(10000);
SetStartDate(2017, 1, 1);
SetEndDate(DateTime.Now.Date);
SetBrokerageModel(BrokerageName.InteractiveBrokersBrokerage);
AddEquity(iSymbol, Resolution.Minute);
var chart = new Chart(iChart);
var seriesStock = new Series("Stock", SeriesType.Line, 0);
var seriesBuy = new Series("Buy", SeriesType.Scatter, 0) { Color = Color.Blue, ScatterMarkerSymbol = ScatterMarkerSymbol.Triangle };
var seriesSell = new Series("Sell", SeriesType.Scatter, 0) { Color = Color.Red, ScatterMarkerSymbol = ScatterMarkerSymbol.TriangleDown };
var seriesBalance = new Series("Balance", SeriesType.Line, 1);
var seriesEquity = new Series("Equity", SeriesType.Line, 1);
var seriesIndicator = new Series("RSI", SeriesType.Line, 2);
chart.AddSeries(seriesStock);
chart.AddSeries(seriesBuy);
chart.AddSeries(seriesSell);
chart.AddSeries(seriesBalance);
chart.AddSeries(seriesEquity);
chart.AddSeries(seriesIndicator);
AddChart(chart);
}
public void OnData(TradeBars data)
{
if (IsMarketOpen(iSymbol) == false)
{
return;
}
Plot(iChart, "Stock", data[iSymbol].Price);
Plot(iChart, "Balance", Portfolio.TotalProfit - Portfolio.TotalFees);
Plot(iChart, "Equity", Portfolio.TotalProfit + Portfolio.TotalUnrealizedProfit - Portfolio.TotalFees);
if (Portfolio.Invested)
{
//Liquidate();
}
else
{
var price = Securities[iSymbol].Price;
var contracts = OptionChainProvider.GetOptionContractList(iSymbol, Time);
var OTM =
from c in contracts
where c.ID.OptionRight == OptionRight.Put
where price - c.ID.StrikePrice < 10 && price - c.ID.StrikePrice > 2
where (c.ID.Date - Time).TotalDays < 7 && (c.ID.Date - Time).TotalDays > 0
select c;
var contract = OTM
.OrderBy(o => o.ID.Date)
.ThenByDescending(o => price - o.ID.StrikePrice)
.FirstOrDefault();
if (contract != null)
{
AddOptionContract(contract, Resolution.Minute);
MarketOrder(contract, -1);
}
}
}
protected decimal GetBalance(bool equity = false)
{
var balance = 0m;
if (equity)
{
balance += Portfolio.TotalUnrealizedProfit;
}
return
balance +
Portfolio.TotalProfit -
Portfolio.TotalFees;
}
}
}