Пример #1
0
    def create_transaction(self, my_sim, prior_signal, trader, prior_bank):
        '''
            This is a basic model:
            1. Spend full cash_bank at first BUY signal
            2. Sell full crypto_bank at first SELL signal after a BUY.
        '''

        # If current signal as the same as prior, we do not act, so bank will stay the same.
        if prior_signal != my_sim.signal and my_sim.signal != "HOLD":
            # This means we have cash on hand because prior action was SELL.
            if my_sim.signal == "BUY":
                my_bank = Bank(
                    signal_simulation=my_sim,
                    user=trader,
                    crypto_bank=str(
                        decimal.Decimal(prior_bank.cash_bank) /
                        decimal.Decimal(my_sim.crypto_candle.period_close)),
                    cash_bank=str(0.0))
                buy_switch = "BUY"
            elif my_sim.signal == "SELL":
                my_bank = Bank(
                    signal_simulation=my_sim,
                    user=trader,
                    crypto_bank=str(0.0),
                    cash_bank=str(
                        decimal.Decimal(prior_bank.crypto_bank) *
                        decimal.Decimal(my_sim.crypto_candle.period_close)))
                buy_switch = "SELL"
            my_bank.save()

        else:
            my_bank = prior_bank
            buy_switch = my_sim.signal

        return (my_bank, buy_switch)
Пример #2
0
    def transaction_history(self, trader_name="admin"):
        '''
            Transaction history created for simulation subset. This is separate from self.update_signal because it always needs to go in chronological order whereas update_signal does not.
        '''
        # initialize variables to be used in loop
        # we start with "SELL" because we haven't bought anything yet.
        buy_switch = "SELL"
        trader = get_user_model().objects.get_or_create(
            username=trader_name)[0]
        prior_sim = None

        # delete if bank object already exists, then re-create.
        Bank.objects.filter(
            signal_simulation__simulation=self.simulation,
            user=trader,
            signal_simulation__crypto_candle__crypto_traded=self.currency
        ).delete()

        for candle in self.candle_data.order_by('period_start_timestamp'):

            try:
                sim = get_object_or_404(SignalSimulation,
                                        crypto_candle=candle,
                                        simulation=self.simulation)
            except:
                # skip loop if SignalSimulation object is not found.
                next
            else:
                # Initialize our starting cash amount (we know it is beginning because there is no prior_sim.
                if prior_sim is None:

                    my_bank = Bank(
                        signal_simulation=sim,
                        user=trader,
                        # crypto_bank=(0.0),
                        cash_bank='1.0')
                    my_bank.save()
                elif sim.signal:
                    # Remove HOLD signal, make sure it copies signal from prior day
                    if sim.signal == "HOLD":

                        if prior_sim.signal:
                            sim.signal = prior_sim.signal
                        # If we are missing prior signal, then we just assume "SELL" because we haven't bought. Because we are sorting by start date, this will only happen on day 1.
                        else:
                            sim.signal = "SELL"
                        sim.save()
                    # simulate our bank
                    my_bank_results = self.create_transaction(
                        sim, buy_switch, trader, my_bank)
                    my_bank = my_bank_results[0]
                    buy_switch = my_bank_results[1]
                prior_sim = sim
        return my_bank
Пример #3
0
    def transaction_history(self, trader_name="admin"):
        '''
            Transaction history created for simulation subset. This is separate from self.update_signal because it always needs to go in chronological order whereas update_signal does not.
        '''
        # initialize variables to be used in loop
        buy_switch = "SELL"
        trader = get_user_model().objects.get_or_create(
            username=trader_name)[0]
        prior_sim = ""
        for candle in self.candle_subset.order_by('period_start_timestamp'):

            try:
                sim = get_object_or_404(SignalSimulation,
                                        crypto_candle=candle,
                                        simulation=self.simulation_obj)
            except:
                next
            else:
                # Initialize our starting cash amount.
                if prior_sim == "":
                    # delete if bank object already exists, then re-create.
                    Bank.objects.filter(signal_simulation=sim,
                                        user=trader).delete()
                    my_bank = Bank(
                        signal_simulation=sim,
                        user=trader,
                        # crypto_bank=(0.0),
                        cash_bank='1.0')
                    my_bank.save()
                elif sim.signal:
                    # Remove HOLD signal, make sure it copies signal from prior day
                    if sim.signal == "HOLD":
                        sim.signal = prior_sim.signal
                        sim.save()
                    # simulate our bank
                    my_bank_results = self.create_transaction(
                        sim, buy_switch, trader, my_bank)
                    my_bank = my_bank_results[0]
                    buy_switch = my_bank_results[1]
                prior_sim = sim
        return my_bank