def buy(self, price): self.cur_trade = trade.Trade(price, self.db, self.tele, True, self.in_strategy_test, strategy=self.name)
def __init__(self, data, c_vol=0.01, o_expiry=120): self.d = data self.c_vol = c_vol # Units of crypto to trade self.trd = trade.Trade(self.d, o_expiry) # Trade obj with order expiry of x seconds self.open_position = False self.sim_open_position = False # For simulations / backtests pass
def newTrade(self, contractSymbol:str, entryPrice:float, stopPrice:float ): # TEMP contractSymbol="EURUSD" contract = Contract() contract.symbol = "EUR" contract.secType = "CASH" contract.currency = "GBP" contract.exchange = "IDEALPRO" contract.tickSize = 0.00005 contract.lotSize = 20000 # TEMP #if( self.trades[contractSymbol] ) ''' contractDetails = s.getContractDetails( contractSymbol ) contract = Contract() contract.exchange = contractDetails.exchange contract.secType = contractDetails.secType contract.symbol = contractSymbol contract.lastTradeDateOrContractMonth = contractDetails.expiry contract.tickSize = contractDetails.tickSize # Custom field contract.lotSize = contractDetails.lotSize # Custom field ''' diff = abs(entryPrice-stopPrice) qty = self.capital * s.RiskPerTrade / diff t = trade.Trade( self.ib, contract ) t.placeNewTrade( qty, entryPrice, stopPrice ) self.trades[contractSymbol] = t
def main(trade_datafile): with open(trade_datafile) as file: data = json.load(file) short = True if data["predicted_exit"] < data["entry"] else False a = acc.Account(data["capital"], data["max_loss"]) t = trade.Trade(data["entry"], data["predicted_exit"], data["stop_loss"], a) t.print()
def test_execution_basic_buy_1(): data = load_data(TEST_DATA_FILE_1) buy_trade = trade.Trade(direction='BUY', entry=362.0, quantity=10, target=375, stop_loss=352, fees=0.07) trade_log = execution.get_trade_results(data, buy_trade) print(trade_log)
def setup_class(self): fake_trade_dict = { "sequence": "12345", "trade_id": "123", "time": "2018-11-29T05:21:06Z", "price": "38.50", "size": "105.34" } self.fake_trade = trade.Trade(fake_trade_dict) self.test_datetime = datetime.datetime(2018, 6, 10, 11, 13, 58, 384) self.test_datetime_zero_sec_ms = datetime.datetime( 2018, 6, 10, 11, 13, 0, 0)
def matchTrade(self, currentOrder, matchOrder, matchPrice): self.logger.info( "Matching two orders currentOrderId:[%s], matchOrderId:[%s], matchPrice:[%f]" % (currentOrder.orderId, matchOrder.orderId, matchPrice)) self.logger.info("Matching two orders currentOrder:[%s]" % (currentOrder)) self.logger.info("Matching two orders matchOrder:[%s]" % (matchOrder)) trades = [] self.tradeId += 1 tradeQty = min(currentOrder.getQty(), matchOrder.getQty()) transactionFee = matchPrice * tradeQty * self.transactionFeePercentage currentOrder.extraInfo['transactionFee'] = transactionFee matchOrder.extraInfo['transactionFee'] = transactionFee trades.append( trade.Trade(currentOrder.getAccountId(), self.tradeId, tradeQty, matchPrice, currentOrder.getTradeAction(), self.symbol, extraInfo=currentOrder.extraInfo)) trades.append( trade.Trade(matchOrder.getAccountId(), self.tradeId, tradeQty, matchPrice, matchOrder.getTradeAction(), self.symbol, extraInfo=matchOrder.extraInfo)) currentOrder.setQty(currentOrder.getQty() - tradeQty) matchOrder.setQty(matchOrder.getQty() - tradeQty) return trades
def process_trade(self, msg): if msg.get('product_id') == self.product: cur_trade = trade.Trade(msg) isotime = dateutil.parser.parse(msg.get('time')).replace(microsecond=0) if isotime < self.cur_candlestick.time: prev_stick = Candlestick(existing_candlestick=self.candlesticks[-1]) self.candlesticks = self.candlesticks[:-1] prev_stick.add_trade(cur_trade) self.add_stick(prev_stick) else: if isotime > self.cur_candlestick.time + datetime.timedelta(seconds=self.period_size): self.close_candlestick() self.new_candlestick(self.cur_candlestick.time + datetime.timedelta(seconds=self.period_size)) self.cur_candlestick.add_trade(cur_trade) self.cur_candlestick.print_stick(self.name)
def create(ticker, entry, exit, stop_loss, expiration, sell_at_end_of_day, notes): j = trade_journal.TradeJournal(configuration.TRADE_JOURNAL_TITLE) j.bootstrap() b = brokerage.Brokerage(True, configuration.ALPACA_KEY_ID, configuration.ALPACA_SECRET_KEY, configuration.DATA_FOLDER) t = trade.Trade(datetime.timestamp(datetime.now()), ticker, 0.0, 0.0, 0.0, exit, entry, stop_loss, 0.0, 0.0, 'QUEUED', '', '', 'long', 0, expiration, sell_at_end_of_day) metadata = json.dumps(technical_analysis.analyze(ticker, b)) count = 0 for row in j.journal[0].getRows(): if row[0] != '': count += 1 else: break j.create_queued_trade(count + 1, ticker, 'long', entry, exit, stop_loss, notes, expiration, metadata, sell_at_end_of_day) print("Trade Created.")
def __init__(self, db, tele, name='primary', in_strategy_test=False, color='blue', order=0, muted=False): self.db = db self.tele = tele self.name = name self.can_buy_conditions = [] self.should_buy_conditions = [] self.should_sell_conditions = [] self.cur_trade = trade.Trade(0, self.db, self.tele, False, strategy=self.name) self.in_strategy_test = in_strategy_test self.color = color self.order = order self.last_sell = time.time_ns() self.muted = muted
import os from os.path import dirname, join import time import dotenv import matplotlib.pyplot as plt import numpy import gather_data import strategies.momentum as momentum import strategies.spike as spike import strategy_test import trade trade = trade.Trade() trade.run() time.sleep(1)
assert rows[0][5] == 'Notes', f'Queued Trade [0][5]: {rows[0][5]}' assert rows[0][6] == 'Expiration in Days', f'Queued Trade [0][6]: {rows[0][6]}' assert rows[0][7] == 'Metadata', f'Queued Trade [0][7]: {rows[0][7]}' assert rows[0][8] == 'Base64', f'Queued Trade [0][8]: {rows[0][8]}' assert rows[1][0] == '', f'Queued Trade [1][0]: {rows[1][0]}' assert rows[1][1] == '', f'Queued Trade [1][1]: {rows[1][1]}' assert rows[1][2] == '', f'Queued Trade [1][2]: {rows[1][2]}' assert rows[1][3] == '', f'Queued Trade [1][3]: {rows[1][3]}' assert rows[1][4] == '', f'Queued Trade [1][4]: {rows[1][4]}' assert rows[1][5] == '', f'Queued Trade [1][5]: {rows[0][5]}' assert rows[1][6] == '', f'Queued Trade [1][6]: {rows[1][6]}' assert rows[1][7] == '', f'Queued Trade [1][7]: {rows[1][7]}' assert rows[1][8] == '', f'Queued Trade [1][8]: {rows[1][8]}' t = trade.Trade(10, 'TSLA', 2, 3, 50, 300, 200, 150, 305, 199.5, 'CLOSED', 4, 5, 'long', 1, 4) j.create_trade_record(t, 'notes', 'metadata', 'base64') j.update_trade_record(t, buy_metadata='Test') rows = ss[1].getRows() assert rows[0][0] == 'ID', f'Queued Trade [0][0]: {rows[0][0]}' assert rows[0][1] == 'Create Date', f'Queued Trade [0][1]: {rows[0][1]}' assert rows[0][2] == 'Ticker', f'Queued Trade [0][2]: {rows[0][2]}' assert rows[0][3] == 'Type', f'Queued Trade [0][3]: {rows[0][3]}' assert rows[0][4] == 'Status', f'Queued Trade [0][4]: {rows[0][4]}' assert rows[0][5] == 'Entry Date', f'Queued Trade [0][5]: {rows[0][5]}' assert rows[0][6] == 'Exit Date', f'Queued Trade [0][6]: {rows[0][6]}' assert rows[0][ 7] == 'Planned Entry Price', f'Queued Trade [0][7]: {rows[0][7]}' assert rows[0][8] == 'Planned Exit Price', f'Queued Trade [0][8]: {rows[0][8]}' assert rows[0][9] == 'Stop Loss', f'Queued Trade [0][9]: {rows[0][9]}'