| Overall Statistics |
|
Total Trades 2 Average Win 0% Average Loss 0.00% Compounding Annual Return 0.001% Drawdown 0.000% Expectancy -1 Net Profit 0.000% Sharpe Ratio 0.015 Loss Rate 100% Win Rate 0% Profit-Loss Ratio 0 Alpha -0.006 Beta 0.525 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -25.523 Tracking Error 0 Treynor Ratio 0 Total Fees $17.28 |
import numpy as np
class BasicTemplateAlgorithm(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2013,10, 7) #Set Start Date
self.SetEndDate(2013,10,11) #Set End Date
self.SetCash(10000000) #Set Strategy Cash
self.AddForex("EURUSD", Resolution.Second, Market.Oanda)
self.Securities['EURUSD'].SetSlippageModel(CustomSlippageModel(self))
self.Securities['EURUSD'].SetFeeModel(CustomFeeModel(self))
def OnData(self, data):
if not self.Portfolio.Invested:
self.MarketOrder('EURUSD', -102000)
self.MarketOrder('EURUSD', 42000)
class CustomFeeModel(FeeModel):
def __init__(self, algorithm):
self.algorithm = algorithm
def GetOrderFee(self, parameters):
# custom fee math
if parameters.Order.Quantity > 0:
## Buy order spread cost --> Ask - Mid
spread_cost = (parameters.Security.AskPrice - parameters.Security.Price) * parameters.Order.AbsoluteQuantity
else:
## Sell order spread cost --> Mid - Bid
spread_cost = (parameters.Security.Price - parameters.Security.BidPrice) * parameters.Order.AbsoluteQuantity
commission_fee = (parameters.Order.AbsoluteQuantity/100000) * 5.00 ## Assuming account is in USD
fee = spread_cost + commission_fee
self.algorithm.Log("CustomFeeModel: " + str(fee))
return OrderFee(CashAmount(fee, "USD"))
class CustomSlippageModel:
def __init__(self, algorithm):
self.algorithm = algorithm
def GetSlippageApproximation(self, asset, order):
# custom slippage math
slippage = asset.BidPrice * (0.0001 * np.log10(2*float(order.AbsoluteQuantity))) ## Uses midpoint (asset.Close)
self.algorithm.Log("CustomSlippageModel: " + str(slippage))
return slippage