Pengembangan layanan online untuk investor di pythonanywhere.com menggunakan data dari Yahoo Finance

Tujuan artikel ini adalah untuk berbagi pengalaman dalam mengembangkan layanan analitik online untuk investor python. Fokusnya lebih pada masalah konseptual daripada pada deskripsi rinci dari teknologi tertentu. Saya berharap pembaca dapat dengan mudah menemukan detail apa pun dengan sedikit googling. Demi kejelasan, saya memberikan link ke layanan tersebut di awal presentasi www.emarkoff.com .



gambar



Sedikit tentang investasi



Saya mulai tertarik dengan topik investasi di musim panas 2019 dan langsung terjun ke lautan berbagai publikasi dan video blogger yang, dalam ketidaksepakatan, memberi nasihat tentang bagaimana dan di mana harus berinvestasi. Jelas terlihat bahwa dalam dunia investasi terdapat dua cara utama dalam pengambilan keputusan, yaitu berdasarkan analisis fundamental dan teknis. Metode pertama lebih cocok untuk investasi jangka panjang, dan yang kedua untuk spekulasi.



Setelah beberapa waktu, pemahaman datang tentang manfaat yang tidak diragukan dari memainkan berbagai skenario sejarah seperti "apa yang akan terjadi jika saya berinvestasi di tahun ini dan itu dan untuk periode ini dan itu". Jenis analisis ini memungkinkan Anda untuk merasakan perbedaan antara sekuritas yang cocok untuk investasi dan spekulasi dan membentuk pemahaman investor pemula tentang instrumen keuangan apa dan untuk kerangka waktu apa yang layak untuk diinvestasikan.



Pematangan ide, pilihan host dan arsitektur layanan web



Seiring waktu, muncul ide untuk membuat layanan dalam bentuk situs web yang memungkinkan memainkan skenario historis dalam berinvestasi di berbagai instrumen keuangan.



Dan langkah selanjutnya adalah mengidentifikasi tiga poin utama:



  • pemilihan tuan rumah;
  • pilihan tumpukan teknologi dan arsitektur layanan;
  • mencari sumber data terbuka yang memungkinkan untuk menarik informasi tentang kutipan pasar.


Segera menjadi jelas bahwa diinginkan untuk memainkan skrip (yaitu, melakukan semua perhitungan) di sisi server. Dan ada tiga alasan. Yang pertama adalah keengganan untuk membuka semua kode kepada pengguna. Alasan kedua adalah mencari solusi di mana tidak ada kebutuhan mendasar untuk mentransfer semua data melalui jaringan, dan yang ketiga adalah kemandirian dari kemampuan komputasi di sisi pengguna. Pilihan dibuat dengan pandangan ke depan, jika tiba-tiba volume data menjadi sangat besar sehingga perlu untuk menerapkan back-end pada platform khusus seperti Amazon Web Services atau Microsoft Azure. Seperti biasa, dengan ambisi yang cukup, solusi awalnya dipilih agar dapat diskalakan.



Sedangkan untuk bahasa pemrograman, tidak ada keraguan tentang frontend pada awalnya. Semuanya cukup standar: html + css + javascript. Diputuskan untuk menulis backend dengan python, karena ini adalah salah satu bahasa yang paling populer dan didukung untuk pengembangan dan pembuatan prototipe yang cepat saat ini. Semua keputusan selanjutnya sampai batas tertentu merupakan konsekuensi dari pilihan yang dibuat di atas.



Pythonanywhere.com dipilih sebagai tuan rumah, ciri khasnya adalah bahwa ia diarahkan pada pemrograman dengan python dan menawarkan tarif yang relatif murah $ 5 per bulan. Pengembangan situs web selanjutnya dilakukan dengan menggunakan kerangka kerja Django. Meskipun kerangka kerja ini tidak dianggap yang paling sederhana, kerangka ini memberi pengembang alat yang luas dalam bentuk tampilan, templat, dan aplikasi siap pakai plug-in, yang secara total memungkinkan Anda membangun situs web lengkap.

Dalam hal memilih sumber data, perhatian saya langsung tertuju pada layanan seperti Yahoo Finance dan, karenanya, perpustakaan yfinance menyediakan API yang nyaman untuk python.



Beberapa fitur pythonanywhere.com



Pythonanywhere hosting memungkinkan Anda bekerja dalam beberapa mode:



  • meluncurkan juru bahasa python di konsol;
  • bekerja di laptop jupyter;
  • meluncurkan aplikasi web yang lengkap.


Jika diinginkan, hosting memungkinkan Anda menginstal dan menggunakan kerangka web python apa pun. Ini belum tentu Django, tapi, sebagai contoh, Flask yang sama, yang dianggap lebih mudah untuk dipelajari. Menyiapkan dan menerbitkan aplikasi web secara harfiah hanya dengan beberapa klik sehingga Anda dapat fokus pada hal-hal penting.



Dasbor yang nyaman memberikan akses cepat ke file dan folder, ke konsol, dan pengaturan apa pun. Dukungan bawaan untuk https, nama domain yang terhubung, serta perlindungan kata sandi konten situs. Pemantauan lalu lintas tersedia, serta log server melalui tautan di dasbor.



Saya juga ingin mencatat kenyamanan lain yang tidak diragukan lagi untuk pengembang. Selain log server, ketika kesalahan terjadi di sisi backend, pelacakan dan nilai lokal variabel sering kali ditampilkan tepat di jendela browser saat ini pada saat memanggil fungsi dan metode yang sesuai. Apalagi jejaknya bisa dilihat bahkan di jendela browser di smartphone.

Mode debugging semacam ini secara pribadi banyak membantu saya, memungkinkan saya untuk memperbaiki kesalahan dalam kode secara langsung.



Poin penting lainnya yang tidak diragukan lagi patut Anda perhatikan adalah bekerja dengan sistem kontrol versi. Git, svn, dan hg / mercurial tersedia di konsol Bash tertanam.



Bekerja dengan data



Saya memilih penyedia informasi keuangan Yahoo Finance dan perpustakaan yfinance karena kurangnya biaya berlangganan dan akses ke pembaruan harian informasi saham. Melalui yfinance API, layanan online menarik informasi dengan cepat dari tiga bursa saham Amerika NASDAQ, NYSE dan AMEX. Namun, Anda harus segera memperhatikan fakta bahwa ada peringatan tentang larangan penggunaan komersial di situs developer yfinance.



Sedangkan untuk teknologi interaksi server web, template dengan markup html awalnya dimuat ke dalam browser. Langkah selanjutnya adalah menjalankan javascript, yang menggunakan metode get-request untuk mengambil semua data yang diperlukan dari server. Memperbarui konten halaman dilakukan menggunakan teknologi Ajax melalui antarmuka pustaka jQuery.



Semua data layanan online disimpan dalam dua format: csv dan SQLite. Pilihan ini memungkinkan untuk segera mulai menerapkan logika dasar tanpa harus menginstal dan mengkonfigurasi server database.



Sedikit tentang Django



Saya juga ingin membahas secara terpisah tiga komponen perangkat lunak yang dibangun ke dalam arsitektur situs dengan blok siap pakai, yang secara signifikan mempercepat pengembangan. Maksud saya panel admin Django, modul manajemen sesi django.contrib.sessions, dan kerangka kerja excontrib / django_comments.



Django mengijinkan anda untuk membangun proyek dari komponen perangkat lunak terpisah yang disebut aplikasi. Setelah ditulis, aplikasi dapat digunakan kembali dalam berbagai proyek. Untuk menyematkan komponen di atas ke dalam proyek, Anda harus secara eksplisit menentukannya di file settings.py



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


Selain itu, pola URL harus dikonfigurasi dengan tepat untuk membuat permintaan dari sisi browser:



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


Seperti yang Anda lihat dari potongan kode di atas, tidak begitu sulit untuk menyematkan komponen yang sudah jadi, dan sebagai hasilnya, mereka menambahkan sebagian besar fungsionalitas ke proyek.



Setelah menerapkan kerangka kerja django, memulai panel admin memerlukan beberapa langkah sederhana: periksa pengaturan file settings.py Anda, migrasikan model data bawaan, dan buat pengguna super. Administrator diberikan login pribadinya, kata sandi dan kotak surat. Secara default, panel admin diakses dengan menambahkan jalur standar / admin / ke URL domain.

Di dalam panel ada antarmuka yang mudah digunakan untuk mengelola database bawaan. Secara default, database ini menyimpan informasi tentang pengguna dan grup pengguna. Ini sangat nyaman karena mudah untuk menerapkan otorisasi pengguna di situs. Dan jika kecepatan peluncuran situs web pada dasarnya penting, Anda dapat menghemat waktu dan tidak membuat halaman terpisah untuk mendapatkan pengguna baru dan memberi mereka hak. Cukup pergi ke panel admin dan tambahkan entri baru ke database melalui UI. Namun, solusi ini hanya cocok untuk sejumlah kecil pengguna, karena tidak memberi pengguna kemampuan untuk mendaftar dan menyetel ulang sandi mereka sendiri.



Fitur lain dari panel admin adalah memberikan akses tidak hanya ke data pengguna, tetapi, pada prinsipnya, ke data apapun yang disimpan dalam database di bawah kendali Django. Misalnya, selain data tentang pengguna resmi, database menyimpan sebagian konten situs dan komentar yang ditinggalkan oleh pengunjung.



Saya akan memberi tahu Anda tentang peretasan kehidupan yang saya gunakan untuk menambahkan formulir umpan balik ke halaman Tentang diri saya. Agar tidak menulis kode terpisah baik untuk browser atau untuk memproses data di server, alih-alih formulir umpan balik, blok komentar standar dibuat ke dalam template-html yang sesuai, tetapi kemampuan untuk melihat riwayat telah dihapus. Dengan pendekatan ini, data formulir umpan balik diolah dan disimpan dalam tabel yang sama dengan komentar pengunjung situs.



Manajemen sesi telah diimplementasikan menggunakan modul django.contrib.sessions bawaan. Objek sesi menyimpan informasi tentang pengaturan yang dipilih oleh pengguna ketika mereka mengunjungi situs. Secara khusus, sesi menyimpan periode investasi yang dipilih, periode historis untuk melakukan analisis, bahasa situs.



Saya akan membahas sedikit tentang bagaimana saya membuat situs ini multibahasa. Penting bagi saya untuk menemukan solusi yang sederhana dan cepat, di mana saya dapat membuka panel hosting dan mengedit teks artikel apa pun hanya dengan dua klik. Oleh karena itu, untuk menyimpan teks artikel, saya memilih format file teks independen, dan tidak memuat ke database. Mengingat sejumlah kecil artikel (secara kasar, hingga 10) dan hanya dua pilihan pilihan bahasa (Rusia dan Inggris), saya menganggap solusi ini cukup dapat diterima. Sekali lagi, semuanya tergantung pada skalanya.

Dan hal terakhir yang ingin saya fokuskan adalah penggunaan cetakan Django. Antara lain, templat memungkinkan Anda mengimpor nilai variabel ke halaman html langsung dari kode python, serta mengumpulkan halaman html dari beberapa blok independen. Sebagai gambaran, saya akan memberikan contoh langsung dari kode saya.



Menyematkan beberapa blok dengan konten dinamis ke kerangka umum halaman 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)


Di sini article_file_name, online_service_file_name dan comments_file_name sebenarnya adalah nama variabel yang dilalui path ke file html dengan konten yang ditambahkan.



Kesimpulan. Pengalaman yang berguna dari layanan web pengembangan diri



Anda dapat melihat hasil pekerjaan saya pada proyek ini dengan mengklik link www.emarkoff.com .



Platform pythonanywhere umumnya merupakan solusi yang baik untuk mengembangkan aplikasi web berbasis Django. Dan jika Anda memiliki ide sendiri, maka dua atau tiga bulan sudah cukup bagi Anda untuk memahami dasar-dasar dan menerapkan beberapa aplikasi web sederhana, bahkan jika Anda bukan pengembang web profesional.



Pengalaman seperti itu bisa sangat berguna bagi manajer, analis, dan siapa saja yang harus berurusan dengan pengembangan web dan layanan web yang bertugas, terutama selama tahap pengujian beta. Anda akan dapat lebih memahami arti dari pesan kesalahan server, berkomunikasi lebih produktif dengan dukungan teknis dan perwakilan pengembangan.



All Articles