Move from_json to LocalTrade class
This commit is contained in:
@@ -1287,6 +1287,99 @@ class LocalTrade:
|
|||||||
trade.adjust_stop_loss(trade.open_rate, desired_stoploss)
|
trade.adjust_stop_loss(trade.open_rate, desired_stoploss)
|
||||||
logger.info(f"New stoploss: {trade.stop_loss}.")
|
logger.info(f"New stoploss: {trade.stop_loss}.")
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_json(cls, json_str: str) -> Self:
|
||||||
|
"""
|
||||||
|
Create a Trade instance from a json string.
|
||||||
|
|
||||||
|
Used for debugging purposes - please keep.
|
||||||
|
:param json_str: json string to parse
|
||||||
|
:return: Trade instance
|
||||||
|
"""
|
||||||
|
import rapidjson
|
||||||
|
data = rapidjson.loads(json_str)
|
||||||
|
trade = cls(
|
||||||
|
__FROM_JSON=True,
|
||||||
|
id=data["trade_id"],
|
||||||
|
pair=data["pair"],
|
||||||
|
base_currency=data["base_currency"],
|
||||||
|
stake_currency=data["quote_currency"],
|
||||||
|
is_open=data["is_open"],
|
||||||
|
exchange=data["exchange"],
|
||||||
|
amount=data["amount"],
|
||||||
|
amount_requested=data["amount_requested"],
|
||||||
|
stake_amount=data["stake_amount"],
|
||||||
|
strategy=data["strategy"],
|
||||||
|
enter_tag=data["enter_tag"],
|
||||||
|
timeframe=data["timeframe"],
|
||||||
|
fee_open=data["fee_open"],
|
||||||
|
fee_open_cost=data["fee_open_cost"],
|
||||||
|
fee_open_currency=data["fee_open_currency"],
|
||||||
|
fee_close=data["fee_close"],
|
||||||
|
fee_close_cost=data["fee_close_cost"],
|
||||||
|
fee_close_currency=data["fee_close_currency"],
|
||||||
|
open_date=datetime.fromtimestamp(data["open_timestamp"] // 1000, tz=timezone.utc),
|
||||||
|
open_rate=data["open_rate"],
|
||||||
|
open_rate_requested=data["open_rate_requested"],
|
||||||
|
open_trade_value=data["open_trade_value"],
|
||||||
|
close_date=(datetime.fromtimestamp(data["close_timestamp"] // 1000, tz=timezone.utc)
|
||||||
|
if data["close_timestamp"] else None),
|
||||||
|
realized_profit=data["realized_profit"],
|
||||||
|
close_rate=data["close_rate"],
|
||||||
|
close_rate_requested=data["close_rate_requested"],
|
||||||
|
close_profit=data["close_profit"],
|
||||||
|
close_profit_abs=data["close_profit_abs"],
|
||||||
|
exit_reason=data["exit_reason"],
|
||||||
|
exit_order_status=data["exit_order_status"],
|
||||||
|
stop_loss=data["stop_loss_abs"],
|
||||||
|
stop_loss_pct=data["stop_loss_ratio"],
|
||||||
|
stoploss_order_id=data["stoploss_order_id"],
|
||||||
|
stoploss_last_update=(
|
||||||
|
datetime.fromtimestamp(data["stoploss_last_update_timestamp"] // 1000,
|
||||||
|
tz=timezone.utc)
|
||||||
|
if data["stoploss_last_update_timestamp"] else None),
|
||||||
|
initial_stop_loss=data["initial_stop_loss_abs"],
|
||||||
|
initial_stop_loss_pct=data["initial_stop_loss_ratio"],
|
||||||
|
min_rate=data["min_rate"],
|
||||||
|
max_rate=data["max_rate"],
|
||||||
|
leverage=data["leverage"],
|
||||||
|
interest_rate=data["interest_rate"],
|
||||||
|
liquidation_price=data["liquidation_price"],
|
||||||
|
is_short=data["is_short"],
|
||||||
|
trading_mode=data["trading_mode"],
|
||||||
|
funding_fees=data["funding_fees"],
|
||||||
|
amount_precision=data.get('amount_precision', None),
|
||||||
|
price_precision=data.get('price_precision', None),
|
||||||
|
precision_mode=data.get('precision_mode', None),
|
||||||
|
contract_size=data.get('contract_size', None),
|
||||||
|
)
|
||||||
|
for order in data["orders"]:
|
||||||
|
|
||||||
|
order_obj = Order(
|
||||||
|
amount=order["amount"],
|
||||||
|
ft_amount=order["amount"],
|
||||||
|
ft_order_side=order["ft_order_side"],
|
||||||
|
ft_pair=order["pair"],
|
||||||
|
ft_is_open=order["is_open"],
|
||||||
|
order_id=order["order_id"],
|
||||||
|
status=order["status"],
|
||||||
|
average=order["average"],
|
||||||
|
cost=order["cost"],
|
||||||
|
filled=order["filled"],
|
||||||
|
order_date=datetime.strptime(order["order_date"], DATETIME_PRINT_FORMAT),
|
||||||
|
order_filled_date=(datetime.fromtimestamp(
|
||||||
|
order["order_filled_timestamp"] // 1000, tz=timezone.utc)
|
||||||
|
if order["order_filled_timestamp"] else None),
|
||||||
|
order_type=order["order_type"],
|
||||||
|
price=order["price"],
|
||||||
|
ft_price=order["price"],
|
||||||
|
remaining=order["remaining"],
|
||||||
|
funding_fee=order.get("funding_fee", None),
|
||||||
|
)
|
||||||
|
trade.orders.append(order_obj)
|
||||||
|
|
||||||
|
return trade
|
||||||
|
|
||||||
|
|
||||||
class Trade(ModelBase, LocalTrade):
|
class Trade(ModelBase, LocalTrade):
|
||||||
"""
|
"""
|
||||||
@@ -1730,96 +1823,3 @@ class Trade(ModelBase, LocalTrade):
|
|||||||
Order.status == 'closed'
|
Order.status == 'closed'
|
||||||
)).scalar_one()
|
)).scalar_one()
|
||||||
return trading_volume
|
return trading_volume
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def from_json(cls, json_str: str) -> Self:
|
|
||||||
"""
|
|
||||||
Create a Trade instance from a json string.
|
|
||||||
|
|
||||||
Used for debugging purposes - please keep.
|
|
||||||
:param json_str: json string to parse
|
|
||||||
:return: Trade instance
|
|
||||||
"""
|
|
||||||
import rapidjson
|
|
||||||
data = rapidjson.loads(json_str)
|
|
||||||
trade = cls(
|
|
||||||
__FROM_JSON=True,
|
|
||||||
id=data["trade_id"],
|
|
||||||
pair=data["pair"],
|
|
||||||
base_currency=data["base_currency"],
|
|
||||||
stake_currency=data["quote_currency"],
|
|
||||||
is_open=data["is_open"],
|
|
||||||
exchange=data["exchange"],
|
|
||||||
amount=data["amount"],
|
|
||||||
amount_requested=data["amount_requested"],
|
|
||||||
stake_amount=data["stake_amount"],
|
|
||||||
strategy=data["strategy"],
|
|
||||||
enter_tag=data["enter_tag"],
|
|
||||||
timeframe=data["timeframe"],
|
|
||||||
fee_open=data["fee_open"],
|
|
||||||
fee_open_cost=data["fee_open_cost"],
|
|
||||||
fee_open_currency=data["fee_open_currency"],
|
|
||||||
fee_close=data["fee_close"],
|
|
||||||
fee_close_cost=data["fee_close_cost"],
|
|
||||||
fee_close_currency=data["fee_close_currency"],
|
|
||||||
open_date=datetime.fromtimestamp(data["open_timestamp"] // 1000, tz=timezone.utc),
|
|
||||||
open_rate=data["open_rate"],
|
|
||||||
open_rate_requested=data["open_rate_requested"],
|
|
||||||
open_trade_value=data["open_trade_value"],
|
|
||||||
close_date=(datetime.fromtimestamp(data["close_timestamp"] // 1000, tz=timezone.utc)
|
|
||||||
if data["close_timestamp"] else None),
|
|
||||||
realized_profit=data["realized_profit"],
|
|
||||||
close_rate=data["close_rate"],
|
|
||||||
close_rate_requested=data["close_rate_requested"],
|
|
||||||
close_profit=data["close_profit"],
|
|
||||||
close_profit_abs=data["close_profit_abs"],
|
|
||||||
exit_reason=data["exit_reason"],
|
|
||||||
exit_order_status=data["exit_order_status"],
|
|
||||||
stop_loss=data["stop_loss_abs"],
|
|
||||||
stop_loss_pct=data["stop_loss_ratio"],
|
|
||||||
stoploss_order_id=data["stoploss_order_id"],
|
|
||||||
stoploss_last_update=(
|
|
||||||
datetime.fromtimestamp(data["stoploss_last_update_timestamp"] // 1000,
|
|
||||||
tz=timezone.utc)
|
|
||||||
if data["stoploss_last_update_timestamp"] else None),
|
|
||||||
initial_stop_loss=data["initial_stop_loss_abs"],
|
|
||||||
initial_stop_loss_pct=data["initial_stop_loss_ratio"],
|
|
||||||
min_rate=data["min_rate"],
|
|
||||||
max_rate=data["max_rate"],
|
|
||||||
leverage=data["leverage"],
|
|
||||||
interest_rate=data["interest_rate"],
|
|
||||||
liquidation_price=data["liquidation_price"],
|
|
||||||
is_short=data["is_short"],
|
|
||||||
trading_mode=data["trading_mode"],
|
|
||||||
funding_fees=data["funding_fees"],
|
|
||||||
amount_precision=data.get('amount_precision', None),
|
|
||||||
price_precision=data.get('price_precision', None),
|
|
||||||
precision_mode=data.get('precision_mode', None),
|
|
||||||
contract_size=data.get('contract_size', None),
|
|
||||||
)
|
|
||||||
for order in data["orders"]:
|
|
||||||
|
|
||||||
order_obj = Order(
|
|
||||||
amount=order["amount"],
|
|
||||||
ft_amount=order["amount"],
|
|
||||||
ft_order_side=order["ft_order_side"],
|
|
||||||
ft_pair=order["pair"],
|
|
||||||
ft_is_open=order["is_open"],
|
|
||||||
order_id=order["order_id"],
|
|
||||||
status=order["status"],
|
|
||||||
average=order["average"],
|
|
||||||
cost=order["cost"],
|
|
||||||
filled=order["filled"],
|
|
||||||
order_date=datetime.strptime(order["order_date"], DATETIME_PRINT_FORMAT),
|
|
||||||
order_filled_date=(datetime.fromtimestamp(
|
|
||||||
order["order_filled_timestamp"] // 1000, tz=timezone.utc)
|
|
||||||
if order["order_filled_timestamp"] else None),
|
|
||||||
order_type=order["order_type"],
|
|
||||||
price=order["price"],
|
|
||||||
ft_price=order["price"],
|
|
||||||
remaining=order["remaining"],
|
|
||||||
funding_fee=order.get("funding_fee", None),
|
|
||||||
)
|
|
||||||
trade.orders.append(order_obj)
|
|
||||||
|
|
||||||
return trade
|
|
||||||
|
|||||||
Reference in New Issue
Block a user