# 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 ' ) } ,
} ,
) ,
]