Ada broker seperti itu - Tinkoff Bank. Dan ada masalah dalam kenyataan bahwa pada saat ini broker ini tidak memiliki perintah take / profit loss. Oleh karena itu, jika Anda ingin berdagang lebih aktif, maka Anda perlu menggunakan semacam solusi sementara, sementara di kedalaman programmer Tinkoff sedang mengembangkan fitur pembunuh ambil untung / hentikan kerugian, dan di bawah potongan adalah salah satunya.
pembaruan: 03/22/2019, Broker meluncurkan versi utama 3.0.0 di Google Play, di mana take / stop loss masih muncul.
Mengapa saya memutuskan untuk menulis artikel ini di sini? Bagi saya, Tinkoff Bank dan produk-produknya cukup populer di kalangan orang-orang TI, dan mungkin seseorang memiliki kebutuhan yang sama, tetapi tidak ada keinginan atau waktu untuk mengenakan sepeda. Karena itu, saya bagikan.
Untuk mulai dengan - tentang peluang alternatif yang disediakan oleh broker itu sendiri.
Pertama, Tinkoff memiliki limit order yang muncul pada Februari 2019 (mereka menunggu dua tahun, tidak ada lelucon!), Tetapi mereka bekerja dalam satu hari dan, lebih buruk lagi, dalam interval uang yang kecil, yang menciptakan ketidaknyamanan di pasar yang bergejolak. Sangat tidak mungkin untuk menetapkan nilai kurang (lebih) dari ambang tertentu yang dihitung dari kutipan saat ini. Yah, mungkin tidak mungkin untuk meminta lebih dari satu batas pesanan (ketika saya mencoba untuk menyimpan urutan pertama, aplikasi seluler selalu macet, tetapi situs tersebut tidak memiliki fungsi seperti itu).
Kedua, di dalam aplikasi seluler mereka, Anda dapat berlangganan perubahan harga dengan menetapkan ambang batas absolut atau ambang batas untuk perubahan persentase (kenaikan atau penurunan), tetapi Anda dapat menetapkan satu dan hanya satu ambang batas per aset.
Logika sepeda saya sederhana:
1) kami memiliki ambang batas (selanjutnya - ambang batas) untuk keamanan (aset) kami, di mana kami harus memiliki tindakan ambil untung / hentikan kerugian secara manual. Ambang dihitung secara independen, berdasarkan harga pembelian aset;
2) kita perlu mengurai data harga saat ini dari suatu aset;
3) kirim pemberitahuan kepada diri Anda sendiri jika salah satu ambang batas telah tercapai.
Meskipun deskripsi langsung, ada nuansa dalam implementasinya :)
1) Sementara portofolio saya terdiri dari satu aset, saya menetapkan ambang batas langsung di badan skrip, dan pencarian kertas bahkan dibuat bukan variabel, tetapi hanya garis ajaib. Keputusan yang buruk, tetapi cukup untuk menguji ide itu. Saat portofolio terdiversifikasi, saya membuat file dari mana sekuritas dimuat, bursa tempat mereka diperdagangkan, dan nilai ambang batas.
2) Karena aset saya adalah keamanan asing yang diperdagangkan di St. Petersburg Exchange, pertama-tama saya memutuskan untuk mengurai data dari situs web St. Petersburg Exchange dari halaman berikut:
spbexchange.ru/ru/market-data/Default.aspxPenyortiran di Bursa Saham St. Petersburg terjadi sesuai dengan volume perdagangan, dan keamanan saya selalu ada di halaman pertama. Itu bekerja dengan baik, tetapi pada 8 Maret semuanya rusak. Untuk beberapa alasan, TSLA sudah ada di halaman 25, dan paginator mereka memuat data secara dinamis melalui JS. Masalah ini dapat diselesaikan "langsung": parsing semua halaman sampai kami menemukan aset kami. Tetapi pendekatan ini tidak terlalu efektif, jika kita mempertimbangkan waktu eksekusi dari skrip loop. Sebagai gantinya, saya memutuskan untuk menambahkan parsing dari tradingview.com. Tidak perlu menyekop daftar panjang di lebih banyak halaman. Di sana, setiap aset memiliki sesuatu seperti tautan ini:
www.tradingview.com/symbols/NASDAQ-TSLATampaknya bagi saya bahwa semuanya harus dimulai dengan cepat dan sederhana, tetapi ada masalah - data yang menarik bagi saya dimuat melalui JS dan Permintaan yang biasa tidak dapat mengatasinya.
Masalah ini memiliki tiga solusi yang saya tahu:
PyQT, selenium (webdriver) dan ekstensi Requests-HTML. Karena saya sudah memiliki Permintaan dalam proyek, diputuskan untuk menggunakan ekstensi sendiri.
Sayangnya, solusi ini bekerja sangat tidak stabil, saya harus mencari solusi.
session = HTMLSession() r = session.get(url) my = r.html.render(timeout=30) selector = 'span.tv-symbol-header-quote__value.tv-symbol-header-quote__value--large.js-symbol-last' price = r.html.find(selector)[0].text r.close() session.close()
Perhatikan batas waktu, serta panggilan ke metode close (). Mereka tidak ditemukan dalam semua contoh, tetapi bekerja lebih baik dengan mereka daripada tanpa mereka.
3) Kami mendaftar pada layanan yang dapat mengirim SMS (sms.ru), mengambil API mereka, membuat kunci. Hingga 5 SMS per hari - gratis. Cukup buat saya.
Kuncinya terlihat seperti ini:
24A41EA5-EEEE-Priv-5555-094143C2EDDD
dan mengirim SMS dalam versi pertama diimplementasikan seperti ini:
def send_message(mymessage): sms_url = 'https://sms.ru/sms/send?api_id=key&to=number&msg=message&json=1' sms_url = sms_url.replace('key', mykey) sms_url = sms_url.replace('number', mynumber) sms_url = sms_url.replace('message', mymessage) sms_response = requests.get(sms_url)
Selama pengembangan, muncul pertanyaan berikut: apa yang harus dilakukan jika kami telah mengirim SMS kepada pengguna tentang melewati ambang batas? Meskipun tidak ada cek, ia mengirim SMS lagi. Setiap saat. Cukup cepat "memakan" batas bebas dan mulai berpikir apa yang harus dilakukan dengannya. Saya harus menambahkan penghitung SMS terkirim (sms_counter), yang kami periksa sebelum menelepon send_message.
global sms_counter sms_counter = sms_counter + 1
Pertanyaan lain akan muncul: sangat baik, selama sesi perdagangan kami memproses satu ambang batas dengan aset tertentu, dan ini cocok untuk kami. Apa yang harus dilakukan untuk sesi perdagangan berikutnya? Diputuskan untuk me-reset penghitung SMS yang dikirim. Ada tiga opsi: untuk menyimpan data dalam basis data (tetapi saat ini saya memiliki aplikasi stateless), parse waktu / tanggal atau mulai ulang skrip. Sejauh ini saya membuat opsi ketiga, tetapi di masa depan saya akan beralih ke opsi kedua atau pertama.
Sekarang solusinya sudah operasional, dan dapat diunduh dari
GithubUntuk pengguna yang tidak mengerti apa itu Python dan bagaimana mengkonfigurasinya, saya sarankan mencoba meluncurkan
solusi paket
untuk WindowsRencana untuk pengembangan lebih lanjut:
1) menguraikan tanggal / waktu, untuk mengatur ulang penghitung SMS (alih-alih memulai ulang skrip);
2) sekarang ini adalah aplikasi tanpa kewarganegaraan, tetapi saya bermaksud mengacaukan basis data;
3) setelah item 2, saya ingin menambahkan pelacakan kenaikan tajam / kenaikan harga, relatif terhadap harga penutupan hari sebelumnya;
4) memperluas peluang "komunikasi": lebih banyak jalur (Telegram, Viber, panggilan suara, opsi lain) dan penyedia (saya bermaksud untuk menambahkan smsc.ru, karena sms.ru kadang-kadang kehilangan responsif, dan meskipun mengirimkan SMS, tetapi skrip tidak dieksekusi lanjut sampai kami mendapat sms_response).