Beispiel #1
0
 def buy(self, price):
     self.cur_trade = trade.Trade(price,
                                  self.db,
                                  self.tele,
                                  True,
                                  self.in_strategy_test,
                                  strategy=self.name)
Beispiel #2
0
 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
Beispiel #3
0
    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 
Beispiel #4
0
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)
Beispiel #6
0
 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
Beispiel #8
0
 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)
Beispiel #9
0
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.")
Beispiel #10
0
 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
Beispiel #11
0
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)
Beispiel #12
0
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]}'