penyangkalan. Artikel ini tidak dimaksudkan sebagai saran investasi atau keuangan - ini dimaksudkan murni sebagai tutorial teknis untuk pengembangan dan penelitian perangkat lunak. Kode yang diberikan hanya untuk tujuan pendidikan, apa adanya, tanpa jaminan Lihat Pengantar seri tutorial ini, jika Anda belum melakukannya. Menyiapkan grafik TradingView bisa menjadi proses yang berbelit-belit, jadi mohon maaf atas penafian dan catatan Show
Untuk menjalankan bagian tutorial ini secara lokal (dengan asumsi Anda memiliki akses ke library charting) clone repo yang tersedia di bawah ini, lalu salin folder library charting ke direktori
TradingView memungkinkan Anda untuk menggunakan Charting Library mereka di situs Anda sendiri, dengan sumber data Anda sendiri Ada dua cara untuk memasukkan data Anda ke TradingView, UDF API dan JS API. JS API memberi Anda kendali paling besar atas data Anda, dan menurut saya jauh lebih fleksibel. Ditambah itu Javascript Anda dapat mengimplementasikan koneksi data hampir seperti yang Anda inginkan, tetapi detail implementasi sebenarnya cukup kabur. Tujuan dari tutorial ini adalah untuk menunjukkan kepada Anda contoh kerja penggunaan sumber data Anda sendiri dengan grafik TradingView untuk membuat grafik statis dasar
Panduan ini dibuat dari React Javascript TradingView Contoh yang tersedia di sini RingkasanSaat widget bagan pertama kali dimuat, widget ini akan memanggil metode JS API {0 adalah pasangan default. Anda diharapkan untuk meneruskan objek {1 ke panggilan balik {2 yang diteruskan ke fungsi resolveSymbol oleh pustaka chartingSeluruh integrasi terdiri dari beberapa bagian
Bagian 1 membahas Konstruktor Widget TV, Datafeed, JS API, dan Penyedia Riwayat untuk membuat bagan statis tunggal, dengan pasangan simbol yang di-hardcode Opsi konstruktor widget mengonfigurasi widget TradingView Chart, dan memengaruhi fitur mana yang diaktifkan saat grafik dimuat pertama kali, serta opsi apa yang dapat diatur oleh pengguna Di sini kami menetapkan opsi seperti ID Pengguna, pengaturan gaya, bahasa, pasangan simbol yang akan dimuat, jalur publik ke pustaka pembuatan bagan, dan meneruskan implementasi JS API Datafeed kami
Berikut adalah opsi konstruktor yang kami mulai const widgetOptions = { Ini mengonfigurasi widget untuk menunjukkan kepada kami {0 dengan interval lilin 15 menit, dan menetapkan beberapa penyesuaian lainnya (fitur yang dinonaktifkan, pengaturan default untuk diganti, bahasa apa yang digunakan, dll) Setelah dimuat, Anda tidak perlu mengubah salah satu opsi ini, tetapi widget menampilkan metode yang dapat digunakan untuk mengubah beberapa setelan secara dinamis. (mengganti simbol dapat dilakukan melalui pencarian simbol yang akan kita implementasikan pada tutorial bagian 3) Saya telah menyetel bagan saya ke default ke mode gelap dengan menyetel {5Integrasi Umpan Data JS API Sekarang setelah widget dikonfigurasi dan ditata sesuka kita, mari kita lihat bagaimana kita menghubungkan data grafik kita ke JS API TradingView Charting Library JS API benar-benar sebuah Objek yang Anda berikan ke Widget TradingView, yang memaparkan fungsi-fungsi yang akan dipanggil oleh TradingView, dan dalam kebanyakan kasus Anda diharapkan untuk meneruskan data ke Callback dalam fungsi-fungsi tersebut agar data Anda bekerja dengan tradingview Sebagai contoh, kami menggunakan data bagan historis CryptoCompare*, dan di bagian 2, API websocket mereka untuk mendapatkan pembaruan harga waktu nyata Tradingview akan memanggil metode yang Anda berikan sesuai kebutuhan untuk mengisi grafik saat ini dengan data, serta metode siklus hidup lainnya yang harus Anda implementasikan Di bawah ini adalah seluruh tanda tangan objek JS API yang diharapkan Tradingview untuk Anda teruskan ke widget. Beberapa metode bersifat opsional, lihat dokumen untuk info lebih lanjut { Saat bagan pertama kali dimuat, alur JS API berjalan seperti ini 1. {6 dipanggil, diteruskan ke {7 2. {8 dipanggil, berikan objek symbolInfo ke {9 3. const config = {_0 dipanggil, berikan array objek ohlcv dengan waktu UTC dalam milidetik ke const config = {1 Mari kita lihat implementasi kita untuk masing-masing ini onReadyconst config = { {6 dipanggil segera setelah widget bagan diinisialisasi, dan kita harus meneruskan opsi konfigurasi datafeed ke fungsi const config = {3 {7. Pustaka charting menginginkan ini dieksekusi secara asinkron, dan menyarankan pembungkusan dalam setTimeout dengan penundaan 0 untuk memaksa perilaku ini Saat ini kami hanya menentukan kemungkinan, const config = {5 yang memberi tahu perpustakaan bagan mana pilihan interval yang didukung umpan data kami untuk bilah. Ini akan ditampilkan kepada pengguna, dan dapat diganti per pasangan simbol nanti di resolveSymbol . Daftar yang kami sediakan diterjemahkanconst config = {_7 Nanti di tutorial kita akan menambahkan opsi ke konfigurasi Datafeed kita, saat kita mengimplementasikan grafik pencarian dan realtime solveSymbolSetelah umpan data dikonfigurasi, pustaka pembuatan bagan akan memanggil {8 dengan properti const config = {9 dari objek konfigurasi widget. Kami hanya diberi nilai string, dan harus mengembalikan objek symbolInfo yang mewakili simbol yang sesuai resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) => { Di sinilah Anda mengonfigurasi pasangan individu, mengatur jumlah tempat desimal untuk ditampilkan, berapa banyak pergerakannya per tick (untuk crypto hampir selalu 1), dan sangat penting dan mudah untuk dikacaukan, resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) => {0. Karena crypto diperdagangkan tanpa henti, kami menyetel sesi ke resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) => {1. Zona waktu seharusnya menjadi zona waktu pertukaran simbol ini diperdagangkan, tidak terlalu penting dengan sesi 24 jam Semua dokumentasi untuk symbolInfo ada di sini, pastikan Anda membiasakan diri dengannya resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) => {2 dan resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) => {3 kontrol menunjukkan bar interval di bawah 1 hari. Sekarang di sinilah saya membuat banyak kesalahan. Tradingview dapat membangun beberapa bar untuk Anda. Sebagai contoh, anggaplah API data historis kita hanya dapat memberi kita data untuk interval 1 menit, artinya jika kita meminta data 24 jam terakhir, kita akan mendapatkan 1440 poin data, jumlah menit dalam 24 jam. Tetapi bagaimana jika kita ingin menampilkan bar 15 menit? . Pustaka charting akan membuat bar 15 menit untuk Anda, dan menampilkannya di chart Kami melakukan hal yang sama untuk bar jam, memberi tahu tradingview bahwa kami dapat menyediakan bar 60 menit, dan itu harus membangun bar 2 jam dan 4 jam kami sendiri dari bar 60 menit kami Ticker juga sangat penting. Jika disetel, pustaka bagan akan menggunakan ticker secara internal untuk merujuk ke pasangan unik ini (nilai ticker akan dikirim ke resolveSymbol sebagai ganti bidang nama). Bidang nama inilah yang akan ditampilkan kepada pengguna. Saya menyetel resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) => {6 dan resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) => {7 ke nilai yang sama untuk membuat hidup saya lebih mudah, dan karena nama yang saya gunakan menyertakan semua informasi yang saya perlukan untuk mengidentifikasi simbol. pertukaran, ke simbol, dan dari simbol (mis. g. Coinbase. BTC/USD) Skala harga sedikit menarik, karena pasangan yang berbeda dapat menggunakan presisi desimal yang berbeda. Misalnya, BTC/USD diukur hingga dua tempat desimal, jadi resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) => {8 tetapi misalnya TRX/BTC (0. 00000771 BTC pada saat penulisan), kami mengukurnya ke satoshi, 8 desimal. Jadi untuk TRX/BTC resolveSymbol: (symbolName, onSymbolResolvedCallback, onResolveErrorCallback) => {9 tetapi untuk TRX/USD ($0. 059432 pada saat penulisan), kita akan menggunakan 6 angka desimal dan getBars: function(symbolInfo, resolution, from, to, onHistoryCallback, onErrorCallback, firstDataRequest) {0 Penting untuk memahami bagaimana symbolInfo memengaruhi bagan Anda, jadi periksalah dokumennya getBarsSekarang ke bagian yang menyenangkan. Mendapatkan data grafik dari sumber API kami dan menyerahkannya ke TradingView getBars: function(symbolInfo, resolution, from, to, onHistoryCallback, onErrorCallback, firstDataRequest) { Oke, mari kita hancurkan semua kode itu Tradingview memanggil getBars: function(symbolInfo, resolution, from, to, onHistoryCallback, onErrorCallback, firstDataRequest) {1 dan meneruskan objek symbolInfo yang kami berikan ke panggilan balik resolveSymbol resolusi, resolusi (apakah kita memerlukan bilah 1 menit? Batang 60 menit? 1 hari?), ke dan dari stempel waktu, dan tanda boolean jika ini adalah data pertama permintaan untuk simbol iniDari sana, kami memanggil getBars: function(symbolInfo, resolution, from, to, onHistoryCallback, onErrorCallback, firstDataRequest) {_3 yang merupakan kode yang telah kami tulis untuk mengambil data ohlcv historis dari API harga historis Cryptocompare. Kita harus meneruskan larik data batang ke getBar's const config = {1 , larik itu bisa terlihat seperti ini untuk data batang 1 menit [ Jadi file historyProvider kami bertanggung jawab untuk benar-benar membuat permintaan ke CryptoCompare untuk mendapatkan data yang sesuai. Untuk membuat permintaan dengan CrytoCompare kita perlu mengetahui simbol ke, dari simbol, dan pertukaran spesifik yang kita inginkan dari data Karena kami telah memilih untuk memasukkan semua informasi yang relevan ke dalam nama simbol (Coinbase. BTC/USD), kami dapat mengekstrak parameter tersebut dari string getBars: function(symbolInfo, resolution, from, to, onHistoryCallback, onErrorCallback, firstDataRequest) {5 TradingView juga meneruskan getBars: function(symbolInfo, resolution, from, to, onHistoryCallback, onErrorCallback, firstDataRequest) {_6 ke getBars, yang akan menginformasikan titik akhir API apa yang kami minta dari CryptoCompare, titik akhir data historis menit, jam, atau hari Karena keterbatasan API CryptoCompare (kami hanya bisa mendapatkan 2000 catatan sekaligus) kami mungkin mengirimkan kumpulan data yang tidak lengkap yang diminta oleh TradingView. Jangan khawatir. getBars akan dipanggil lagi, dengan stempel waktu baru ke dan dari, hingga semua data yang diperlukan untuk mengisi bagian bagan yang terlihat diperoleh Hore untuk Grafik Statis Saya harap ini telah membantu Anda. Proses ini membuat saya kewalahan pada awalnya, itulah sebabnya saya mencoba berbagi pembelajaran dengan Anda, ini adalah proses yang membingungkan Anda mungkin berpikir "Oke, Jon, tapi bagan statis tidak banyak membantu saya". Di bagian 2 dari rangkaian tutorial ini, kami mengimplementasikan pembaruan waktu nyata pada bagan. Penting untuk memahami konsep yang diuraikan di sini terlebih dahulu, dan membiasakan diri dengan dokumentasi TradingView
Saya yakin banyak dari Anda yang masih bingung, atau menemukan kesalahan yang mungkin saya buat. Jangan ragu untuk berkomentar di sini, atau hubungi melalui email di bawah ini 👇👇 Kode
jonchurch/tradingview-js-api-tutorialBerkontribusi pada pengembangan tradingview-js-api-tutorial dengan membuat akun di GitHubgithub. com
|