Allow disabling accounts

This commit is contained in:
Mark Veidemanis 2023-01-01 15:46:40 +00:00
parent a18c150fe2
commit b31a2d1464
Signed by: m
GPG Key ID: 5ACFCEED46C0904F
6 changed files with 40 additions and 3 deletions

View File

@ -111,13 +111,22 @@ class SignalForm(RestrictedFormMixin, ModelForm):
class AccountForm(RestrictedFormMixin, ModelForm): class AccountForm(RestrictedFormMixin, ModelForm):
class Meta: class Meta:
model = Account model = Account
fields = ("name", "exchange", "api_key", "api_secret", "sandbox", "risk_model") fields = (
"name",
"exchange",
"api_key",
"api_secret",
"sandbox",
"enabled",
"risk_model",
)
help_texts = { help_texts = {
"name": "Name of the account. Informational only.", "name": "Name of the account. Informational only.",
"exchange": "The exchange to use for this account.", "exchange": "The exchange to use for this account.",
"api_key": "The API key or username for the account.", "api_key": "The API key or username for the account.",
"api_secret": "The API secret or password/token for the account.", "api_secret": "The API secret or password/token for the account.",
"sandbox": "Whether to use the sandbox/demo or not.", "sandbox": "Whether to use the sandbox/demo or not.",
"enabled": "Whether the account is enabled.",
"risk_model": "The risk model to use for this account.", "risk_model": "The risk model to use for this account.",
} }

View File

@ -0,0 +1,18 @@
# Generated by Django 4.1.4 on 2023-01-01 15:42
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0049_rename_riskmodel_account_risk_model'),
]
operations = [
migrations.AddField(
model_name='account',
name='enabled',
field=models.BooleanField(default=True),
),
]

View File

@ -109,6 +109,7 @@ class Account(models.Model):
api_key = models.CharField(max_length=255) api_key = models.CharField(max_length=255)
api_secret = models.CharField(max_length=255) api_secret = models.CharField(max_length=255)
sandbox = models.BooleanField(default=False) sandbox = models.BooleanField(default=False)
enabled = models.BooleanField(default=True)
supported_symbols = models.JSONField(default=list) supported_symbols = models.JSONField(default=list)
instruments = models.JSONField(default=list) instruments = models.JSONField(default=list)
currency = models.CharField(max_length=255, null=True, blank=True) currency = models.CharField(max_length=255, null=True, blank=True)

View File

@ -286,6 +286,13 @@ def execute_strategy(callback, strategy, func):
log.debug("Not within trading time range") log.debug("Not within trading time range")
return return
# Don't touch the account if it's disabled.
# We still want to set trends, though.
if func in ("entry", "exit"):
if not strategy.account.enabled:
log.debug("Account is disabled, exiting")
return
# Instruments supported by the account # Instruments supported by the account
if not strategy.account.instruments: if not strategy.account.instruments:
strategy.account.update_info() strategy.account.update_info()

View File

@ -53,7 +53,8 @@ class Positions(LoginRequiredMixin, OTPRequiredMixin, ObjectList):
if account_id: if account_id:
self.extra_context["account_id"] = account_id self.extra_context["account_id"] = account_id
items = [] items = []
accounts = Account.objects.filter(user=self.request.user) # Only get enabled accounts for positions
accounts = Account.objects.filter(user=self.request.user, enabled=True)
for account in accounts: for account in accounts:
try: try:
positions = account.client.get_all_positions() positions = account.client.get_all_positions()

View File

@ -22,7 +22,8 @@ class Profit(LoginRequiredMixin, OTPRequiredMixin, ObjectList):
def get_queryset(self, **kwargs): def get_queryset(self, **kwargs):
items = [] items = []
accounts = Account.objects.filter(user=self.request.user) # Only get enabled accounts
accounts = Account.objects.filter(user=self.request.user, enabled=True)
for account in accounts: for account in accounts:
try: try:
details = account.client.get_account() details = account.client.get_account()