def algo_1(trader: shift.Trader): '''Moving average algorithm''' print(trader.get_last_price("MSFT")) best_price = trader.get_best_price("MSFT") print(f"ask price: {best_price.get_ask_price()}") print(f"local ask: {best_price.get_local_ask_price()}") print(f"global ask: {best_price.get_global_ask_price()}") print(f"bid price: {best_price.get_bid_price()}") print(f"local bid: {best_price.get_local_bid_price()}") print(f"global bid: {best_price.get_global_bid_price()}") print(trader.get_close_price("MSFT"))
def manageInventory(trader: shift.Trader, ticker, dayEnd): # Datetime of simulation rightNow = trader.get_last_trade_time() # While the time is before end of day... while (dayEnd > rightNow): time.sleep(5) # Give prices time to fluctuate item = trader.get_portfolio_item(ticker) if item.get_shares() != 0: unrealizedPL = 0 tradedPrice = item.get_price() numShares = int( item.get_shares() / 100) # Order size in 100's of shares, strictly as an int if numShares > 0: unrealizedPL = ( (trader.get_close_price(ticker, False, numShares) - tradedPrice) / tradedPrice) * 100 else: # numShares < 0: unrealizedPL = -( (trader.get_close_price(ticker, True, -numShares) - tradedPrice) / tradedPrice) * 100 print(ticker, "Unrealized P/L:", unrealizedPL, "%") if unrealizedPL >= 0.40: # Target met, take profit #if unrealizedPL >= 3.0: # Target met, take profit if item.get_shares() > 0: closePositions(trader, ticker) """ closeLong = shift.Order(shift.Order.Type.MARKET_SELL, item.get_symbol(), numShares) trader.submit_order(closeLong) """ print(ticker, "take profit on long") time.sleep( 5 ) # Don't act on volatile spikes and dips, only identify longer trends elif item.get_shares() < 0: closePositions(trader, ticker) """ coverShort = shift.Order(shift.Order.Type.MARKET_BUY, item.get_symbol(), -numShares) trader.submit_order(coverShort) """ print(ticker, "take profit on short") time.sleep( 5 ) # Don't act on volatile spikes and dips, only identify longer trends elif unrealizedPL <= -0.30: # Stop loss met, sell risk #elif unrealizedPL <= -0.50: # Stop loss met, sell risk if item.get_shares() > 0: closePositions(trader, ticker) """ closeLong = shift.Order(shift.Order.Type.MARKET_SELL, item.get_symbol(), numShares) trader.submit_order(closeLong) """ print(ticker, "stop loss on long") time.sleep( 5 ) # Don't act on volatile spikes and dips, only identify longer trends elif item.get_shares() < 0: closePositions(trader, ticker) """ coverShort = shift.Order(shift.Order.Type.MARKET_BUY, item.get_symbol(), -numShares) trader.submit_order(coverShort) """ print(ticker, "stop loss on short") time.sleep( 5 ) # Don't act on volatile spikes and dips, only identify longer trends rightNow = trader.get_last_trade_time() # Reset datetime of right now
def technicalStrat(trader: shift.Trader, ticker, lastTradeSell, dayEnd, lag=1): rightNow = trader.get_last_trade_time() # Datetime of simulation # While the time is before end of day... while (dayEnd > rightNow): print("P/L:", trader.get_portfolio_summary().get_total_realized_pl(), " Waiting list:", trader.get_waiting_list_size()) """ Make Trades Here: """ priceSeries = pd.Series(trader.get_sample_prices( ticker, True)) # ticker, mid-prices time.sleep(lag) # Give prices some time to change if priceSeries.size == 26: mShort = priceSeries.ewm(span=12, adjust=False).mean() # 12 period EMA mLong = priceSeries.ewm(span=26, adjust=False).mean() # 26 period EMA MACD = mShort - mLong # Calculate convergence and divergence mSignal = MACD.ewm(span=9, adjust=False).mean() # 9 period EMA signal line mHist = MACD - mSignal # Trade signal producer SMA = priceSeries[:19].mean() # 20 second simple moving average if lastTradeSell == True: bUpper = SMA + (priceSeries[:19].std() * 3.0 ) # Upper Bollinger Band bLower = SMA - ( priceSeries[:19].std() * 1.5 ) # Low Bollinger Band - more lenient, safer sell else: bUpper = SMA + ( priceSeries[:19].std() * 1.5 ) # Upper Bollinger Band - more lenient, safer cover bLower = SMA - (priceSeries[:19].std() * 3.0 ) # Low Bollinger Band #######!!!!!!possibly have a second band outside first..for too strong movement!!!!!!!!!!!!!!!!!!!!!!!!!!!! # Open long position / Cover short position if lastTradeSell == True and mHist.iloc[ -1] > 0 and trader.get_close_price( ticker, True, 1) > bUpper: # ticker, Buy, Size for i in range( 1, 20 ): # should scale based on order book amount in competition.. openLong = shift.Order(shift.Order.Type.MARKET_BUY, ticker, 1) trader.submit_order(openLong) print("Tech - Buy", ticker) lastTradeSell = False # Close long positions for now / Open short position elif lastTradeSell == False and mHist.iloc[ -1] < 0 and trader.get_close_price( ticker, False, 1) < bLower: # ticker, Sell, Size for i in range( 1, 20 ): # should scale based on order book amount in competition.. closeLong = shift.Order(shift.Order.Type.MARKET_SELL, ticker, 1) trader.submit_order(closeLong) print("Tech - Sell", ticker) lastTradeSell = True rightNow = trader.get_last_trade_time() # Reset datetime of right now # 60 seconds till end of trading day trader.cancel_all_sample_prices_requests( ) # Stop sampling prices on threads closePositions(trader, ticker) # Close out open positions so we don't get fined # Done trading return