# Generated by Django 4.1.7 on 2023-02-24 13:18 import uuid import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('core', '0001_initial'), ] operations = [ migrations.CreateModel( name='Account', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255)), ('exchange', models.CharField(choices=[('alpaca', 'Alpaca'), ('oanda', 'OANDA'), ('fake', 'Fake')], max_length=255)), ('api_key', models.CharField(max_length=255)), ('api_secret', models.CharField(max_length=255)), ('sandbox', models.BooleanField(default=False)), ('enabled', models.BooleanField(default=True)), ('supported_symbols', models.JSONField(default=list)), ('instruments', models.JSONField(default=list)), ('currency', models.CharField(blank=True, max_length=255, null=True)), ('initial_balance', models.FloatField(default=0)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='ActiveManagementPolicy', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255)), ('description', models.TextField(blank=True, null=True)), ('when_trading_time_violated', models.CharField(choices=[('none', 'None'), ('close', 'Close violating trades'), ('notify', 'Notify only')], default='none', max_length=255)), ('when_trends_violated', models.CharField(choices=[('none', 'None'), ('close', 'Close violating trades'), ('notify', 'Notify only')], default='none', max_length=255)), ('when_position_size_violated', models.CharField(choices=[('none', 'None'), ('close', 'Close violating trades'), ('notify', 'Notify only'), ('adjust', 'Adjust violating trades')], default='none', max_length=255)), ('when_protection_violated', models.CharField(choices=[('none', 'None'), ('close', 'Close violating trades'), ('notify', 'Notify only'), ('adjust', 'Adjust violating trades')], default='none', max_length=255)), ('when_asset_groups_violated', models.CharField(choices=[('none', 'None'), ('close', 'Close violating trades'), ('notify', 'Notify only')], default='none', max_length=255)), ('when_max_open_trades_violated', models.CharField(choices=[('none', 'None'), ('close', 'Close violating trades'), ('notify', 'Notify only')], default='none', max_length=255)), ('when_max_open_trades_per_symbol_violated', models.CharField(choices=[('none', 'None'), ('close', 'Close violating trades'), ('notify', 'Notify only')], default='none', max_length=255)), ('when_max_loss_violated', models.CharField(choices=[('none', 'None'), ('close', 'Close violating trades'), ('notify', 'Notify only')], default='none', max_length=255)), ('when_max_risk_violated', models.CharField(choices=[('none', 'None'), ('close', 'Close violating trades'), ('notify', 'Notify only')], default='none', max_length=255)), ('when_crossfilter_violated', models.CharField(choices=[('none', 'None'), ('close', 'Close violating trades'), ('notify', 'Notify only')], default='none', max_length=255)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='AssetGroup', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255)), ('description', models.TextField(blank=True, null=True)), ('webhook_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), ('when_no_data', models.IntegerField(choices=[(6, 'Always allow'), (7, 'Always deny'), (2, 'Bullish'), (3, 'Bearish')], default=7)), ('when_no_match', models.IntegerField(choices=[(6, 'Always allow'), (7, 'Always deny'), (2, 'Bullish'), (3, 'Bearish')], default=6)), ('when_no_aggregation', models.IntegerField(choices=[(6, 'Always allow'), (7, 'Always deny'), (2, 'Bullish'), (3, 'Bearish')], default=6)), ('when_not_in_bounds', models.IntegerField(choices=[(6, 'Always allow'), (7, 'Always deny'), (2, 'Bullish'), (3, 'Bearish')], default=6)), ('when_bullish', models.IntegerField(choices=[(6, 'Always allow'), (7, 'Always deny'), (2, 'Bullish'), (3, 'Bearish')], default=2)), ('when_bearish', models.IntegerField(choices=[(6, 'Always allow'), (7, 'Always deny'), (2, 'Bullish'), (3, 'Bearish')], default=3)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='Hook', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=1024)), ('hook', models.CharField(max_length=255, unique=True)), ('received', models.IntegerField(default=0)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='OrderSettings', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255)), ('description', models.TextField(blank=True, null=True)), ('order_type', models.CharField(choices=[('market', 'Market'), ('limit', 'Limit')], default='market', max_length=255)), ('time_in_force', models.CharField(choices=[('gtc', 'GTC (Good Til Cancelled)'), ('gfd', 'GFD (Good For Day)'), ('fok', 'FOK (Fill Or Kill)'), ('ioc', 'IOC (Immediate Or Cancel)')], default='gtc', max_length=255)), ('take_profit_percent', models.FloatField(default=1.5)), ('stop_loss_percent', models.FloatField(default=1.0)), ('trailing_stop_loss_percent', models.FloatField(blank=True, default=1.0, null=True)), ('trade_size_percent', models.FloatField(default=0.5)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='RiskModel', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255)), ('description', models.TextField(blank=True, null=True)), ('max_loss_percent', models.FloatField(default=0.05)), ('max_risk_percent', models.FloatField(default=0.05)), ('max_open_trades', models.IntegerField(default=10)), ('max_open_trades_per_symbol', models.IntegerField(default=2)), ('price_slippage_percent', models.FloatField(default=2.5)), ('callback_price_deviation_percent', models.FloatField(default=0.5)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='Signal', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=1024)), ('signal', models.CharField(max_length=256)), ('direction', models.CharField(choices=[('buy', 'Buy'), ('sell', 'Sell')], max_length=255)), ('received', models.IntegerField(default=0)), ('type', models.CharField(choices=[('entry', 'Entry'), ('exit', 'Exit'), ('trend', 'Trend')], max_length=255)), ('hook', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.hook')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='TradingTime', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255)), ('description', models.TextField(blank=True, null=True)), ('start_day', models.IntegerField(choices=[(1, 'Monday'), (2, 'Tuesday'), (3, 'Wednesday'), (4, 'Thursday'), (5, 'Friday'), (6, 'Saturday'), (7, 'Sunday')])), ('end_day', models.IntegerField(choices=[(1, 'Monday'), (2, 'Tuesday'), (3, 'Wednesday'), (4, 'Thursday'), (5, 'Friday'), (6, 'Saturday'), (7, 'Sunday')])), ('start_time', models.TimeField()), ('end_time', models.TimeField()), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='Trade', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('symbol', models.CharField(max_length=255)), ('time_in_force', models.CharField(choices=[('gtc', 'GTC (Good Til Cancelled)'), ('gfd', 'GFD (Good For Day)'), ('fok', 'FOK (Fill Or Kill)'), ('ioc', 'IOC (Immediate Or Cancel)')], default='gtc', max_length=255)), ('type', models.CharField(choices=[('market', 'Market'), ('limit', 'Limit')], max_length=255)), ('amount', models.FloatField(blank=True, null=True)), ('amount_usd', models.FloatField(blank=True, null=True)), ('price', models.FloatField(blank=True, null=True)), ('stop_loss', models.FloatField(blank=True, null=True)), ('trailing_stop_loss', models.FloatField(blank=True, null=True)), ('take_profit', models.FloatField(blank=True, null=True)), ('status', models.CharField(blank=True, max_length=255, null=True)), ('information', models.JSONField(blank=True, null=True)), ('direction', models.CharField(choices=[('buy', 'Buy'), ('sell', 'Sell')], max_length=255)), ('order_id', models.CharField(blank=True, max_length=255, null=True)), ('client_order_id', models.CharField(blank=True, max_length=255, null=True)), ('response', models.JSONField(blank=True, null=True)), ('account', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.account')), ('hook', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.hook')), ('signal', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.signal')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='Strategy', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255)), ('description', models.TextField(blank=True, null=True)), ('enabled', models.BooleanField(default=False)), ('signal_trading_enabled', models.BooleanField(default=False)), ('active_management_enabled', models.BooleanField(default=False)), ('trends', models.JSONField(blank=True, null=True)), ('account', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.account')), ('active_management_policy', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='core.activemanagementpolicy')), ('asset_group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='core.assetgroup')), ('entry_signals', models.ManyToManyField(blank=True, related_name='entry_strategies', to='core.signal')), ('exit_signals', models.ManyToManyField(blank=True, related_name='exit_strategies', to='core.signal')), ('order_settings', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='core.ordersettings')), ('risk_model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='core.riskmodel')), ('trading_times', models.ManyToManyField(to='core.tradingtime')), ('trend_signals', models.ManyToManyField(blank=True, related_name='trend_strategies', to='core.signal')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], options={ 'verbose_name_plural': 'strategies', }, ), migrations.CreateModel( name='NotificationSettings', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('ntfy_topic', models.CharField(blank=True, max_length=255, null=True)), ('ntfy_url', models.CharField(blank=True, max_length=255, null=True)), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='Callback', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(blank=True, max_length=1024, null=True)), ('message', models.CharField(blank=True, max_length=1024, null=True)), ('period', models.CharField(blank=True, max_length=255, null=True)), ('sent', models.BigIntegerField(blank=True, null=True)), ('trade', models.BigIntegerField(blank=True, null=True)), ('exchange', models.CharField(blank=True, max_length=255, null=True)), ('base', models.CharField(blank=True, max_length=255, null=True)), ('quote', models.CharField(blank=True, max_length=255, null=True)), ('contract', models.CharField(blank=True, max_length=255, null=True)), ('price', models.FloatField(blank=True, null=True)), ('symbol', models.CharField(max_length=255)), ('hook', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.hook')), ('signal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.signal')), ], ), migrations.CreateModel( name='AssetRule', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('asset', models.CharField(max_length=64)), ('aggregation', models.CharField(choices=[('none', 'None'), ('avg_sentiment', 'Average sentiment')], default='none', max_length=255)), ('value', models.FloatField(blank=True, null=True)), ('original_status', models.IntegerField(choices=[(0, 'No data'), (1, 'No match'), (2, 'Bullish'), (3, 'Bearish'), (4, 'No aggregation'), (5, 'Not in bounds'), (6, 'Always allow'), (7, 'Always deny')], default=0)), ('status', models.IntegerField(choices=[(0, 'No data'), (1, 'No match'), (2, 'Bullish'), (3, 'Bearish'), (4, 'No aggregation'), (5, 'Not in bounds'), (6, 'Always allow'), (7, 'Always deny')], default=0)), ('trigger_below', models.FloatField(blank=True, null=True)), ('trigger_above', models.FloatField(blank=True, null=True)), ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.assetgroup')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], options={ 'unique_together': {('asset', 'group')}, }, ), ]