Розробка алгоритму partial take profit
Часткове закриття позиції (partial take profit) дозволяє зафіксувати частину прибутку по мірі досягнення цілей, залишаючи залишок позиції для подальшого зростання. Компроміс між «продати все рано» та «утримувати до кінця».
Логіка часткового take profit
Замість однієї ціли — кілька рівнів фіксації прибутку:
Вхід: 1 BTC по $40,000
TP1 (25% позиції): $42,000 → продаємо 0.25 BTC, прибуток $500
TP2 (50% залишку): $44,000 → продаємо 0.375 BTC, прибуток $1,500
TP3 (залишок): trailing stop від $44k → продаємо 0.375 BTC при спрацюванні
Після TP1 переносимо stop-loss у break-even. Після TP2 — trailing stop.
Розрахунок рівнів take profit
Fibonacci-based: рівні на 127.2%, 161.8%, 261.8% від першого руху.
R:R based: якщо стоп $500 (1R), то TP1 = 1R ($500), TP2 = 2R ($1000), TP3 = 3R ($1500).
ATR-based: TP1 = entry + 1.5 × ATR, TP2 = entry + 3 × ATR, TP3 = trailing.
Реалізація
class PartialTakeProfit:
def __init__(self, total_qty, take_profit_levels):
"""
take_profit_levels: [(price, pct_of_current), ...]
"""
self.remaining_qty = total_qty
self.levels = take_profit_levels
self.completed_levels = set()
def check_levels(self, current_price):
actions = []
for i, (tp_price, pct) in enumerate(self.levels):
if i not in self.completed_levels and current_price >= tp_price:
sell_qty = self.remaining_qty * pct
self.remaining_qty -= sell_qty
self.completed_levels.add(i)
actions.append({'action': 'partial_close', 'qty': sell_qty})
return actions
Break-even stop після першого TP: при TP1 виконанні переносимо stop-loss на ціну входу. Залишок позиції — «free ride».
Розробляємо модуль часткового take profit з налаштовуваними рівнями, автоматичним переносом стопу у break-even, опціональним trailing stop для заключної частини позиції.







