Un peu sur les investissements
J'ai commencé à m'intéresser au sujet des investissements dès l'été 2019 et j'ai immédiatement plongé dans la mer de diverses publications et blogueurs vidéo qui, en désaccord, ont donné des conseils sur comment et où investir. Il est apparu clairement que dans le monde des investissements, il existe deux manières principales de prendre des décisions, basées sur une analyse fondamentale et technique. La première méthode est plus adaptée aux investissements à long terme et la seconde à la spéculation.
Après un certain temps, une compréhension est venue des avantages incontestables de jouer divers scénarios historiques comme «ce qui se passerait si j'investissais dans telle ou telle année et pendant telle ou telle période». Ce type d'analyse vous permet de ressentir la différence entre les titres appropriés pour l'investissement et la spéculation et forme une compréhension de l'investisseur novice dans quels instruments financiers et pour quelle durée il vaut la peine d'investir.
Maturation des idées, choix de l'hôte et de l'architecture du service Web
Au fil du temps, l'idée est née de créer un service sous la forme d'un site Web, ce qui permettrait de jouer des scénarios historiques d'investissement dans divers instruments financiers.
Et l'étape suivante consistait à identifier trois points clés:
- sélection des hôtes;
- sélection d'une pile technologique et d'une architecture de services;
- rechercher une source ouverte de données à partir de laquelle il serait possible d'extraire des informations sur les cotations du marché.
Il est immédiatement devenu clair qu'il était souhaitable de lire des scripts (c'est-à-dire d'effectuer tous les calculs) côté serveur. Et il y a trois raisons. Le premier est la réticence à ouvrir tout le code à l'utilisateur. La deuxième raison est la recherche d'une solution dans laquelle il n'y aura aucun besoin fondamental de transférer toutes les données sur le réseau, et la troisième est l'indépendance des capacités informatiques du côté de l'utilisateur. Le choix a été fait dans une perspective d'avenir, si du coup le volume de données devient si important qu'il sera nécessaire de déployer le back-end sur des plateformes spécialisées comme Amazon Web Services ou Microsoft Azure. Comme d'habitude, avec suffisamment d'ambition, les solutions sont d'abord choisies pour être évolutives.
Quant aux langages de programmation, il n'y avait aucun doute sur le frontend au départ. Tout est assez standard: html + css + javascript. Il a été décidé d'écrire le backend en python, car c'est l'un des langages les plus populaires et pris en charge pour le développement rapide et le prototypage aujourd'hui. Toutes les décisions ultérieures étaient dans une certaine mesure une conséquence du choix effectué ci-dessus.
Pythonanywhere.com a été choisi comme hôte, dont la particularité est qu'il est orienté vers la programmation en python et propose un tarif relativement bon marché de 5 $ par mois. Le développement ultérieur du site Web a été réalisé à l'aide du framework Django. Bien que ce cadre ne soit pas considéré comme le plus simple, il fournit au développeur des outils complets sous forme de vues, de modèles et d'applications prêtes à l'emploi de plug-ins, qui vous permettent au total de créer un site Web à part entière.
En ce qui concerne le choix d'une source de données, mon attention a été presque immédiatement attirée par un service tel que Yahoo Finance et, par conséquent, la bibliothèque yfinance fournissant une API pratique pour python.
Quelques fonctionnalités de pythonanywhere.com
L'hébergement Pythonanywhere vous permet de travailler selon plusieurs modes:
- lancement de l'interpréteur python dans la console;
- travailler dans un ordinateur portable jupyter;
- lancer des applications Web à part entière.
Si vous le souhaitez, l'hébergement vous permet d'installer et d'utiliser n'importe quel framework Web Python. Ce n'est peut-être pas nécessairement Django, mais, par exemple, le même Flask, qui est considéré comme plus facile à apprendre. La configuration et la publication d'une application Web se font littéralement en quelques clics pour que vous puissiez vous concentrer sur l'essentiel.
Le tableau de bord pratique donne un accès rapide aux fichiers et aux dossiers, à la console et à tous les paramètres. Prise en charge intégrée de https, des noms de domaine connectés, ainsi que de la protection par mot de passe du contenu du site. La surveillance du trafic est disponible, ainsi que les journaux du serveur via le lien dans le tableau de bord.
Je voudrais également noter une autre commodité incontestable pour le développeur. En plus des journaux du serveur, lorsque des erreurs se produisent du côté du backend, le traçage et les valeurs locales des variables sont souvent affichés directement dans la fenêtre actuelle du navigateur au moment de l'appel des fonctions et méthodes correspondantes. De plus, la trace peut être vue même dans une fenêtre de navigateur sur un smartphone.
Ce type de mode de débogage m'a personnellement beaucoup aidé, me permettant de corriger les erreurs dans le code littéralement à la volée.
Un autre point important qui mérite sans aucun doute votre attention est le travail avec les systèmes de contrôle de version. Git, svn et hg / mercurial sont disponibles dans la console embarquée Bash.
Travailler avec des données
J'ai choisi le fournisseur d'informations financières Yahoo Finance et la bibliothèque yfinance en raison du manque de frais d'abonnement et d'accès aux mises à jour quotidiennes des informations boursières. Grâce à l'API yfinance, le service en ligne extrait des informations à la volée de trois bourses américaines NASDAQ, NYSE et AMEX. Cependant, vous devez immédiatement prêter attention au fait que sur le site du développeur yfinance, il y a un avertissement concernant l'interdiction d'utilisation commerciale.
En ce qui concerne la technologie d'interaction avec le serveur Web, un modèle avec balisage html est initialement chargé dans le navigateur. L'étape suivante consiste à exécuter javascript, qui utilise la méthode get-requests pour récupérer toutes les données nécessaires sur le serveur. La mise à jour du contenu de la page est effectuée à l'aide de la technologie Ajax via les interfaces de la bibliothèque jQuery.
Toutes les données de service en ligne sont stockées dans deux formats: csv et SQLite. Ce choix m'a permis de commencer rapidement à implémenter la logique de base sans avoir à installer et configurer un serveur de base de données.
Un peu sur Django
Je voudrais également m'arrêter séparément sur trois composants logiciels qui ont été intégrés à l'architecture du site avec des blocs prêts à l'emploi, ce qui a considérablement accéléré le développement. Je veux dire le panneau d'administration de Django, le module de gestion de session django.contrib.sessions et le framework excontrib / django_comments.
Django vous permet de créer des projets à partir de composants logiciels distincts appelés applications. Une fois écrites, les applications peuvent être réutilisées dans différents projets. Afin d'intégrer les composants ci-dessus dans le projet, vous devez les spécifier explicitement dans le fichier settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.sessions',
'django_comments',
…
]
En outre, les modèles d'URL doivent être configurés de manière appropriée pour effectuer des requêtes du côté du navigateur:
urlpatterns = [
url(r'^admin/', admin.site.urls)
url(r'^comments/', include('django_comments.urls')),
…
]
Comme vous pouvez le voir dans les extraits de code ci-dessus, il n'est pas si difficile d'incorporer des composants prêts à l'emploi et, par conséquent, ils ajoutent une partie importante de la fonctionnalité au projet.
Après avoir déployé le framework django, démarrer le panneau d'administration nécessite quelques étapes simples: vérifiez les paramètres de votre fichier settings.py, migrez les modèles de données intégrés et créez un super-utilisateur. L'administrateur se voit attribuer son identifiant personnel, son mot de passe et sa boîte aux lettres. Par défaut, le panneau d'administration est accessible en ajoutant le chemin standard / admin / à l'URL du domaine.
À l'intérieur du panneau se trouve une interface pratique pour gérer la base de données intégrée. Par défaut, cette base de données stocke des informations sur les utilisateurs et les groupes d'utilisateurs. C'est très pratique car il est facile d'implémenter l'autorisation des utilisateurs sur le site. Et si la vitesse de lancement du site Web est fondamentalement importante, vous pouvez gagner du temps et ne pas créer de page distincte pour attirer de nouveaux utilisateurs et leur accorder des droits. Il suffit d'aller dans le panneau d'administration et d'ajouter une nouvelle entrée à la base de données via l'interface utilisateur. Cependant, cette solution ne convient qu'à un petit nombre d'utilisateurs, car elle ne permet pas aux utilisateurs de s'enregistrer et de réinitialiser eux-mêmes leur mot de passe.
Une autre caractéristique du panneau d'administration est qu'il donne accès non seulement aux données utilisateur, mais, en principe, à toutes les données stockées dans la base de données sous le contrôle de Django. Par exemple, en plus des données sur les utilisateurs autorisés, la base de données stocke partiellement le contenu du site et les commentaires laissés par les visiteurs.
Je vais vous parler d'un hack de vie que j'ai utilisé pour ajouter un formulaire de commentaires à la page À propos de moi. Afin de ne pas écrire de code séparé pour le navigateur ou pour le traitement des données sur le serveur, au lieu d'un formulaire de commentaires, un bloc de commentaires standard a été intégré au modèle html correspondant, mais la possibilité d'afficher l'historique a été supprimée. Avec cette approche, les données du formulaire de rétroaction sont traitées et stockées dans le même tableau que les commentaires des visiteurs du site.
La gestion de session a été implémentée à l'aide du module intégré django.contrib.sessions. Les objets de session stockent des informations sur les paramètres sélectionnés par les utilisateurs lorsqu'ils visitent le site. En particulier, les sessions stockent la période d'investissement sélectionnée, la période historique pour effectuer l'analyse, la langue du site.
Je vais m'attarder un peu sur la façon dont j'ai rendu le site multilingue. Il était important pour moi de trouver une solution simple et rapide dans laquelle je pourrais accéder au panneau d'hébergement et éditer le texte de n'importe quel article en seulement deux clics. Par conséquent, pour stocker les textes des articles, j'ai choisi le format de fichiers texte indépendants, et non de chargement dans la base de données. Étant donné un petit nombre d'articles (en gros, jusqu'à 10) et seulement deux options de sélection de langue (russe et anglais), je considère cette solution tout à fait acceptable. Encore une fois, tout dépend de l'échelle.
Et la dernière chose sur laquelle je voudrais me concentrer est l'utilisation des modèles Django. Entre autres choses, les modèles vous permettent d'importer des valeurs de variables dans une page html directement à partir du code python, ainsi que de collecter des pages html à partir de plusieurs blocs indépendants. A titre d'illustration, je vais donner un exemple directement à partir de mon code.
Incorporer plusieurs blocs avec un contenu dynamique dans le squelette général d'une page html:
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)
Ici, article_file_name, online_service_file_name et comments_file_name sont en fait les noms des variables à travers lesquelles sont passés les chemins vers les fichiers html avec le contenu ajouté.
Conclusion. Expérience utile d'auto-développement d'un service Web
Vous pouvez voir le résultat de mon travail sur le projet en cliquant sur le lien www.emarkoff.com .
La plate-forme pythonanywhere est généralement une bonne solution pour développer des applications Web basées sur Django. Et si vous avez vos propres idées, deux ou trois mois vous suffiront amplement pour comprendre les bases et mettre en œuvre une application Web simple, même si vous n'êtes pas un développeur Web professionnel.
Une telle expérience peut être très utile pour les gestionnaires, les analystes et quiconque doit gérer le développement Web et les services Web en service, en particulier pendant la phase de test bêta. Vous serez en mesure de mieux comprendre la signification des messages d'erreur du serveur, de communiquer de manière plus productive avec le support technique et les représentants du développement.