Skip to content
This repository was archived by the owner on Jun 9, 2021. It is now read-only.

Commit 9589fee

Browse files
authored
Merge pull request #197 from mattmaeda/master
submission for final class project
2 parents b8affab + c3dcd29 commit 9589fee

File tree

23 files changed

+2722
-0
lines changed

23 files changed

+2722
-0
lines changed

students/mattmaeda/stockscreener/LICENSE.txt

Whitespace-only changes.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Stock Screener app
2+
3+
## Setup
4+
1. In directory root, run `python -m venv venv`
5+
2. Activate virtual environment `source venv/bin/activate`
6+
3. Install required libraries `pip install -r requirements.txt`
7+
4. Export Django application settings to environment `export DJANGO_SETTINGS_MODULE=stockscreener.settings`
8+
5. Setup database `django-admin migrate`
9+
6. Load initial rules and screen data `django-admin loaddata exchange/fixtures/initial_exchange_data.json`
10+
11+
## Run Application
12+
1. `django-admin runserver`
13+
2. Go to [http://127.0.0.1:8000](http://127.0.0.1:8000)
14+
15+
## Run Tests
16+
1. `django-admin test exchange

students/mattmaeda/stockscreener/bin/screener

Whitespace-only changes.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/usr/bin/env python
2+
"""
3+
stockscreener exchange package
4+
"""
5+
6+
from pathlib import Path
7+
8+
__version__ = "0.0.1"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.contrib import admin
2+
from .models import Rule, Screen
3+
4+
# Register your models here.
5+
admin.site.register(Rule)
6+
admin.site.register(Screen)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.apps import AppConfig
2+
3+
4+
class ExchangeConfig(AppConfig):
5+
name = 'exchange'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"model": "exchange.rule", "pk": "MA100 GT CP", "fields": {"criteria": "100 Day Moving Average Above Closing Price"}}, {"model": "exchange.rule", "pk": "MA100 GT MA200", "fields": {"criteria": "100 Day Moving Average Above 200 Day Moving Average"}}, {"model": "exchange.rule", "pk": "MA100 LT CP", "fields": {"criteria": "100 Day Moving Average Below Closing Price"}}, {"model": "exchange.rule", "pk": "MA100 LT MA200", "fields": {"criteria": "100 Day Moving Average Below 200 Day Moving Average"}}, {"model": "exchange.rule", "pk": "MA50 GT CP", "fields": {"criteria": "50 Day Moving Average Above Closing Price"}}, {"model": "exchange.rule", "pk": "MA50 GT MA200", "fields": {"criteria": "50 Day Moving Average Above 200 Day Moving Average"}}, {"model": "exchange.rule", "pk": "MA50 LT CP", "fields": {"criteria": "50 Day Moving Average Below Closing Price"}}, {"model": "exchange.rule", "pk": "MA50 LT MA200", "fields": {"criteria": "50 Day Moving Average Below 200 Day Moving Average"}}, {"model": "exchange.rule", "pk": "MA50 XOVER MA100", "fields": {"criteria": "50 Day Moving Average Crosses Over 100 Day Moving Average"}}, {"model": "exchange.rule", "pk": "MA50 XUNDER MA100", "fields": {"criteria": "50 Moving Average Crosses Under 100 Day Moving Average"}}, {"model": "exchange.screen", "pk": "Death Cross", "fields": {"description": "50 Day Moving Average Cross Under 100 Day Moving Average", "rules": ["MA50 XUNDER MA100"]}}, {"model": "exchange.screen", "pk": "Death Cross Plus", "fields": {"description": "50 Day Moving Average Cross Under 100 Day Moving Average and Closing Price Above 50 Day Moving Average", "rules": ["MA100 GT CP", "MA100 GT MA200", "MA50 GT CP", "MA50 GT MA200", "MA50 XUNDER MA100"]}}, {"model": "exchange.screen", "pk": "Golden Cross", "fields": {"description": "50 Day Moving Average Cross Over 100 Day Moving Average", "rules": ["MA50 XOVER MA100"]}}, {"model": "exchange.screen", "pk": "Golden Cross Plus", "fields": {"description": "50 Day Moving Average Cross Over 100 Day Moving Average and Closing Price Above 50 Day Moving Average", "rules": ["MA100 LT CP", "MA100 LT MA200", "MA50 LT CP", "MA50 LT MA200", "MA50 XOVER MA100"]}}]
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Generated by Django 2.0.3 on 2018-03-14 04:32
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
initial = True
9+
10+
dependencies = [
11+
]
12+
13+
operations = [
14+
migrations.CreateModel(
15+
name='Rule',
16+
fields=[
17+
('formula', models.CharField(max_length=100, primary_key=True, serialize=False)),
18+
('criteria', models.CharField(max_length=250)),
19+
],
20+
),
21+
migrations.CreateModel(
22+
name='Screen',
23+
fields=[
24+
('name', models.CharField(max_length=100, primary_key=True, serialize=False)),
25+
('description', models.CharField(max_length=250)),
26+
('rules', models.ManyToManyField(to='exchange.Rule')),
27+
],
28+
),
29+
]

students/mattmaeda/stockscreener/exchange/migrations/__init__.py

Whitespace-only changes.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"""
2+
Database objects for screener application
3+
"""
4+
from django.db import models
5+
6+
# Create your models here.
7+
class Rule(models.Model):
8+
""" Holds rule information """
9+
formula = models.CharField(max_length=100, primary_key=True)
10+
criteria = models.CharField(max_length=250)
11+
12+
def __str__(self):
13+
return self.formula
14+
15+
16+
class Screen(models.Model):
17+
""" Holds screen information """
18+
name = models.CharField(max_length=100, primary_key=True)
19+
description = models.CharField(max_length=250)
20+
rules = models.ManyToManyField(Rule)
21+
22+
def __str__(self):
23+
return self.name

0 commit comments

Comments
 (0)