Entwicklung eines Onlinedienstes für Investoren auf pythonanywhere.com unter Verwendung von Daten von Yahoo Finance

Der Zweck dieses Artikels ist es, die Erfahrungen bei der Entwicklung eines Online-Analysedienstes für Investoren in Python zu teilen. Der Fokus liegt mehr auf konzeptionellen Fragen als auf einer detaillierten Beschreibung einer bestimmten Technologie. Ich hoffe, dass der Leser mit ein wenig googeln leicht Details finden kann. Der Klarheit halber gebe ich zu Beginn der Präsentation www.emarkoff.com einen Link zum Service .



Bild



Ein wenig über Investitionen



Bereits im Sommer 2019 begann ich mich für das Thema Investitionen zu interessieren und tauchte sofort in das Meer verschiedener Veröffentlichungen und Videoblogger ein, die uneinig Ratschläge gaben, wie und wo sie investieren sollten. Es wurde deutlich, dass es in der Welt der Investitionen zwei Hauptmethoden gibt, um Entscheidungen zu treffen, die auf fundamentalen und technischen Analysen beruhen. Die erste Methode eignet sich besser für langfristige Investitionen und die zweite für Spekulationen.



Nach einiger Zeit kam ein Verständnis für die unbestrittenen Vorteile des Spielens verschiedener historischer Szenarien wie „Was würde passieren, wenn ich in so und so ein Jahr und für so und so einen Zeitraum investieren würde?“. Diese Art der Analyse ermöglicht es Ihnen, den Unterschied zwischen für Anlagen und Spekulationen geeigneten Wertpapieren zu spüren und dem unerfahrenen Anleger ein Verständnis dafür zu vermitteln, in welche Finanzinstrumente und für welchen Zeitraum sich eine Anlage lohnt.



Ideenreifung, Auswahl der Host- und Webdienstarchitektur



Im Laufe der Zeit entstand die Idee, einen Service in Form einer Website zu schaffen, der es ermöglicht, historische Szenarien für Investitionen in verschiedene Finanzinstrumente zu spielen.



Der nächste Schritt bestand darin, drei wichtige Punkte zu identifizieren:



  • Hostauswahl;
  • Wahl des Technologie-Stacks und der Service-Architektur;
  • Suche nach einer offenen Datenquelle, aus der Informationen über Marktnotierungen abgerufen werden können.


Es wurde sofort klar, dass es wünschenswert ist, Skripte auf der Serverseite abzuspielen (dh alle Berechnungen durchzuführen). Und es gibt drei Gründe. Das erste ist die Zurückhaltung, den gesamten Code für den Benutzer zu öffnen. Der zweite Grund ist die Suche nach einer Lösung, bei der nicht grundsätzlich alle Daten über das Netzwerk übertragen werden müssen, und der dritte Grund ist die Unabhängigkeit von den Rechenfunktionen des Benutzers. Die Wahl wurde mit Blick auf die Zukunft getroffen, wenn das Datenvolumen plötzlich so groß wird, dass das Back-End auf speziellen Plattformen wie Amazon Web Services oder Microsoft Azure bereitgestellt werden muss. Wie üblich werden Entscheidungen bei genügend Ehrgeiz zunächst so gewählt, dass sie skalierbar sind.



Bei den Programmiersprachen gab es zunächst keinen Zweifel am Frontend. Alles ist ziemlich normal: HTML + CSS + Javascript. Es wurde beschlossen, das Backend in Python zu schreiben, da es heute eine der beliebtesten und unterstützten Sprachen für die schnelle Entwicklung und das Prototyping ist. Alle nachfolgenden Entscheidungen waren bis zu einem gewissen Grad eine Folge der oben getroffenen Entscheidung.



Pythonanywhere.com wurde als Host ausgewählt. Das Besondere daran ist, dass es auf die Programmierung in Python ausgerichtet ist und einen relativ günstigen Preis von 5 US-Dollar pro Monat bietet. Die anschließende Entwicklung der Website erfolgte mit dem Django-Framework. Obwohl dieses Framework nicht als das einfachste angesehen wird, bietet es dem Entwickler umfangreiche Tools in Form von Ansichten, Vorlagen und vorgefertigten Plug-in-Anwendungen, mit denen Sie insgesamt eine vollwertige Website erstellen können.

Bei der Auswahl einer Datenquelle wurde ich fast sofort auf einen Dienst wie Yahoo Finance und dementsprechend auf die yfinance-Bibliothek aufmerksam, die eine praktische API für Python bietet.



Einige Funktionen von pythonanywhere.com



Mit Pythonanywhere-Hosting können Sie in verschiedenen Modi arbeiten:



  • Starten des Python-Interpreters in der Konsole;
  • Arbeit in einem Jupyter-Laptop;
  • Starten vollwertiger Webanwendungen.


Auf Wunsch können Sie mit dem Hosting jedes Python-Webframework installieren und verwenden. Es muss nicht unbedingt Django sein, sondern zum Beispiel dieselbe Flasche, die als leichter zu erlernen gilt. Das Einrichten und Veröffentlichen einer Webanwendung ist buchstäblich nur ein paar Klicks entfernt, sodass Sie sich auf das Wesentliche konzentrieren können.



Das praktische Dashboard bietet schnellen Zugriff auf Dateien und Ordner, auf die Konsole und alle Einstellungen. Integrierte Unterstützung für https, verbundene Domainnamen sowie Passwortschutz für Site-Inhalte. Die Verkehrsüberwachung sowie Serverprotokolle sind über den Link im Dashboard verfügbar.



Ich möchte auch eine weitere zweifelsfreie Annehmlichkeit für den Entwickler erwähnen. Zusätzlich zu den Serverprotokollen werden bei Fehlern auf der Backend-Seite die Ablaufverfolgung und die lokalen Werte von Variablen häufig direkt im aktuellen Browserfenster zum Zeitpunkt des Aufrufs der entsprechenden Funktionen und Methoden angezeigt. Darüber hinaus kann die Spur sogar in einem Browserfenster auf einem Smartphone angezeigt werden.

Diese Art des Debugging-Modus hat mir persönlich sehr geholfen und es mir ermöglicht, Fehler im Code buchstäblich im laufenden Betrieb zu korrigieren.



Ein weiterer wichtiger Punkt, der zweifellos Ihre Aufmerksamkeit wert ist, ist die Arbeit mit Versionskontrollsystemen. Git, svn und hg / mercurial sind in der eingebetteten Bash-Konsole verfügbar.



Mit Daten arbeiten



Ich habe mich für den Finanzinformationsanbieter Yahoo Finance und die yfinance-Bibliothek entschieden, da keine Abonnementgebühren anfallen und ich auf tägliche Aktualisierungen der Bestandsinformationen zugreifen kann. Über die yfinance-API ruft der Onlinedienst Informationen von drei amerikanischen Börsen NASDAQ, NYSE und AMEX im laufenden Betrieb ab. Sie sollten jedoch sofort darauf achten, dass auf der Website yfinance des Entwicklers eine Warnung vor dem Verbot der kommerziellen Nutzung angezeigt wird.



Bei der Technologie der Webserver-Interaktion wird zunächst eine Vorlage mit HTML-Markup in den Browser geladen. Der nächste Schritt besteht darin, Javascript auszuführen, das die Methode get-request verwendet, um alle erforderlichen Daten vom Server abzurufen. Das Aktualisieren des Seiteninhalts erfolgt mithilfe der Ajax-Technologie über die Schnittstellen der jQuery-Bibliothek.



Alle Onlinedienstdaten werden in zwei Formaten gespeichert: CSV und SQLite. Mit dieser Auswahl konnte ich schnell mit der Implementierung der Kernlogik beginnen, ohne einen Datenbankserver installieren und konfigurieren zu müssen.



Ein bisschen über Django



Ich möchte auch separat auf drei Softwarekomponenten eingehen, die mit vorgefertigten Blöcken in die Site-Architektur integriert wurden, was die Entwicklung erheblich beschleunigte. Ich meine das Django-Admin-Panel, das Sitzungsverwaltungsmodul django.contrib.sessions und das Framework excontrib / django_comments.



Mit Django können Sie Projekte aus separaten Softwarekomponenten erstellen, die als Anwendungen bezeichnet werden. Einmal geschrieben, können Anwendungen in verschiedenen Projekten wiederverwendet werden. Um die oben genannten Komponenten in das Projekt einzubetten, müssen Sie sie explizit in der Datei settings.py angeben



INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.sessions',
    'django_comments',
]


Darüber hinaus sollten URL-Muster entsprechend konfiguriert werden, um Anforderungen von der Browserseite aus zu stellen:



urlpatterns = [
    url(r'^admin/', admin.site.urls)
    url(r'^comments/', include('django_comments.urls')),
]


Wie Sie den obigen Codefragmenten entnehmen können, ist es nicht so schwierig, vorgefertigte Komponenten einzubetten, und daher fügen sie dem Projekt einen wesentlichen Teil der Funktionalität hinzu.



Nach der Bereitstellung des Django-Frameworks sind zum Starten des Admin-Panels einige einfache Schritte erforderlich: Überprüfen Sie die Einstellungen Ihrer Datei settings.py, migrieren Sie die integrierten Datenmodelle und erstellen Sie einen Superuser. Dem Administrator werden sein persönlicher Login, sein Passwort und sein Postfach zugewiesen. Standardmäßig wird auf das Admin-Panel zugegriffen, indem der Domain-URL der Standardpfad / admin / hinzugefügt wird.

Im Bedienfeld befindet sich eine praktische Oberfläche zum Verwalten der integrierten Datenbank. Standardmäßig speichert diese Datenbank Informationen zu Benutzern und Benutzergruppen. Dies ist sehr praktisch, da die Benutzerautorisierung auf der Site einfach implementiert werden kann. Und wenn die Geschwindigkeit des Starts der Website von grundlegender Bedeutung ist, können Sie Zeit sparen und keine separate Seite erstellen, um neue Benutzer zu gewinnen und ihnen Rechte zu gewähren. Es reicht aus, zum Admin-Bereich zu gehen und der Datenbank über die Benutzeroberfläche einen neuen Eintrag hinzuzufügen. Diese Lösung ist jedoch nur für eine kleine Anzahl von Benutzern geeignet, da Benutzer nicht die Möglichkeit haben, ihr Kennwort selbst zu registrieren und zurückzusetzen.



Ein weiteres Merkmal des Admin-Panels ist, dass es nicht nur Zugriff auf Benutzerdaten bietet, sondern im Prinzip auf alle Daten, die in der Datenbank unter der Kontrolle von Django gespeichert sind. Zusätzlich zu Daten über autorisierte Benutzer speichert die Datenbank beispielsweise teilweise den Site-Inhalt und die Kommentare, die von Besuchern hinterlassen wurden.



Ich erzähle Ihnen von einem Life-Hack, mit dem ich der Seite "Über mich selbst" ein Feedback-Formular hinzugefügt habe. Um weder für den Browser noch für die Verarbeitung von Daten auf dem Server separaten Code zu schreiben, wurde anstelle eines Feedback-Formulars ein Standardkommentarblock in die entsprechende HTML-Vorlage integriert, die Möglichkeit zum Anzeigen des Verlaufs wurde jedoch entfernt. Bei diesem Ansatz werden die Feedback-Formulardaten verarbeitet und in derselben Tabelle wie die Kommentare der Website-Besucher gespeichert.



Die Sitzungsverwaltung wurde mithilfe des integrierten Moduls django.contrib.sessions implementiert. Sitzungsobjekte speichern Informationen zu den Einstellungen, die Benutzer beim Besuch der Site ausgewählt haben. In den Sitzungen werden insbesondere der ausgewählte Investitionszeitraum, der historische Zeitraum für die Durchführung der Analyse und die Sprache des Standorts gespeichert.



Ich werde ein wenig darüber nachdenken, wie ich die Seite mehrsprachig gemacht habe. Für mich war es wichtig, eine einfache und schnelle Lösung zu finden, mit der ich zum Hosting-Panel gehen und den Text eines Artikels mit nur zwei Klicks bearbeiten konnte. Daher habe ich zum Speichern der Texte von Artikeln das Format unabhängiger Textdateien gewählt und nicht in die Datenbank geladen. Angesichts einer kleinen Anzahl von Artikeln (ungefähr 10) und nur zwei Optionen für die Sprachauswahl (Russisch und Englisch) halte ich diese Lösung für durchaus akzeptabel. Auch hier hängt alles von der Skala ab.

Und das Letzte, worauf ich mich konzentrieren möchte, ist die Verwendung von Django-Vorlagen. Mit Vorlagen können Sie unter anderem Variablenwerte direkt aus Python-Code in eine HTML-Seite importieren sowie HTML-Seiten aus mehreren unabhängigen Blöcken sammeln. Zur Veranschaulichung werde ich ein Beispiel direkt aus meinem Code geben.



Einbetten mehrerer Blöcke mit dynamischem Inhalt in das allgemeine Grundgerüst einer HTML-Seite:



html:
        {% include article_file_name %}
        {% include online_service_file_name %}
        {% include comments_file_name %}

Pyhton/backend:

def view_article(request, selected_url_path = 'expected_return'):

    context = {
        'article_file_name':article_file_name,
        'online_service_file_name':online_service_file_name,
        'comments_file_name':comments_file_name,
    }
    return render(request, 'articles/base_blog_page.html', context=context)


Hier sind Artikeldateiname, Online-Servicedateiname und Kommentardateiname tatsächlich die Namen von Variablen, über die die Pfade zu den HTML-Dateien mit dem hinzugefügten Inhalt übergeben werden.



Fazit. Nützliche Erfahrung in der Selbstentwicklung eines Webdienstes



Sie können das Ergebnis meiner Arbeit an dem Projekt sehen, indem Sie auf den Link www.emarkoff.com klicken .



Die pythonanywhere-Plattform ist im Allgemeinen eine gute Lösung für die Entwicklung von Django-basierten Webanwendungen. Und wenn Sie Ihre eigenen Ideen haben, reichen zwei oder drei Monate aus, um die Grundlagen zu verstehen und eine einfache Webanwendung zu implementieren, auch wenn Sie kein professioneller Webentwickler sind.



Diese Erfahrung kann für Manager, Analysten und alle, die sich mit Webentwicklung und Webdiensten im Dienst befassen müssen, sehr nützlich sein, insbesondere während der Beta-Testphase. Sie können die Bedeutung von Serverfehlermeldungen besser verstehen und produktiver mit dem technischen Support und den Entwicklungsmitarbeitern kommunizieren.



All Articles