Added adding and removing trades to/from maintenance_margin in freqtradebot
This commit is contained in:
parent
82917e2705
commit
ff63c792b2
@ -16,7 +16,7 @@ from freqtrade.configuration import validate_config_consistency
|
|||||||
from freqtrade.data.converter import order_book_to_dataframe
|
from freqtrade.data.converter import order_book_to_dataframe
|
||||||
from freqtrade.data.dataprovider import DataProvider
|
from freqtrade.data.dataprovider import DataProvider
|
||||||
from freqtrade.edge import Edge
|
from freqtrade.edge import Edge
|
||||||
from freqtrade.enums import RPCMessageType, SellType, State, TradingMode
|
from freqtrade.enums import Collateral, RPCMessageType, SellType, State, TradingMode
|
||||||
from freqtrade.exceptions import (DependencyException, ExchangeError, InsufficientFundsError,
|
from freqtrade.exceptions import (DependencyException, ExchangeError, InsufficientFundsError,
|
||||||
InvalidOrderException, PricingError)
|
InvalidOrderException, PricingError)
|
||||||
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_seconds
|
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_seconds
|
||||||
@ -42,6 +42,9 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
This is from here the bot start its logic.
|
This is from here the bot start its logic.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
collateral: Optional[Collateral] = None
|
||||||
|
trading_mode: TradingMode = TradingMode.SPOT
|
||||||
|
|
||||||
def __init__(self, config: Dict[str, Any]) -> None:
|
def __init__(self, config: Dict[str, Any]) -> None:
|
||||||
"""
|
"""
|
||||||
Init all variables and objects the bot needs to work
|
Init all variables and objects the bot needs to work
|
||||||
@ -106,13 +109,18 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
if self.config.get("trading_mode"):
|
if self.config.get("trading_mode"):
|
||||||
self.trading_mode = TradingMode(self.config.get("trading_mode"))
|
self.trading_mode = TradingMode(self.config.get("trading_mode"))
|
||||||
|
|
||||||
|
if self.config.get('collateral'):
|
||||||
|
self.collateral = Collateral(self.config.get('collateral'))
|
||||||
|
|
||||||
# Start calculating maintenance margin if on cross margin
|
# Start calculating maintenance margin if on cross margin
|
||||||
# TODO: Add margin_mode to freqtrade.configuration?
|
# TODO: Add margin_mode to freqtrade.configuration?
|
||||||
if self.config.get('collateral') == "cross":
|
if self.collateral == Collateral.CROSS:
|
||||||
|
|
||||||
self.maintenance_margin = MaintenanceMargin(
|
self.maintenance_margin = MaintenanceMargin(
|
||||||
exchange_name=self.exchange.name,
|
exchange_name=self.exchange.name,
|
||||||
trading_mode=self.trading_mode)
|
trading_mode=self.trading_mode)
|
||||||
self.maintenance_margin.run
|
|
||||||
|
self.maintenance_margin.run()
|
||||||
|
|
||||||
def notify_status(self, msg: str) -> None:
|
def notify_status(self, msg: str) -> None:
|
||||||
"""
|
"""
|
||||||
@ -590,6 +598,9 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
if order_status == 'closed':
|
if order_status == 'closed':
|
||||||
self.update_trade_state(trade, order_id, order)
|
self.update_trade_state(trade, order_id, order)
|
||||||
|
|
||||||
|
if self.collateral == Collateral.CROSS:
|
||||||
|
self.maintenance_margin.add_new_trade(trade)
|
||||||
|
|
||||||
Trade.query.session.add(trade)
|
Trade.query.session.add(trade)
|
||||||
Trade.commit()
|
Trade.commit()
|
||||||
|
|
||||||
@ -1146,9 +1157,18 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
reason='Auto lock')
|
reason='Auto lock')
|
||||||
|
|
||||||
self._notify_sell(trade, order_type)
|
self._notify_sell(trade, order_type)
|
||||||
|
self._remove_maintenance_trade(trade)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def _remove_maintenance_trade(self, trade: Trade):
|
||||||
|
"""
|
||||||
|
Removes a trade from the maintenance margin object
|
||||||
|
:param trade: The trade to remove from the maintenance margin
|
||||||
|
"""
|
||||||
|
if self.collateral == Collateral.CROSS:
|
||||||
|
self.maintenance_margin.remove_trade(trade)
|
||||||
|
|
||||||
def _notify_sell(self, trade: Trade, order_type: str, fill: bool = False) -> None:
|
def _notify_sell(self, trade: Trade, order_type: str, fill: bool = False) -> None:
|
||||||
"""
|
"""
|
||||||
Sends rpc notification when a sell occurred.
|
Sends rpc notification when a sell occurred.
|
||||||
|
@ -15,7 +15,7 @@ class MaintenanceMargin:
|
|||||||
def margin_level(self):
|
def margin_level(self):
|
||||||
# This is the current value of all assets,
|
# This is the current value of all assets,
|
||||||
# and if you pass below liq_level, you are liquidated
|
# and if you pass below liq_level, you are liquidated
|
||||||
# TODO: Add args to formula
|
# TODO-lev: Add args to formula
|
||||||
return liquidation_price(
|
return liquidation_price(
|
||||||
trading_mode=self.trading_mode,
|
trading_mode=self.trading_mode,
|
||||||
exchange_name=self.exchange_name
|
exchange_name=self.exchange_name
|
||||||
|
Loading…
Reference in New Issue
Block a user