Implement trading time limits
parent
69a2b269ad
commit
4973582bdf
@ -0,0 +1,23 @@
|
|||||||
|
# Generated by Django 4.1.3 on 2022-11-25 18:29
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0031_strategy_trading_times'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tradingtime',
|
||||||
|
name='end_day',
|
||||||
|
field=models.CharField(choices=[(0, 'Monday'), (1, 'Tuesday'), (2, 'Wednesday'), (3, 'Thursday'), (4, 'Friday'), (5, 'Saturday'), (6, 'Sunday')], max_length=255),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tradingtime',
|
||||||
|
name='start_day',
|
||||||
|
field=models.CharField(choices=[(0, 'Monday'), (1, 'Tuesday'), (2, 'Wednesday'), (3, 'Thursday'), (4, 'Friday'), (5, 'Saturday'), (6, 'Sunday')], max_length=255),
|
||||||
|
),
|
||||||
|
]
|
@ -0,0 +1,23 @@
|
|||||||
|
# Generated by Django 4.1.3 on 2022-11-25 18:35
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0032_alter_tradingtime_end_day_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tradingtime',
|
||||||
|
name='end_day',
|
||||||
|
field=models.IntegerField(choices=[(0, 'Monday'), (1, 'Tuesday'), (2, 'Wednesday'), (3, 'Thursday'), (4, 'Friday'), (5, 'Saturday'), (6, 'Sunday')]),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tradingtime',
|
||||||
|
name='start_day',
|
||||||
|
field=models.IntegerField(choices=[(0, 'Monday'), (1, 'Tuesday'), (2, 'Wednesday'), (3, 'Thursday'), (4, 'Friday'), (5, 'Saturday'), (6, 'Sunday')]),
|
||||||
|
),
|
||||||
|
]
|
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 4.1.3 on 2022-11-25 18:49
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0033_alter_tradingtime_end_day_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='strategy',
|
||||||
|
name='trading_times',
|
||||||
|
field=models.ManyToManyField(to='core.tradingtime'),
|
||||||
|
),
|
||||||
|
]
|
@ -0,0 +1,23 @@
|
|||||||
|
# Generated by Django 4.1.3 on 2022-11-25 19:01
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0034_alter_strategy_trading_times'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tradingtime',
|
||||||
|
name='end_day',
|
||||||
|
field=models.IntegerField(choices=[(1, 'Monday'), (2, 'Tuesday'), (3, 'Wednesday'), (4, 'Thursday'), (5, 'Friday'), (6, 'Saturday'), (7, 'Sunday')]),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tradingtime',
|
||||||
|
name='start_day',
|
||||||
|
field=models.IntegerField(choices=[(1, 'Monday'), (2, 'Tuesday'), (3, 'Wednesday'), (4, 'Thursday'), (5, 'Friday'), (6, 'Saturday'), (7, 'Sunday')]),
|
||||||
|
),
|
||||||
|
]
|
@ -1,3 +0,0 @@
|
|||||||
# from django.test import TestCase
|
|
||||||
|
|
||||||
# Create your tests here.
|
|
@ -0,0 +1,90 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
from core.models import TradingTime, User
|
||||||
|
from datetime import datetime, time
|
||||||
|
|
||||||
|
class MarketTestCase(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
# Create a test user
|
||||||
|
self.user = User.objects.create_user(
|
||||||
|
username="testuser",
|
||||||
|
email="test@example.com",
|
||||||
|
)
|
||||||
|
self.time_9 = time(9, 0, 0)
|
||||||
|
self.time_11 = time(11, 0, 0)
|
||||||
|
self.time_14 = time(14, 0, 0)
|
||||||
|
self.time_16 = time(16, 0, 0)
|
||||||
|
|
||||||
|
def test_time_within_range(self):
|
||||||
|
"""
|
||||||
|
Check the method of TradingTime model works as expected.
|
||||||
|
We check two dates, one that is within the range and one that is not.
|
||||||
|
"""
|
||||||
|
test_time = datetime(2022, 11, 28, 10, 0, 0)
|
||||||
|
|
||||||
|
trading_time = TradingTime.objects.create(
|
||||||
|
user = self.user,
|
||||||
|
start_day = 1,
|
||||||
|
end_day = 1,
|
||||||
|
start_time = self.time_9,
|
||||||
|
end_time = self.time_11,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertTrue(trading_time.within_range(test_time))
|
||||||
|
|
||||||
|
def test_time_within_range_fail(self):
|
||||||
|
"""
|
||||||
|
Check the method of TradingTime model works as expected.
|
||||||
|
We check two dates, one that is within the range and one that is not.
|
||||||
|
"""
|
||||||
|
test_time = datetime(2022, 11, 28, 10, 0, 0)
|
||||||
|
trading_time = TradingTime.objects.create(
|
||||||
|
user = self.user,
|
||||||
|
start_day = 1,
|
||||||
|
end_day = 1,
|
||||||
|
start_time = self.time_14,
|
||||||
|
end_time = self.time_16,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertFalse(trading_time.within_range(test_time))
|
||||||
|
|
||||||
|
def test_time_within_range_across_days(self):
|
||||||
|
test_time = datetime(2022, 11, 28, 20, 0, 0)
|
||||||
|
|
||||||
|
trading_time = TradingTime.objects.create(
|
||||||
|
user = self.user,
|
||||||
|
start_day = 1, # Monday
|
||||||
|
end_day = 6, # Saturday
|
||||||
|
start_time = self.time_9,
|
||||||
|
end_time = self.time_11,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertTrue(trading_time.within_range(test_time))
|
||||||
|
|
||||||
|
def test_time_within_range_across_days_fail(self):
|
||||||
|
# Set test time Monday, 28 November, 2022, 13:00:00
|
||||||
|
test_time = datetime(2022, 11, 28, 13, 0, 0)
|
||||||
|
trading_time = TradingTime.objects.create(
|
||||||
|
user = self.user,
|
||||||
|
start_day = 1,
|
||||||
|
end_day = 6,
|
||||||
|
start_time = self.time_14,
|
||||||
|
end_time = self.time_16,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertFalse(trading_time.within_range(test_time))
|
||||||
|
|
||||||
|
def test_time_within_range_day_mismatch(self):
|
||||||
|
"""
|
||||||
|
Check that the day of the week is taken into account.
|
||||||
|
"""
|
||||||
|
test_time = datetime(2022, 11, 29, 8, 0, 0)
|
||||||
|
|
||||||
|
trading_time = TradingTime.objects.create(
|
||||||
|
user = self.user,
|
||||||
|
start_day = 2, # Tuesday
|
||||||
|
end_day = 6,
|
||||||
|
start_time = self.time_9,
|
||||||
|
end_time = self.time_11,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertFalse(trading_time.within_range(test_time))
|
Loading…
Reference in New Issue