Учитывая цену и сумму актива, который я приобрел ранее, я бы хотел купить больше сейчас, пока цена выше.
Однако я хочу, чтобы процент прибыли от этой новой суммы, которую я покупаю, плюс сумму, которую я купил ранее, был больше, чем определенный минимум (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 секунд