График (дискретная сумма за период времени) и (период времени) дает график с разрывами - PullRequest
0 голосов
/ 10 мая 2019

У меня есть несколько списков, связанных с покупкой и продажей биткойнов.Одна - это цена (покупки или продажи), а другая - связанная дата.Когда я строю график всех денег, заработанных (или потерянных) от моей покупки / продажи за разные промежутки времени, в сравнении с этими разными отрезками времени, результат получается «неустойчивым» - не то, что я ожидал.И я думаю, что моя логика может быть неправильной

Мои исходные списки ввода выглядят так:

dates=['2013-05-12 00:00:00', '2013-05-13 00:00:00', '2013-05-14 00:00:00', ....]

prices=[114.713, 117.18, 114.5, 114.156,...]

#simple moving average of prices calced over a short period
sma_short_list = [None, None, None, None, 115.2098, 116.8872, 118.2272, 119.42739999999999, 121.11219999999999, 122.59219999999998....]

#simple moving average of prices calced over a longer period
sma_long_list = [...None, None, None, None, 115.2098, 116.8872, 118.2272, 119.42739999999999, 121.11219999999999, 122.59219999999998....]

На основе пересечения скользящих средних (которые были рассчитаны на основеhttps://stackoverflow.com/a/14884058/2089889) Я буду либо покупать, либо продавать биткойн по дате / цене, когда произошло кроссовер.

Я хотел построить график того, сколько (этот день принес бы мне такой подход) против (несколько дней назад, когда я начал этот подход)

НО

У меня возникли проблемы с тем, что результирующий график действительно изменчив. Сначала я подумал, что это потому, что у меня есть еще одинкупи, чем продай (или наоборот), поэтому я попытался объяснить это, но это все равно было нестабильно. NOTE следующий код вызывается в цикле for days_ago in reversed(range(0,approach_started_days_ago)):, поэтому каждый раз, когда следующий код выполняется, он долженвыкладывайте, сколько денег заработал бы этот подход, если бы я его начал days_ago (я называю это bank ), и изменчивый сюжет - days_ago против банк

dates = data_dict[file]['dates']
prices = data_dict[file]['prices']
sma_short_list = data_dict[file]['sma'][str(sma_short)]
sma_long_list = data_dict[file]['sma'][str(sma_long)]

prev_diff=0
bank = 0.0
buy_amt, sell_amt = 0.0,0.0
buys,sells, amt, first_tx_amt, last_tx_amt=0,0,0, 0, 0
start, finish = len(dates)-days_ago,len(dates)
for j in range(start, finish):
    diff = sma_short_list[j]-sma_long_list[j]
    amt=prices[j]

    #If a crossover of the moving averages occured
    if diff*prev_diff<0:
        if first_tx_amt==0:
            first_tx_amt = amt
        #BUY
        if diff>=0 and prev_diff<=0:
            buys+=1
            bank = bank - amt
            #buy_amt = buy_amt+amt
            #print('BUY ON %s (PRICE %s)'%(dates[j], prices[j]))
        #SELL
        elif diff<=0 and prev_diff>=0:
            sells+=1
            bank = bank + amt
            #sell_amt = sell_amt + amt
            #print('SELL ON %s (PRICE %s)'%(dates[j], prices[j]))
    prev_diff=diff

last_tx_amt=amt
#if buys > sells, subtract last
if buys > sells:
    bank = bank + amt
elif sells < buys:
    bank = bank - amt

#THIS IS RELATED TO SOME OTHER APPROACH I TRIED
#a = (buy_amt) / buys if buys else 0
#b = (sell_amt) / sells if sells else 0
#diff_of_sum_of_avg_tx_amts = a - b

start_date = datetime.now()-timedelta(days=days_ago)

return bank, start_date

1 Ответ

0 голосов
/ 11 мая 2019

Я решил, что моя сумма в «банке» будет той суммой, которую я продал - суммой, которую я купил

Но, если первый кроссовер был продажей, я не хочу считать это (я собираюсь предположить, что первый сделанный ткс будет покупкой.

Тогда, если последняя сделанная мною сделка будет покупкой (отрицательно для моего банка), я посчитаю сегодняшнюю цену в свой «банк»

if last_tx_type=='buy':
    sell_amt=sell_amt+prices[len(prices)-1] #add the current amount to the sell amount if the last purchase you made is a buy
if sell_first==True:
    sell_amt = sell_amt - first_tx_amt #if the first thing you did was sell, you do not want to add this to money made b/c it was with apriori money

bank = sell_amt-buy_amt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...