def convert_shares_to_capital(self, ticker, num_shares):
        stock_snapshot = self._find_stock_snapshot_by_ticker(ticker)
        stock_snapshot_helper = StockSnapshotHelper(stock_snapshot)
        mid_price = stock_snapshot_helper.get_mid_price()
        amount = mid_price * num_shares

        return amount
    def notify(self, market_snapshot: MarketSnapshot):
        decisions = []

        for i, stock_snapshot in enumerate(market_snapshot.stock_snapshots):
            stock_snapshot_helper = StockSnapshotHelper(stock_snapshot)

            mid_price = stock_snapshot_helper.get_mid_price()
            curr_mcad = self.mcads[i].evaluate(mid_price)
            self.visualization_data.add_price(stock_snapshot.ticker, mid_price)

            if curr_mcad == CalculationStatus.Invalid:
                self.visualization_data.add_mcad(stock_snapshot.ticker, 0)
                continue
            else:
                self.visualization_data.add_mcad(stock_snapshot.ticker,
                                                 curr_mcad)

            if self.old_mcads[i] == CalculationStatus.Invalid:
                self.old_mcads[i] = curr_mcad
                continue

            del_mcad = SignFunction.evaluate(
                curr_mcad) - SignFunction.evaluate(self.old_mcads[i])
            self.old_mcads[i] = curr_mcad

            if del_mcad > 0:
                decisions.append(
                    (stock_snapshot.ticker, -self.transaction_amount))
            elif del_mcad < 0:
                decisions.append(
                    (stock_snapshot.ticker, self.transaction_amount))

        return decisions
    def convert_capital_to_shares(self, ticker, amount):
        assert amount > 0

        stock_snapshot = self._find_stock_snapshot_by_ticker(ticker)
        stock_snapshot_helper = StockSnapshotHelper(stock_snapshot)
        mid_price = stock_snapshot_helper.get_mid_price()
        num_shares = floor(amount / mid_price)
        extra_capital = amount - num_shares * mid_price
        return num_shares, extra_capital
    def notify(self, market_snapshot: MarketSnapshot):
        decisions = []

        for i, stock_snapshot in enumerate(market_snapshot.stock_snapshots):
            stock_snapshot_helper = StockSnapshotHelper(stock_snapshot)

            mid_price = stock_snapshot_helper.get_mid_price()
            curr_mcad = self.mcads[i].evaluate(mid_price)
            self.visualization_data.add_price(stock_snapshot.ticker, mid_price)

            if curr_mcad == CalculationStatus.Invalid:
                self.visualization_data.add_mcad(stock_snapshot.ticker, 0)
                self.visualization_data.add_signal_line(
                    stock_snapshot.ticker, 0)
                continue
            else:
                self.visualization_data.add_mcad(stock_snapshot.ticker,
                                                 curr_mcad)

            signal_line_value = self.signal_lines[i].evaluate(curr_mcad)
            if signal_line_value == CalculationStatus.Invalid:
                self.visualization_data.add_signal_line(
                    stock_snapshot.ticker, 0)
                continue
            else:
                self.visualization_data.add_signal_line(
                    stock_snapshot.ticker, signal_line_value)

            curr_del = SignFunction.evaluate(curr_mcad - signal_line_value)

            if self.old_dels[i] == CalculationStatus.Invalid:
                self.old_dels[i] = curr_del
                continue

            should_buy = SignFunction.evaluate(
                curr_del) - SignFunction.evaluate(self.old_dels[i])

            if should_buy > 0:
                decisions.append(
                    (stock_snapshot.ticker, -self.transaction_amount))
            elif should_buy < 0:
                decisions.append(
                    (stock_snapshot.ticker, self.transaction_amount))

            self.old_dels[i] = curr_del

        return decisions
    def get_date(self):
        first_stock_snapshot = self.market_snapshot.stock_snapshots[0]
        stock_snapshot_helper = StockSnapshotHelper(first_stock_snapshot)

        return stock_snapshot_helper.get_date()
    def is_end_of_trading_hours(self):
        first_stock_snapshot = self.market_snapshot.stock_snapshots[0]
        stock_snapshot_helper = StockSnapshotHelper(first_stock_snapshot)

        return stock_snapshot_helper.is_end_of_trading_hours()
Exemple #7
0
    def notify(self, market_snapshot: MarketSnapshot):
        decisions = []

        u_reset = []
        l_reset = []

        for i, stock_snapshot in enumerate(market_snapshot.stock_snapshots):
            u_reset.append(0)
            l_reset.append(0)

            upper = 0
            lower = 0

            stock_snapshot_helper = StockSnapshotHelper(stock_snapshot)

            close_price = stock_snapshot_helper.get_mid_price()
            high = stock_snapshot_helper.get_high()
            low = stock_snapshot_helper.get_low()

            self.high_total_data[i].push(high)
            self.low_total_data[i].push(low)

            highesthigh = self.high_total_data[i].get_max()
            lowestlow = self.low_total_data[i].get_min()

            if self.high_total_data[i].isFull():
                current_fast_k = StochasticOscillator.evaluate(close_price,highesthigh,lowestlow)

                current_k_percent = self.k_percent[i].evaluate(current_fast_k)

                if current_k_percent == CalculationStatus.Invalid:
                    self.old_k_percent[i] = current_k_percent
                    continue
                else:
                    self.old_k_percent[i] = current_k_percent
                    current_d_percent = self.d_percent[i].evaluate(current_k_percent)

                    if current_d_percent == CalculationStatus.Invalid:
                        self.old_d_percent[i] = current_d_percent
                        continue

                    upper = SignFunction.evaluate(current_d_percent - self.upper_bound)

                    lower = SignFunction.evaluate(self.lower_bound - current_d_percent)

                    self.old_d_percent[i] = current_d_percent

            if (upper == 1) and (u_reset[i] == 0):
                dec_value = 1
                u_reset[i] = 1
                l_reset[i] = 0

            elif (lower == 1) and (l_reset[i] == 0):
                dec_value = -1
                u_reset[i] = 0
                l_reset[i] = 1
            else:
                dec_value = 0

            if dec_value > 0:
                decisions.append((stock_snapshot.ticker, -self.transaction_amount))
            elif dec_value < 0:
                decisions.append((stock_snapshot.ticker, +self.transaction_amount))
            else:
                decisions = []


            return decisions