Move order settings to OrderSettings
This commit is contained in:
parent
69cf8dcc10
commit
b4afa32a6e
|
@ -127,16 +127,10 @@ class StrategyForm(RestrictedFormMixin, ModelForm):
|
|||
"risk_model",
|
||||
"trading_times",
|
||||
"order_settings",
|
||||
# "order_type",
|
||||
# "time_in_force",
|
||||
"entry_signals",
|
||||
"exit_signals",
|
||||
"trend_signals",
|
||||
"enabled",
|
||||
# "take_profit_percent",
|
||||
# "stop_loss_percent",
|
||||
# "trailing_stop_loss_percent",
|
||||
# "trade_size_percent",
|
||||
)
|
||||
|
||||
help_texts = {
|
||||
|
@ -147,16 +141,10 @@ class StrategyForm(RestrictedFormMixin, ModelForm):
|
|||
"risk_model": "The risk model to use for this strategy. Highly recommended.",
|
||||
"trading_times": "When the strategy will place new trades.",
|
||||
"order_settings": "Order settings to use for this strategy.",
|
||||
# "order_type": "Market: Buy/Sell at the current market price. Limit: Buy/Sell at a specified price. Limits protect you more against market slippage.",
|
||||
# "time_in_force": "The time in force controls how the order is executed.",
|
||||
"entry_signals": "Callbacks received to these signals will trigger a trade.",
|
||||
"exit_signals": "Callbacks received to these signals will close all trades for the symbol on the account.",
|
||||
"trend_signals": "Callbacks received to these signals will limit the trading direction of the given symbol to the callback direction until further notice.",
|
||||
"enabled": "Whether the strategy is enabled.",
|
||||
# "take_profit_percent": "The take profit will be set at this percentage above/below the entry price.",
|
||||
# "stop_loss_percent": "The stop loss will be set at this percentage above/below the entry price.",
|
||||
# "trailing_stop_loss_percent": "The trailing stop loss will be set at this percentage above/below the entry price. A trailing stop loss will follow the price as it moves in your favor.",
|
||||
# "trade_size_percent": "Percentage of the account balance to use for each trade.",
|
||||
}
|
||||
|
||||
entry_signals = forms.ModelMultipleChoiceField(
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Generated by Django 4.1.6 on 2023-02-15 18:34
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
|
|
@ -369,10 +369,6 @@ class Strategy(models.Model):
|
|||
description = models.TextField(null=True, blank=True)
|
||||
account = models.ForeignKey(Account, on_delete=models.CASCADE)
|
||||
trading_times = models.ManyToManyField(TradingTime)
|
||||
order_type = models.CharField(
|
||||
choices=TYPE_CHOICES, max_length=255, default="market"
|
||||
)
|
||||
time_in_force = models.CharField(choices=TIF_CHOICES, max_length=255, default="gtc")
|
||||
entry_signals = models.ManyToManyField(
|
||||
Signal, related_name="entry_strategies", blank=True
|
||||
)
|
||||
|
@ -383,12 +379,6 @@ class Strategy(models.Model):
|
|||
Signal, related_name="trend_strategies", blank=True
|
||||
)
|
||||
enabled = models.BooleanField(default=False)
|
||||
take_profit_percent = models.FloatField(default=1.5)
|
||||
stop_loss_percent = models.FloatField(default=1.0)
|
||||
trailing_stop_loss_percent = models.FloatField(default=1.0, null=True, blank=True)
|
||||
# price_slippage_percent = models.FloatField(default=2.5)
|
||||
# callback_price_deviation_percent = models.FloatField(default=0.5)
|
||||
trade_size_percent = models.FloatField(default=0.5)
|
||||
trends = models.JSONField(null=True, blank=True)
|
||||
|
||||
asset_group = models.ForeignKey(
|
||||
|
@ -443,9 +433,6 @@ class AssetGroup(models.Model):
|
|||
name = models.CharField(max_length=255)
|
||||
description = models.TextField(null=True, blank=True)
|
||||
|
||||
# Dict like {"RUB": True, "USD": False}
|
||||
# allowed = models.JSONField(null=True, blank=True, default=dict)
|
||||
|
||||
webhook_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
|
||||
|
||||
when_no_data = models.IntegerField(choices=MAPPING_CHOICES, default=7)
|
||||
|
@ -457,7 +444,7 @@ class AssetGroup(models.Model):
|
|||
when_bearish = models.IntegerField(choices=MAPPING_CHOICES, default=3)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name}"
|
||||
return self.name
|
||||
|
||||
@property
|
||||
def matches(self):
|
||||
|
@ -499,3 +486,6 @@ class OrderSettings(models.Model):
|
|||
stop_loss_percent = models.FloatField(default=1.0)
|
||||
trailing_stop_loss_percent = models.FloatField(default=1.0, null=True, blank=True)
|
||||
trade_size_percent = models.FloatField(default=0.5)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
|
|
@ -67,7 +67,7 @@ def get_trade_size_in_base(direction, account, strategy, cash_balance, base):
|
|||
"""
|
||||
|
||||
# Convert the trade size in percent to a ratio
|
||||
trade_size_as_ratio = D(strategy.trade_size_percent) / D(100)
|
||||
trade_size_as_ratio = D(strategy.order_settings.trade_size_percent) / D(100)
|
||||
log.debug(f"Trade size as ratio: {trade_size_as_ratio}")
|
||||
|
||||
# Multiply with cash balance to get the trade size in the account's
|
||||
|
@ -146,16 +146,23 @@ def get_tp_sl(direction, strategy, price, round_to=None):
|
|||
:return: Take profit and stop loss prices
|
||||
"""
|
||||
cast = {}
|
||||
if strategy.take_profit_percent != 0:
|
||||
cast["take_profit"] = get_tp(direction, strategy.take_profit_percent, price)
|
||||
if strategy.order_settings.take_profit_percent != 0:
|
||||
cast["take_profit"] = get_tp(
|
||||
direction, strategy.order_settings.take_profit_percent, price
|
||||
)
|
||||
|
||||
if strategy.stop_loss_percent != 0:
|
||||
cast["stop_loss"] = get_sl(direction, strategy.stop_loss_percent, price)
|
||||
if strategy.order_settings.stop_loss_percent != 0:
|
||||
cast["stop_loss"] = get_sl(
|
||||
direction, strategy.order_settings.stop_loss_percent, price
|
||||
)
|
||||
|
||||
# Look up the TSL if required by the strategy
|
||||
if strategy.trailing_stop_loss_percent != 0:
|
||||
if strategy.order_settings.trailing_stop_loss_percent != 0:
|
||||
cast["trailing_stop_loss"] = get_sl(
|
||||
direction, strategy.trailing_stop_loss_percent, price, return_var=True
|
||||
direction,
|
||||
strategy.order_settings.trailing_stop_loss_percent,
|
||||
price,
|
||||
return_var=True,
|
||||
)
|
||||
|
||||
if round_to:
|
||||
|
@ -412,7 +419,7 @@ def execute_strategy(callback, strategy, func):
|
|||
else:
|
||||
log.debug(f"Trend check passed for {symbol} - {direction}")
|
||||
|
||||
type = strategy.order_type
|
||||
type = strategy.order_settings.order_type
|
||||
|
||||
# Get the account's balance in the native account currency
|
||||
cash_balance = strategy.account.client.get_balance()
|
||||
|
@ -450,7 +457,7 @@ def execute_strategy(callback, strategy, func):
|
|||
signal=signal,
|
||||
symbol=symbol,
|
||||
type=type,
|
||||
time_in_force=strategy.time_in_force,
|
||||
time_in_force=strategy.order_settings.time_in_force,
|
||||
# amount_fiat=amount_fiat,
|
||||
amount=amount_rounded,
|
||||
# price=price_bound,
|
||||
|
|
Loading…
Reference in New Issue