Make signals configurable
This commit is contained in:
@@ -166,19 +166,31 @@ class Session(models.Model):
|
||||
|
||||
class Hook(models.Model):
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
name = models.CharField(max_length=1024, null=True, blank=True, unique=True)
|
||||
hook = models.CharField(max_length=255, unique=True)
|
||||
direction = models.CharField(choices=DIRECTION_CHOICES, max_length=255)
|
||||
name = models.CharField(max_length=1024)
|
||||
hook = models.CharField(max_length=255, unique=True) # hook URL
|
||||
received = models.IntegerField(default=0)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name} ({self.hook})"
|
||||
|
||||
|
||||
class Signal(models.Model):
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
name = models.CharField(max_length=1024)
|
||||
signal = models.CharField(max_length=256) # signal name
|
||||
hook = models.ForeignKey(Hook, on_delete=models.CASCADE)
|
||||
direction = models.CharField(choices=DIRECTION_CHOICES, max_length=255)
|
||||
received = models.IntegerField(default=0)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name} ({self.signal}) - {self.direction}"
|
||||
|
||||
|
||||
class Trade(models.Model):
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
account = models.ForeignKey(Account, on_delete=models.CASCADE)
|
||||
hook = models.ForeignKey(Hook, on_delete=models.CASCADE, null=True, blank=True)
|
||||
signal = models.ForeignKey(Signal, on_delete=models.CASCADE, null=True, blank=True)
|
||||
symbol = models.CharField(max_length=255)
|
||||
time_in_force = models.CharField(choices=TIF_CHOICES, max_length=255, default="gtc")
|
||||
type = models.CharField(choices=TYPE_CHOICES, max_length=255)
|
||||
@@ -224,6 +236,7 @@ class Trade(models.Model):
|
||||
|
||||
class Callback(models.Model):
|
||||
hook = models.ForeignKey(Hook, on_delete=models.CASCADE)
|
||||
signal = models.ForeignKey(Signal, on_delete=models.CASCADE)
|
||||
title = models.CharField(max_length=1024, null=True, blank=True)
|
||||
message = models.CharField(max_length=1024, null=True, blank=True)
|
||||
period = models.CharField(max_length=255, null=True, blank=True)
|
||||
@@ -310,7 +323,12 @@ class Strategy(models.Model):
|
||||
choices=TYPE_CHOICES, max_length=255, default="market"
|
||||
)
|
||||
time_in_force = models.CharField(choices=TIF_CHOICES, max_length=255, default="gtc")
|
||||
hooks = models.ManyToManyField(Hook)
|
||||
entry_signals = models.ManyToManyField(
|
||||
Signal, related_name="entry_strategies", blank=True
|
||||
)
|
||||
exit_signals = models.ManyToManyField(
|
||||
Signal, related_name="exit_strategies", blank=True
|
||||
)
|
||||
enabled = models.BooleanField(default=False)
|
||||
take_profit_percent = models.FloatField(default=1.5)
|
||||
stop_loss_percent = models.FloatField(default=1.0)
|
||||
|
||||
Reference in New Issue
Block a user