Back

Shorting Bitcoin on GDAX

Hello, long time lurker first time poster here. I was wondering if anyone has been able to short crypto on GDAX. I am running into 2 issues with the backtester. 

 

The first is that any short limit order I place is accepted but no position is opened.

 

The second issue is that I am unable to use a margin account. I receive the error 

PythonException: Exception : The GDAX brokerage does not currently support Margin trading.

Which is not true since GDAX does have margin accounts.

Update Backtest








Also I am trying to attach my backtest but keep recieving a 502 bad gateway in the console so here is the code 

 

import numpy as np
import decimal as d

### <summary>
### Basic mean reversion of bitcoin, buy when above sma. Sell when below.
### </summary>
class BTCMeanReversion(QCAlgorithm):

def Initialize(self):
'''Initialise the data and resolution required, as well as the cash and start-end dates for the algorithm'''

self.SetStartDate(2016,10,07) #Set Start Date
self.SetEndDate(2018,02,15) #Set End Date
self.SetCash(100000) #Set Strategy Cash

self.SetBrokerageModel(BrokerageName.GDAX, AccountType.Cash)
self.AddCrypto("BTCUSD", Resolution.Hour)

def OnData(self, data):
if not self.Portfolio.Invested:
self.SetHoldings("BTCUSD", -1)

# Override SetHoldings to use limit orders (ratio is of totalPortfolioValue.)
def SetHoldings(self, symbol, ratio):

security = self.Securities[symbol]
if not security.IsTradable:
self.Debug("{} is not tradable.".format(symbol))
return # passive fail
ratio = d.Decimal(ratio)
price, quantity = security.Price, security.Holdings.Quantity

# Keep 2% Cash (for the limit order, rounding errors, and safety)
totalPortfolioValue = self.Portfolio.TotalPortfolioValue * d.Decimal(0.98)

# +0.1% Limit Order
# (to make sure it executes quickly and without much loss)
# (if you set the limit large it will act like a market order)
limit = 1.001
desiredQuantity = totalPortfolioValue * ratio / price
orderQuantity = desiredQuantity - quantity
# limit needs to be inverse when selling
limitPrice = price * d.Decimal(limit if orderQuantity >= 0 else 1/limit)
self.Log("Limit Order: %0.2f coins @ %0.2f per coin" % (orderQuantity, limitPrice))
self.LimitOrder(symbol, orderQuantity, limitPrice)
0

Hi Russel -- where do you get margin trading? Everything Coinbase shares indicates they dont support it.

0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


I see they actually removed support, the link on the bottom of there site takes you to this link which is now broken

https://support.gdax.com/customer/portal/articles/2725963-intro-to-margin-trading
0

I have also noticed that when I use SetBenchmark("BTCUSD") the bench mark is still the S&P 500 and BTCUSD is not a selectable option

0

For the benchmark issue, a temporary work-around (until QC implements options for crypto benchmarks), might be to plot it manually:

def Initialize(self):
...
stockPlot = Chart('Trade Plot')
stockPlot.AddSeries(Series('Equity', SeriesType.Line, 0))
stockPlot.AddSeries(Series('Benchmark', SeriesType.Line, 0))
...

def OnData(self, data):
...
self.Plot('Trade Plot', 'Equity', self.Portfolio.TotalPortfolioValue)
self.Plot('Trade Plot', 'Benchmark', self.Securities["BTCUSD"].Price)
...
0

Thank you for the suggestion!

0

Update Backtest





0

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


Loading...

This discussion is closed