Сохранение минимальной средней прибыли при покупке выше - PullRequest
0 голосов
/ 24 декабря 2018

Учитывая цену и сумму актива, который я приобрел ранее, я бы хотел купить больше сейчас, пока цена выше.

Однако я хочу, чтобы процент прибыли от этой новой суммы, которую я покупаю, плюс сумму, которую я купил ранее, был больше, чем определенный минимум (0,5%).Процент прибыли рассчитывается с использованием средневзвешенного значения, которое определяется по цене и количеству, которые я уже приобрел, а также по цене и максимальному количеству, которое я могу купить сейчас.

Поэтому мне нужен код, который может рассчитать максимальноеколичество, которое я могу купить сейчас по текущей цене, и при этом поддерживать общий процент прибыли не менее 0,5%

. Этот код работает, но мне нужно, чтобы он был быстрее, когда я установил для precision значение больше 2и максимальное значение, которое я бы использовал, равно 8. Как сделать этот код быстрее, если я использую более высокое значение precision?

import time

initial_buy_quantity = 643
initial_buy_price = 1.23
current_buy_price = 1.26
current_sell_price = 1.26
current_profit = (1 - (initial_buy_price / current_sell_price)) * 100
min_profit_percent = 0.5
precision = 3

print("Initial buy quantity " + str(initial_buy_quantity))
print("Initial buy price " + str(initial_buy_price))
print("Current profit %: " + str(current_sell_price))

start_time = time.time()
temp_quantity = 0
temp_profit = 0
step = 10 ** (-1 * precision)
iters = 0

while temp_profit < min_profit_percent:
    iters += 1
    temp_quantity += step
    total_quantity = initial_buy_quantity + temp_quantity 
    total_value = (initial_buy_price * initial_buy_quantity) + (current_buy_price * temp_quantity) 
    avg_price = total_value / total_quantity   
    temp_profit = (1 - (initial_buy_price / avg_price)) * 100

print("Iterations: " + str(iters))
print("Duration in seconds: " + str(time.time() - start_time))
print("Max quantity I can buy now and maintain my min profit %: " + str(temp_quantity))
print("Weighted avg price: " + str(avg_price))

print("Profit when buying new quantity: " + str(temp_profit))

Продолжительность при точности 3: 0,23786091804504395 секунд

Продолжительность при точности 6: 2,476567268371582 секунд

1 Ответ

0 голосов
/ 24 декабря 2018

Это поиск корня (ноль temp_profit-min_profit_percent как функция temp_quantity);нет причин делать это с помощью линейного поиска.Обычная обёртка для использования - scipy.optimize.brentq, хотя собственный поиск по пополам прост и уже на намного быстрее линейного поиска (с той же точностью).

...