Fsharp moving average


Referensi Algoritma Dokumentasi Algoritma Referensi Memilih Algoritma Data Aset secara manual dapat berlangganan data untuk aset tertentu yang mereka butuhkan, atau menggunakan alam semesta untuk memilih kelompok aset berdasarkan kriteria penyaringan (misalnya semua saham dengan volume lebih besar dari 10 hari). Lihat lebih lanjut tentang Universes di sini. Untuk berlangganan secara manual ke aset tertentu, Anda dapat memanggil AddEquity (). AddForex (). AddCfd () dan AddOption () dalam metode Inisialisasi Anda (). Anda dapat berlangganan datafeeds resolusi 500 menit, 100 resolusi kedua feed dan 10 tick resolution datafeeds. QuantConnect mendukung perdagangan internasional di berbagai zona waktu dan pasar. Pasar digunakan untuk membedakan antara ticker yang sama di bursa berbeda (misalnya FXCM dan Oanda keduanya menawarkan EURUSD, namun memiliki tingkat yang berbeda). QuantConnect menyediakan 40TB Data Ekuitas AS, AS, FXCM FX dan Oanda FX. Lihat informasi lebih lanjut tentang data kami di perpustakaan data kami. Kami menyediakan data dalam resolusi tick, second, minute, hour atau daily. Ini ditentukan oleh enum Resolusi. Jika ada celah dalam data (mis., Karena tidak ada perdagangan), secara default data masih dipompa ke strategi Anda pada setiap langkah waktu. Perilaku ini disebut fillForward dan default ke true. Anda dapat menonaktifkan ini dengan menyetel fillForward ke false. Secara default data di QuantConnect adalah Split dan Dividen disesuaikan mundur pada waktunya untuk memberikan harga yang terus menerus. Ini memudahkan penggunaan indikator. Beberapa algoritma memerlukan data harga mentah atau sebagian disesuaikan. Anda dapat mengontrolnya dengan metode SetDataNormalizationMode (). DataNormalizationMode enum memiliki nilai Adjusted (default), Raw, SplitAdjusted, dan TotalReturn. Jika Anda memiliki data khusus Anda sendiri yang ingin Anda dukung, lihat bagian data khusus. Setting Warm Up Period Seringkali algoritma membutuhkan beberapa data historis untuk mendapatkan indikator teknis utama, atau mengisi data historis. Dengan menggunakan metode SetWarmUp (TimeSpan period) atau SetWarmUp (int barCount) Anda dapat menentukan periode pemanasan untuk algoritma Anda yang memompa data dari sebelum tanggal mulai. Selama periode pemanasan Anda tidak bisa melakukan perdagangan. Algoritma dapat menggunakan properti IswarmingUp bool untuk menentukan apakah periode pemanasan telah selesai. Lihat lebih lanjut tentang penggunaan data historis di bagian Riwayat. Model Kas dan Pialang Rekening pialang ekuitas AS adalah rekening berbasis Kas atau Margin. Rekening kas tidak mengizinkan perdagangan leveraged, sedangkan akun Margin mendukung leverage 2-4x pada nilai akun Anda. Anda dapat mengatur jenis akun broker Anda di inisialisasi Anda dengan SetBrokerageModel (broker BrokerageName, akun AkunType). Enum BrokerageName mendukung nilai Default, TradierBrokerage, InteractiveBrokersBrokerage, FxcmBrokerage dan OandaBrokerage. Saat menetapkan nama broker kami juga mengatur struktur biaya perdagangan untuk broker tersebut. EnumerType enum mendukung nilai-nilai Kas dan Margin. Bila menggunakan leverage tunai dinonaktifkan secara default, dan jangka waktu penyelesaian setel menjadi 3 hari. Akun marjin segera diselesaikan dan memiliki leverage 2. Akun marjin dengan lebih dari 25.000 di ekuitas memenuhi syarat untuk batas margin perdagangan pola hari. Hal ini meningkatkan leverage yang tersedia ke 4x saat pasar terbuka dan 2x semalam. Untuk memodelkan perilaku ini dalam algoritme Anda, Anda harus mengatur margin MarginModel keamanan Anda pada PatternDayTradingMarginModel. Lihat lebih lanjut tentang model broker di bagian Realitas Pemodelan. Penanganan Data Data yang diminta dilewatkan ke event handlers agar bisa Anda gunakan untuk membuat keputusan trading. Penangan event utama, Slice, mengelompokkan semua tipe data secara bersamaan pada satu momen dalam penangan data OnData (data Slice). Slice adalah singkatan dari slice time - mewakili irama waktu dan nilai data pada saat itu. C dan F juga memungkinkan Anda menerima data dengan penangan acara khusus untuk setiap jenis data, misalnya OnData (data TradeBars). Python hanya mendukung penangan event Slice. Semua data menggunakan objek DataDictionary untuk mengelompokkan data dengan simbol dan memberikan akses mudah ke informasi. Bentuk jamak dari jenis ini menunjukkan kumpulan objek mis. DataDictionary TradeBars terdiri dari objek TradeBar. Anda dapat mengakses titik data individual di kamus melalui indeks kamus string atau simbolnya. Misalnya var ibmTradeBar tradebarsIBM. Slice Time Slice event handler menggabungkan semua data menjadi satu metode tunggal. Ini mewakili data pada satu titik waktu. Objek Slice berisi banyak pembantu untuk mengakses data Anda. Objek Slice sampai ke pengendali event OnData (data Slice). Objek Slice memungkinkan akses langsung melalui sifat yang sangat diketik, pengindeks stringsymbol dinamis dan metode DataDictionaryltTgt GetltTgt yang sangat diketik. Akses yang diketik dengan ketat memberi Anda waktu kompilasi namun tipe dinamis terkadang menyederhanakan pengkodean. Python diketik secara dinamis sehingga tidak memiliki metode Get. Akses data Slice Primer adalah melalui indexer stringsymbol. Slice adalah metode yang disarankan untuk mengakses data dalam algoritma Anda. LEAN mendukung backtesting hampir semua sumber data khusus eksternal. Untuk menggunakan fitur ini Anda perlu menambahkan data saat menginisialisasi menggunakan AddDataltTgt () dan menginstruksikan algoritma Anda cara membaca data Anda. Kami menyediakan bantuan untuk sumber data populer seperti Quandl, namun jika Anda menggunakan server format Anda sendiri, Anda perlu membuat tipe kustom. Menginisialisasi Data Kustom Selama menginisialisasi algoritma Anda harus menggunakan AddDataltTgt (string ticker, Resolution resolution Resolution. Daily). Ini memberi LEAN pabrik tipe T untuk membuat objek, nama data dan resolusi untuk memotret data untuk memeriksa pembaruan. Kerangka kerja memeriksa data baru setiap seperti yang diinstruksikan oleh periode Resolusi, yaitu Resolution. Tick polling terus-menerus, Resolution. Second polling setiap detik, dan Resolution. Minute setiap menitnya. Resolusi Per Jam dan Harian disurvei setiap 30 menit untuk mencegah melewatkan satu hari jika data dipancarkan terlambat. Membuat dan Membaca Data Kustom Anda harus membuat tipe kustom untuk menginstruksikan LEAN untuk mendapatkan data Anda, dan bagaimana membacanya. Kami mendukung berbagai jenis dan format data. Anda bahkan dapat mengubah lokasi sumber untuk mode backtesting dan live. Semua data harus diperluas dari BaseData dan menggantikan metode Reader dan GetSource. GetSource menginstruksikan LEAN untuk mencari data Anda. Ini harus mengembalikan objek SubscriptionDataSource yang berisi Url string untuk menemukan data Anda, dan format data (SubscriptionTransportMedium RemoteFile or Rest). Bila sumbernya kembali mengubah URL, data diunduh lagi. Hal ini memungkinkan LEAN untuk menyimpan file besar dan hanya mendownload data baru saat diminta. Ini juga memungkinkan Anda memecah data intraday besar menjadi file harian yang lebih kecil, mempercepat backtest. Saat menggunakan SubscriptionTransportMedium. Rest url yang diberikan akan disurvei pada setiap langkah waktu Resolution dan diasumsikan cukup untuk 1-data point. Ini umumnya ditujukan untuk sumber data langsung. Pembaca mengambil satu baris data yang disediakan oleh sumbernya, dan mem-parsingnya menjadi salah satu objek khusus Anda (misalnya Yahoo dalam cuplikan kode). Selain menyetel properti jenis kustom Anda, Anda juga harus berhati-hati untuk menetapkan tiga properti wajib: Simbol - Harus selalu disetel ke config. Symbol Time - Diperlukan sinkronisasi data khusus Nilai - Diperlukan untuk perhitungan pembelian dan portofolio Bila tidak ada yang dapat digunakan Data dalam satu baris, tipe Anda harus mengembalikan null. Algoritma Efek dan Portofolio memiliki properti Efek yang menyimpan objek Keamanan untuk setiap aset dalam algoritme Anda. Objek keamanan menyimpan model (perilaku backtesting) dan properti suatu aset. Setiap keamanan dapat sepenuhnya disesuaikan untuk berperilaku seperti yang Anda inginkan. Efek adalah DictionaryltSymbol, Securitygt sehingga Anda dapat mengakses objek Keamanan Anda dengan ticker SecuritiesIBM. Price mereka. Benda keamanan juga membawa semua model untuk menciptakan backtests yang realistis. Model ini ditetapkan melalui properti keamanan publik dan kemudian digunakan di LEAN untuk memperbaiki realisme backtest Anda. Properti Portofolio adalah kumpulan objek SecurityHolding untuk memudahkan akses properti penyimpanan. Kelas Portofolio adalah DictionaryltSymbol, SecurityHoldinggt sehingga dapat diakses melalui indeks ticker: PortfolioIBM. IsLong Informasi terperinci mengenai kelas-kelas ini dapat ditemukan dalam dokumentasi LEAN. Lihat kelas Keamanan (objek Efek), dan kelas SecurityHolding (Portfolio objects). Perdagangan dan Pesanan Konsep Utama Algoritma dapat melakukan pemesanan melalui metode yang sesuai di API. Akan lama dilambangkan dengan nomor urut yang dipesan, dan singkatlah yang negatif. LEAN tidak mendukung lindung nilai (panjang dan pendek pada saat bersamaan). Menempatkan pesanan menghasilkan OrderTicket yang dapat Anda gunakan untuk memperbarui, membatalkan atau memeriksa status pesanan Anda. Untuk memperbarui pesanan dapat memanggil metode Update di OrderTicket. Metode Update mengambil objek UpdateOrderFields yang mendefinisikan properti apa yang harus diupdate. Dengan cara yang sama Anda bisa membatalkan pesanan Anda dengan metode OrderTicket Cancel. Properti Status OrderTicket dapat digunakan untuk menentukan apakah pesanan sudah terisi. Enum OrderStatus memiliki nilai Submitted, PartiallyFilled, Filled, Cancelled or Invalid. Set Holdings Helper Seringkali algoritma berbasis portofolio ingin menetapkan portofolio berdasarkan persentase bobot. Kami menyediakan metode penolong untuk melakukan pembobotan ini untuk Anda yang disebut SetHoldings. Ketika likuidasi kepemilikan yang ada ditetapkan benar kepemilikan yang ada akan dijual terlebih dahulu. Ini mungkin berguna saat Anda menyeimbangkan kembali saham baru. Metode Liquidate bisa mencapai efek yang sama. Likuidasi menjual semua kepemilikan dalam portofolio Anda, atau hanya simbol ticker jika parameternya ditentukan. SetHoldings menetapkan sebagian kecil dari ekuitas yang tidak terpakai. misalnya Jika Anda memiliki 2x leverage yang tersedia, dan SetHoldings to 1.0, algoritma akan menggunakan 1.0 dari daya beli yang ada. Untuk memaksimalkan daya beli dalam hal ini Anda akan membuat total pecahan SetHoldings 2.0. Seringkali Anda mungkin ingin memutar sekuritas dalam algoritma Anda berdasarkan kriteria filter. Anda mungkin hanya menginginkan ekuitas di atas 200 hari EMA mereka, atau hanya mengikuti saham pada daftar simbol khusus Anda. Hal ini dimungkinkan dengan menggunakan API pemilihan alam semesta kita. Alam semesta adalah bagaimana LEAN mengatur koleksi data langganan di bawah tenda. Setiap keamanan dan datanya dikendalikan oleh alam semesta. Bila tidak ada alam semesta yang meminta data, aset tersebut akan dihapus dari algoritme Anda. Jika algoritme Anda memiliki perintah terbuka atau kepemilikan dalam keamanan, kami tidak akan menghapusnya dari langganan Anda. Setiap algoritma memiliki hidden user-defined-universe. Aset di alam semesta ini ditentukan oleh metode AddEquity AddForex. Aset ini tetap dan tidak pernah dihapus dari algoritme Anda. Alam semesta disegarkan setiap hari secara default, namun dapat disegarkan sesering yang diperlukan. Ini dikontrol dalam variabel algorithm. UniverseSettings yang digambarkan dengan lebih baik di bawah ini. Universe Dasar Menambahkan Alam Semesta Universit ditambahkan dengan menggunakan API metode AddUniverse (). Mereka adalah jenis langganan data yang mengontrol langganan apa yang diminta dan karena itu Anda dapat membuat jenis data alam semesta khusus. Bergantung pada jenis alam semesta yang Anda tambahkan, ada banyak metode penolong untuk membuatnya lebih mudah. AddUniverse () metode mengambil filter fungsi sebagai parameter, filter ini harus mengembalikan enumerable dari objek Simbol. Pengaturan Universe Jika Anda tidak lulus dalam objek alam semesta penuh properti UniverseSettings digunakan untuk mengisi kekosongan. Mengubah properti algoritma UniverseSettings dapat membantu untuk mempermudah penambahan alam semesta. Alam semesta memiliki 4 sifat utama: Setelah ditambahkan alam semesta disimpan di dalam IDictionaryltstring, Universegt UniverseManager. Peristiwa Alam Semesta Saat isi alam semesta berubah (sekuritas ditambahkan atau dihapus dari algoritma), kami menghasilkan acara OnSecuritiesChanged. Hal ini memungkinkan algoritma Anda mengetahui perubahan keadaan alam semesta. Acara tersebut lolos ke objek SecurityChanges yang berisi referensi ke surat berharga Ditambahkan dan yang Dihapus. Seleksi Universe yang Kasar Pilihan Universe Universe Universe adalah data alam semesta yang disediakan oleh QuantConnect. Dengan menggunakan data keuangan, kami menghasilkan beberapa properti utama untuk setiap simbol dan memungkinkan Anda memfilter jagad 16.400 simbol untuk menerima simbol yang sesuai dengan kriteria filter Anda. Ini menggunakan tipe CoarseFundamental. Dasar kasar memiliki sifat berikut yang dapat Anda gunakan untuk melakukan penyaringan kasar. Penyaringan kasar memungkinkan Anda memilih semesta simbol yang tidak terbatas untuk dianalisis. Anda hanya dibatasi oleh memori praktis dan batas kecepatan dan dengan cepat bisa kehabisan memori jika Anda membelokkan terlalu banyak simbol secara paralel. Batas ini dapat ditingkatkan dengan berlangganan. Custom Universe Selection Alam semesta khusus memungkinkan penggunaan sumber data eksternal sebagai sumber penyaringan keamanan. Seperti sumber data kustom biasa, alam semesta khusus disediakan dengan memperluas BaseData. Dengan sistem ini Anda dapat menentukan format data untuk memfilter dan memilih data. Setiap BaseData dari semesta adat adalah 1 baris file sumber. Metode Pembaca akan dipanggil berulang kali sampai kemajuan datetime atau akhir file tercapai. Dengan cara ini mesin Anda dapat mengelompokkan data alam semesta bersama-sama, dan menyebarkannya sebagai koleksi tunggal ke dalam fungsi filter. Model dapat digunakan untuk meningkatkan keakuratan backtesting Anda. Kami menyediakan model standar dasar yang menganggap Anda berdagang dengan aset sangat likuid, namun jika Anda memperdagangkan volume tinggi, atau dengan aset bervolume rendah Anda harus memperbarui model ini agar lebih realistis. Semua model ditetapkan berdasarkan keamanan per. Untuk menetapkan model, pertama ambil objek keamanan dan terapkan model Anda. Semua model harus disiapkan dalam metode Inisialisasi () Anda. Model Pialang Kami menyediakan cara pintas untuk menetapkan model dan properti umum yang terkait dengan masing-masing broker yang kami dukung. Model pialang ini menetapkan biaya, mengisi model, model selip dan pasar perdagangan untuk brokerage. Selain itu mereka memvalidasi adalah mungkin untuk mengirimkan perdagangan ke pialang (misalnya mengirimkan perdagangan ekuitas ke broker hanya forex). Model biaya transaksi Pasar yang didukung Model slippage Validasi pesanan dan update sebelum diajukan Tipe akun default (akun margin atau tunai) Dukungan untuk jam kerja pasar yang diperluas Bagaimana pembagian dan dividen diterapkan pada tiket pesanan terbuka Leverage default untuk aset Model penyelesaian default Ini memberi Anda besar Kontrol atas perilaku algoritma Anda dan memungkinkan Anda memodelkan hampir semua broker di dunia. Model perombakan menggantikan model lain yang mungkin Anda tetapkan untuk keamanan. Model Biaya Transaksi Model biaya transaksi menetapkan biaya untuk setiap pesanan. Kami menyediakan model transaksi yang disesuaikan untuk semua broker, tapi Anda juga bisa mengatur sendiri. Seperti semua model mereka harus ditetapkan pada keamanan dengan basis keamanan. Model transaksi menerapkan antarmuka ISECurityTransactionModel. Jika Anda ingin menerapkan model transaksi Anda sendiri, Anda dapat memulai dengan metode SecurityTransactionModel dan mengganti yang ingin Anda ubah. Model Slippage Slippage adalah selisih harga antara kutipan terakhir yang Anda laporkan dan harga sebenarnya yang harus dipenuhi perdagangan. Perbedaan ini dan menjadi positif atau negatif, karena terkadang harganya bisa tergelincir sesuai keinginan anda. Di pasar yang mudah berubah Anda cenderung mengalami lebih banyak selip. Model slippage menerapkan antarmuka ISlippageModel. Kami menyediakan SpreadSlippageModel untuk sekuritas berbasis forex, dan ConstantSlippageModel for Equities. Pengguna tingkat lanjut mungkin ingin menerapkan model slippage berbasis volatilitasnya sendiri - meningkatkan keakuratan backtests Anda di pasar yang bergejolak. Model Isi Model Isi memberi Anda kendali atas pengisian pesanan. Setiap jenis pesanan yang didukung dilewatkan melalui metode khusus dan mengembalikan objek OrderEvent. OrderEvents digunakan untuk membawa informasi tentang pemenuhan sebagian atau kesalahan pesanan. Model Isi menerapkan antarmuka IFillModel. Mereka memiliki metode kunci berikut: Kami menyediakan ImmediateFillModel yang berisi perintah dan segera dan benar-benar terisi. Model Margin Model margin mengontrol seberapa banyak daya beli yang harus dilakukan oleh algoritme Anda. Perhitungan margin bisa sangat kompleks dan bergantung pada banyak faktor termasuk brokerage atau bahkan day of day. Model margin menerapkan antarmuka ISECurityMarginModel dan default ke kelas SecurityMarginModel. Kami juga menyediakan PatternDayTradingMarginModel untuk memodelkan pola hari intraday trading untuk ekuitas AS. Model Penyelesaian Setelah perdagangan dilakukan, broker menyiapkan uang tunai tergantung pada pasar dan jenis rekeningnya. Ini dikelola oleh Model Penyelesaian kami. Tipe permukiman yang paling umum adalah langsung - dimana dana tersedia untuk diperdagangkan segera. Ini ditangani oleh ImmediateSettlementModel. Ekuitas AS diperdagangkan dengan rekening kas biasanya diselesaikan 3 hari setelah transaksi terjadi. Ini dikelola oleh DelayedSettlementModel. Model permukiman menerapkan antarmuka ISettlementModel. Anda dapat membuat model permukiman Anda sendiri dengan menerapkan metode ini. Sebagian besar pengguna tidak perlu membuat model permukiman mereka sendiri dan dapat menggunakan salah satu opsi yang diberikan di atas. Model Portofolio Model portofolio mengendalikan bagaimana pengisian pesanan diterapkan ke portofolio Anda. Mereka mengambil OrderEvent. Security and SecurityPortfolioManager object dan update holdings untuk mencerminkan posisi akhir yang baru. Anda hanya perlu memperbarui model portofolio saat Anda membuat jenis aset baru. Model portofolio menerapkan antarmuka ISECurityPortfolioModel. Model Volatilitas Model volatilitas adalah properti dari sebuah keamanan. Persis bagaimana volatilitas dihitung sangat bervariasi antara strategi sehingga memberikan titik tolak di sini. Model volatilitas akan diperbarui dengan data setiap langkah waktu dan diharapkan segera diperbarui. Hal ini terutama memerlukan opsi backtesting. Model volatilitas menerapkan antarmuka IVolatilityModel. Kami default ke NullVolatilityModel yang mengembalikan 0 volatilitas setiap saat. Sebagai pembantu kami juga menyediakan RelativeStandardDeviationVolatilityModel yang menghitung volatilitas berdasarkan standar deviasi. Kami menyediakan API charting yang kuat yang bisa membangun banyak jenis bagan. Paling sederhana, ini bisa digunakan dengan satu baris kode: Dengan kode ini, grafik garis ditambahkan di bawah diagram Equity Strategy Anda dan nilai yang diminta ditampilkan dari waktu ke waktu. Untuk membuat bagan baru (tab baru), Anda juga harus menentukan nama bagan dalam permintaan Anda: Di balik layar, metode ini membuat objek Bagan baru dan menambahkannya ke algoritme Anda, lalu menambahkan objek Seri baru ke bagan tersebut. Bagan dibuat dari banyak seri. Anda juga dapat menginisialisasi bagan Anda secara manual untuk mendapatkan kontrol lebih terhadap tampilan dan nuansa mereka. Secara Manual Membuat Bagan Dalam metode inisialisasi Anda, Anda dapat menggunakan metode AddChart (Chart obj) untuk memasukkan tabel baru. Setiap objek grafik memiliki koleksi internal objek Seri. Dalam membuat objek Seri Anda harus menentukan nama seri, SeriType dan indeks yang dioperasikan pada seri. Indeks seri mengacu pada posisinya di grafik - misalnya jika semua seri adalah indeks 0, mereka akan saling berhadapan. Jika masing-masing seri memiliki indeks tersendiri, maka akan ada beberapa mini chart yang saling berdekatan satu sama lain. Gambar di bawah ini menunjukkan diagram silang EMA dengan kedua seri EMA yang diset ke indeks yang sama: Dengan menggunakan indeks yang berbeda, grafik terlihat sebagai berikut: Algoritma dapat menyimpan pesan lebih rinci ke file log untuk analisis selanjutnya menggunakan Log (pesan string). Pada akhir backtest, sebuah link akan disajikan untuk melihat hasil Anda. Dalam live trading, penampil log memungkinkan Anda melihat hasil log saat algoritme berjalan. Karena keterbatasan data vendor informasi harga tidak bisa dicatat di log. Karena keterbatasan vendor, pengguna bebas dibatasi hingga 10kb log per backtest, dengan maksimum 3Mb per hari. Pengguna dengan langganan dapat menghasilkan hingga 100 kb log per backtest. Algoritma Papan Jual Beli Cepat yang Didukung oleh Bisnis yang Didukung di QuantConnect dapat berjalan dengan lancar di akun broker Anda. Kami mengirim sinyal algoritma ke broker Anda dan melacak keadaan algoritma. Algoritma dapat segera digunakan kapan saja siang atau malam hari. Sebuah langganan diperlukan untuk perdagangan langsung namun banyak broker mensponsori live trading untuk klien mereka. FXCM adalah broker akses pasar langsung (DMA) yang menawarkan spread rendah dan biaya broker serendah 0,04 per sisi untuk mata uang populer. Perdagangan FXCM tersedia bagi pengguna di seluruh dunia dan akun dapat dibuka dengan 50 USD. Live trading gratis untuk klien FXCM. Pialang Interaktif (IB) adalah penyedia layanan eksekusi dan kliring perdagangan murah untuk perorangan, penasihat, grup perdagangan prop, pialang dan hedge fund. Teknologi utama IBs menyediakan akses langsung ke saham, opsi, futures, forex, obligasi dan dana di lebih dari 100 pasar di seluruh dunia dari satu akun Universal Universal. Anggota NYSE, FINRA, SIPC. Berlangganan diperlukan untuk live trading. Melalui integrasi kami dengan Oanda Brokerage, kami dapat menawarkan perdagangan FOREX atau CFD kepada pengguna di seluruh dunia. Account bisa dibuka dengan hanya 1 USD. Berlangganan diperlukan untuk live trading. Paper Trading US Equity, Forex Lihat bagaimana algoritma Anda akan tampil dengan fitur perdagangan kertas kami. Kami menggunakan umpan live-data nyata namun broker virtual melakukan transaksi Anda. Setiap proyek dialokasikan 100.000 mata uang virtual untuk melacak kinerja Anda. Kami mendukung penuh C dengan dokumentasi dan tutorial. Kami juga menawarkan dukungan beta untuk Python, F, Visual Basic dan Java. Broker apa yang Anda dukung Kami saat ini mendukung live trading melalui empat broker. Pialang Interaktif Tradier. FXCM dan Oanda. Kami juga mendukung perdagangan kertas (meneruskan pengujian algoritma Anda pada mata uang virtual) Perpustakaan apa yang terdaftar putih untuk digunakan di QuantConnect Perpustakaan berikut tersedia di C. Jika Anda memiliki perpustakaan yang ingin ditambahkan, beri tahu kami (supportquantconnect). Accord - Machine Learning, Math, Neuro, Statistik AFROID - Genetic, Math, Neuro AlgoLib - Indikator teknis dan statistik penuh perpustakaan Math Filtering - Kelas Pengolahan Sinyal. Math Numerics - Statistik dan Aljabar Linear. Newtonsoft Json - JSON Serializer RestSharp - REST Wrapper Dataset apa yang Anda miliki Kami memiliki semua data ekuitas AS tick sejak tahun 1998, termasuk dividen dan stock split yang diperhitungkan dalam harga. Data ini disediakan oleh QuantQuote Kami juga memiliki 13 mata uang utama yang disediakan oleh FXCM. Silakan lihat informasi lebih lanjut dalam data. Saya tidak bisa kode, apakah Anda memiliki editor visual untuk merancang algoritma Kami tidak memiliki rencana untuk membangun perancang algoritma visual Kami percaya satu-satunya cara untuk menghasilkan uang dalam tanda Ets adalah alat yang paling kuat dan fleksibel yang tersedia. Keyakinan inilah yang telah mendorong banyak keputusan desain di balik QuantConnect. Kami adalah pedagang algoritmik selama beberapa tahun dan membuat ratusan algoritma. Mereka berkisar dari yang sederhana, hingga sangat kompleks. Tema umum di antara mereka adalah kebutuhan akan fleksibilitas yang hanya bisa dicapai melalui kode mentah. Bagaimana saya memulai belajar perdagangan algoritmik atau keuangan kuantitatif Mempelajari perdagangan kuantitatif sangat sulit karena hanya ada sedikit informasi publik yang tersedia. Kami telah berusaha untuk mengatasi hal ini dengan membangun QuantConnect University (QCU). Universitas adalah rangkaian video yang mengantar Anda melalui cara memberi kode pada algoritme baru setiap minggunya. Anda dapat mengakses Universitas QuantConnect di dalam Algoritma Terminal, dengan mengklik ikon perisai di sisi kiri. Contoh Algoritma - Panduan Cepat F - Ikhtisar F adalah bahasa pemrograman fungsional. Untuk memahami konstruksi F, Anda perlu membaca beberapa baris tentang paradigma pemrograman yang diberi nama Functional Programming. Pemrograman fungsional memperlakukan program komputer sebagai fungsi matematika. Dalam pemrograman fungsional, fokusnya adalah pada konstanta dan fungsi, bukan variabel dan keadaan. Karena fungsi dan konstanta adalah hal yang tidak berubah. Dalam pemrograman fungsional, Anda akan menulis program modular, yaitu program akan terdiri dari fungsi yang akan mengambil fungsi lain sebagai masukan. Program yang ditulis dalam bahasa pemrograman fungsional cenderung ringkas. Berikut adalah informasi dasar tentang F minus Ini dikembangkan pada tahun 2005 di Microsoft Research. Ini adalah bagian dari keluarga bahasa Microsoft. Ini adalah bahasa pemrograman fungsional. Hal ini didasarkan pada bahasa pemrograman fungsional OCaml. Fitur F Ini adalah implementasi OCaml. Ini mengkompilasi CLI (Common Language Interface) kode byte atau MSIL (Microsoft Intermediate Language) yang berjalan pada CLR (Common Language Runtime). Ini memberikan inferensi tipe. Ini menyediakan konstruksi pencocokan pola yang kaya. Ini memiliki kemampuan skrip dan debugging interaktif. Hal ini memungkinkan penulisan fungsi orde tinggi. Ini menyediakan model objek yang dikembangkan dengan baik. F biasanya digunakan di bidang berikut minus Membuat model ilmiah Pemecahan masalah matematis Penelitian kecerdasan buatan Pemodelan keuangan Perancangan grafis Desain CPU Pemrograman kompilator Telekomunikasi Hal ini juga digunakan dalam aplikasi CRUD, halaman web, permainan GUI dan program tujuan umum lainnya. F - Pengaturan Lingkungan Alat yang dibutuhkan untuk pemrograman F dibahas dalam bab ini. Integrated Development Environment (IDE) untuk F Microsoft menyediakan Visual Studio 2013 untuk pemrograman F. Visual Studio 2013 Community Edition gratis tersedia di situs resmi Microsoft. Visual Studio 2013 Community dan di atas hadir dengan Visual F Tools. Alat Visual F mencakup kompiler baris perintah (fsc. exe) dan F Interactive (fsi. exe). Dengan menggunakan alat ini, Anda dapat menulis semua jenis program F dari aplikasi baris perintah sederhana ke aplikasi yang lebih kompleks. Anda juga dapat menulis file kode sumber F menggunakan editor teks dasar, seperti Notepad, dan mengkompilasi kode ke majelis menggunakan kompiler baris perintah. Anda bisa mendownloadnya dari Microsoft Visual Studio. Ini akan terinstal secara otomatis di mesin Anda. Menulis Program F Pada Tautan Silakan kunjungi situs resmi F untuk mendapatkan petunjuk terbaru tentang mendapatkan alat sebagai paket Debian atau kompilasi secara langsung dari sumber minus fsharp. orguselinux. Cobalah Option Online Kami telah menyiapkan lingkungan Pemrograman F secara online. Anda dapat dengan mudah mengkompilasi dan menjalankan semua contoh yang ada secara online bersamaan dengan melakukan kerja teori Anda. Ini memberi Anda kepercayaan diri pada apa yang Anda baca dan untuk memeriksa hasilnya dengan pilihan yang berbeda. Jangan ragu untuk memodifikasi contoh apapun dan jalankan secara online. Coba contoh berikut menggunakan opsi Try it atau gunakan url minus wwwpileonline. Untuk sebagian besar contoh yang diberikan dalam tutorial ini, Anda akan menemukan opsi Try it di bagian kode situs kami di pojok kanan atas yang akan membawa Anda ke kompiler online. Jadi gunakan saja dan nikmati pembelajaran Anda. F - Struktur Program F adalah bahasa Pemrograman Fungsional. Di F, fungsi bekerja seperti tipe data. Anda bisa mendeklarasikan dan menggunakan fungsi dengan cara yang sama seperti variabel lainnya. Secara umum, aplikasi F tidak memiliki titik masuk spesifik. Kompilator menjalankan semua pernyataan tingkat atas di file dari atas ke bawah. Namun, untuk mengikuti gaya pemrograman prosedural, banyak aplikasi menyimpan satu pernyataan tingkat atas yang memanggil loop utama. Kode berikut menunjukkan program F sederhana dikurangi Saat Anda mengkompilasi dan menjalankan program, hasilnya akan menghasilkan output berikut minus Harap diperhatikan bahwa minus file kode F mungkin dimulai dengan sejumlah pernyataan terbuka yang digunakan untuk mengimpor ruang nama. Badan file mencakup fungsi lain yang menerapkan logika bisnis aplikasi. Lingkaran utama berisi pernyataan eksekusi teratas. F - Sintaks Dasar Anda telah melihat struktur dasar program F, jadi akan mudah untuk memahami blok bangunan dasar bahasa pemrograman F lainnya. Token dalam program F An F terdiri dari berbagai token. Token bisa berupa kata kunci, identifier, konstanta, string literal, atau simbol. Kita dapat mengkategorikan token F menjadi dua jenis minus F Kata kunci Tabel berikut menunjukkan kata kunci dan uraian singkat kata kunci. Kita akan membahas penggunaan kata kunci ini di bab-bab selanjutnya. Komentar di F F memberikan dua jenis komentar dikurangi Komentar satu baris dimulai dengan simbol. Komentar multi baris dimulai dengan (dan diakhiri dengan). Sebuah Program Dasar dan Entry Point Aplikasi di F Umumnya, Anda tidak memiliki titik masuk eksplisit untuk program F. Saat Anda mengkompilasi sebuah aplikasi F, file terakhir yang diberikan ke compiler menjadi entry point dan semua pernyataan tingkat tinggi dalam file tersebut dieksekusi dari atas ke bawah. Program yang ditulis dengan baik harus memiliki satu pernyataan tingkat atas yang akan memanggil lingkaran utama program. Program F yang sangat minimalis yang akan menampilkan Hello World di layar minus Saat Anda mengkompilasi dan menjalankan program, hasilnya menghasilkan output berikut minus F - Tipe Data Tipe data di F dapat diklasifikasikan sebagai berikut minus Tipe integral Tipe titik mengambang Tipe teks Tipe lain Tipe Data Integral Tabel berikut menyediakan tipe data integral dari F. Ini pada dasarnya adalah tipe data integer. Ketika Anda mengkompilasi dan menjalankan program, hasilnya akan menghasilkan output berikut minus F - Variabel Variabel adalah nama yang diberikan ke area penyimpanan yang dapat dimanipulasi oleh program kami. Setiap variabel memiliki tipe tertentu, yang menentukan ukuran dan tata letak variabel memori kisaran nilai yang dapat disimpan dalam memori tersebut dan himpunan operasi yang dapat diterapkan pada variabel. Deklarasi Variabel dalam F Kata kunci let digunakan untuk deklarasi variabel dikurangi. Ini menyatakan sebuah variabel x dan memberikan nilai 10 padanya. Anda juga dapat menetapkan sebuah ekspresi ke variabel minus Contoh berikut menggambarkan konsep minus Ketika Anda mengkompilasi dan menjalankan program, hasilnya menghasilkan output berikut dikurangi Variabel dalam F tidak dapat diubah, yang berarti sekali sebuah variabel terikat pada sebuah nilai, itu tidak dapat Diubah Mereka sebenarnya dikompilasi sebagai properti read-only statis. Contoh berikut menunjukkan hal ini. Ketika Anda mengkompilasi dan menjalankan program, ini menunjukkan pesan kesalahan berikut dikurangi Definisi Variabel Dengan Deklarasi Jenis Definisi variabel memberi tahu kompiler di mana dan berapa banyak penyimpanan untuk variabel yang harus dibuat. Definisi variabel dapat menentukan tipe data dan berisi daftar satu atau lebih variabel dari jenis itu seperti yang ditunjukkan pada contoh berikut. Saat Anda mengkompilasi dan menjalankan program, ini akan menunjukkan pesan kesalahan berikut minus Variable Mutable Pada saat Anda perlu mengubah nilai yang tersimpan dalam variabel. Untuk menentukan bahwa mungkin ada perubahan nilai variabel yang dinyatakan dan ditetapkan, di bagian program berikutnya, F memberikan kata kunci yang bisa berubah. Anda dapat mendeklarasikan dan menetapkan variabel yang bisa berubah menggunakan kata kunci ini, yang nilainya akan Anda ubah. Kata kunci yang bisa berubah memungkinkan Anda mendeklarasikan dan menetapkan nilai dalam variabel yang bisa berubah. Anda dapat menetapkan beberapa nilai awal ke variabel yang dapat berubah menggunakan kata kunci let. However, to assign new subsequent value to it, you need to use the larr operator. The following example will clear the concept minus When you compile and execute the program, it yields the following output minus F - Operators An operator is a symbol that tells the compiler to perform specific mathematical or logical manipulations. F is rich in built-in operators and provides the following types of operators minus Arithmetic Operators Comparison Operators Boolean Operators Bitwise Operators Arithmetic Operators The following table shows all the arithmetic operators supported by F language. Assume variable A holds 10 and variable B holds 20 then minus When you compile and execute the program, it yields the following output minus F - Decision Making Decision making structures require that the programmer specify one or more conditions to be evaluated or tested by the program. It should be along with a statement or statements to be executed if the condition is determined to be true, and optionally, other statements to be executed if the condition is determined to be false. Following is the general form of a typical decision making structure found in most of the programming languages minus F programming language provides the following types of decision making statements. if then statement An ifthen statement consists of a Boolean expression followed by one or more statements. ifthen else statement An ifthen statement can be followed by an optional else statement, which executes when the Boolean expression is false. An ifthenelifelse statement allows you to have multiple else branches. nested if statements You can use one if or else if statement inside another if or else if statement(s). F-ifthen Statement An ifthen statement consists of a Boolean expression followed by one or more statements. The ifthen construct in F has the following syntax minus Flow diagram When you compile and execute the program, it yields the following output minus F-ifthenelse Statement An ifthen statement can be followed by an optional else statement, which executes when the Boolean expression is false. The syntax of an ifthenelse statement in F programming language is minus Flow Diagram When you compile and execute the program, it yields the following output minus F-ifthenelifelse Statement An ifthenelifelse construct has multiple else branches. The syntax of an ifthenelifelse statement in F programming language is minus When you compile and execute the program, it yields the following output minus F-Nested if Statements It is always legal in F programming to nest ifthen or ifthenelse statements, which means you can use one if or else if statement inside another if or else if statement(s). When you compile and execute the program, it yields the following output minus F - Loops Programming languages provide various control structures that allow for more complicated execution paths. A loop statement allows us to execute a statement or group of statements multiple times and following is the general form of a loop statement in most of the programming languages minus F provides the following types of loops to handle the looping requirements. for to and for downto expressions The for. to expression is used to iterate in a loop over a range of values of a loop variable. The for downto expression reduces the value of loop variable. for in expression This form of for loop is used to iterate over collections of items i. e. loops over collections and sequences Repeats a statement or group of statements while a given condition is true. It tests the condition before executing the loop body. You can use one or more loop inside any other for or while loop. F-for. to and for. downto Expressions A for loop is a repetition control structure that allows you to efficiently write a loop that needs to execute a specific number of times. The syntax of a forto loop in F programming language is minus The syntax of a fordownto loop in F programming language is minus The following program prints out the numbers 1 - 20 minus When you compile and execute the program, it yields the following output minus The following program counts in reverse and prints out the numbers 20 - 1 minus When you compile and execute the program, it yields the following output minus F-for. in Expressions This looping construct is used to iterate over the matches of a pattern in an enumerable collection such as a range expression, sequence, list, array, or other construct that supports enumeration. The following program illustrates the concept minus When you compile and execute the program, it yields the following output minus F-Whiledo Expressions The while. do expression is used to perform iterative execution while a specified test condition is true. The test-expression is evaluated first if it is true, the body-expression is executed and the test expression is evaluated again. The body-expression must have type unit, i. e. it should not return any value. If the test expression is false, the iteration ends. When you compile and execute the program, it yields the following output minus F-Nested Loops F programming language allows to use one loop inside another loop. The syntax for a nested for loop statement could be as follows minus The syntax for a nested while loop statement could be as follows minus When you compile and execute the program, it yields the following output minus F - Functions In F, functions work like data types. You can declare and use a function in the same way like any other variable. Since functions can be used like any other variables, you can minus Create a function, with a name and associate that name with a type. Assign it a value. Perform some calculation on that value. Pass it as a parameter to another function or sub-routine. Return a function as the result of another function. Defining a Function Functions are defined by using the let keyword. A function definition has the following syntax minus function-name is an identifier that represents the function. parameter-list gives the list of parameters separated by spaces. You can also specify an explicit type for each parameter and if not specified compiler tends to deduce it from the function body (like variables). function-body consists of an expression, or a compound expression consisting of a number of expressions. The final expression in the function body is the return value. return-type is a colon followed by a type and is optional. If the return type is not specified, then the compiler determines it from the final expression in the function body. Parameters of a Function You list the names of parameters right after the function name. You can specify the type of a parameter. The type of the parameter should follow the name of the parameter separated by a colon. If no parameter type is specified, it is inferred by the compiler. For example minus Calling a Function A function is called by specifying the function name followed by a space and then any arguments separated by spaces. For example minus The following programs illustrate the concepts. The following program calculates the volume of a cylinder when the radius and length are given as parameters. When you compile and execute the program, it yields the following output minus The following program returns the larger value of two given parameters minus When you compile and execute the program, it yields the following output minus When you compile and execute the program, it yields the following output minus Recursive Functions Recursive functions are functions that call themselves. You define a recursive using the let rec keyword combination. Syntax for defining a recursive function is minus For example minus The following program returns Fibonacci 1 to 10 minus When you compile and execute the program, it yields the following output minus The following program returns factorial 8 minus When you compile and execute the program, it yields the following output minus Arrow Notations in F F reports about data type in functions and values, using a chained arrow notation. Let us take an example of a function that takes one int input, and returns a string. In arrow notation, it is written as minus Data types are read from left to right. Let us take another hypothetical function that takes two int data inputs and returns a string. F reports the data type using chained arrow notation as minus The return type is represented by the rightmost data type in chained arrow notation. Some more examples minus float rarr float rarr float The function takes two float inputs, returns another float . int rarr string rarr float The function takes an int and a string input, returns a float . Lambda Expressions A lambda expression is an unnamed function. Let us take an example of two functions minus When you compile and execute the program, it yields the following output minus Now in the above example, if instead of defining the function mul, we could have used lambda expressions as minus When you compile and execute the program, it yields the following output minus Function Composition and Pipelining In F, one function can be composed from other functions. The following example shows the composition of a function named f, from two functions function1 and function2 minus When you compile and execute the program, it yields the following output minus F also provides a feature called pipelining of functions. Pipelining allows function calls to be chained together as successive operations. The following example shows that minus When you compile and execute the program, it yields the following output minus F - Strings In F, the string type represents immutable text as a sequence of Unicode characters. String Literals String literals are delimited by the quotation mark () character. Some special characters are there for special uses like newline, tab, etc. They are encoded using backslash () character. The backslash character and the related character make the escape sequence. The following table shows the escape sequence supported by F. Ways of lgnoring the Escape Sequence The following two ways makes the compiler ignore the escape sequence minus Using the symbol. Enclosing the string in triple quotes. When a string literal is preceded by the symbol, it is called a verbatim string. In that way, all escape sequences in the string are ignored, except that two quotation mark characters are interpreted as one quotation mark character. When a string is enclosed by triple quotes, then also all escape sequences are ignored, including double quotation mark characters. The following example demonstrates this technique showing how to work with XML or other structures that include embedded quotation marks minus When you compile and execute the program, it yields the following output minus Basic Operators on Strings The following table shows the basic operations on strings minus collect. (char rarr string) rarr string rarr string Creates a new string whose characters are the results of applying a specified function to each of the characters of the input string and concatenating the resulting strings. concat. string rarr seqltstringgt rarr string Returns a new string made by concatenating the given strings with a separator. exists. (char rarr bool) rarr string rarr bool Tests if any character of the string satisfies the given predicate. forall. (char rarr bool) rarr string rarr bool Tests if all characters in the string satisfy the given predicate. init. int rarr (int rarr string) rarr string Creates a new string whose characters are the results of applying a specified function to each index and concatenating the resulting strings. iter. (char rarr unit) rarr string rarr unit Applies a specified function to each character in the string. iteri. (int rarr char rarr unit) rarr string rarr unit Applies a specified function to the index of each character in the string and the character itself. length. string rarr int Returns the length of the string. map. (char rarr char) rarr string rarr string Creates a new string whose characters are the results of applying a specified function to each of the characters of the input string. mapi. (int rarr char rarr char) rarr string rarr string Creates a new string whose characters are the results of applying a specified function to each character and index of the input string. replicate. int rarr string rarr string Returns a string by concatenating a specified number of instances of a string. The following examples demonstrate the uses of some of the above functionalities minus The String. collect function builds a new string whose characters are the results of applying a specified function to each of the characters of the input string and concatenating the resulting strings. When you compile and execute the program, it yields the following output minus The String. concat function concatenates a given sequence of strings with a separator and returns a new string. When you compile and execute the program, it yields the following output minus The String. replicate method returns a string by concatenating a specified number of instances of a string. When you compile and execute the program, it yields the following output minus F - Options The option type in F is used in calculations when there may or may not exist a value for a variable or function. Option types are used for representing optional values in calculations. They can have two possible values minus Some(x) or None . For example, a function performing a division will return a value in normal situation, but will throw exceptions in case of a zero denominator. Using options here will help to indicate whether the function has succeeded or failed. An option has an underlying type and can hold a value of that type, or it might not have a value. Using Options Let us take the example of division function. The following program explains this minus Let us write a function div, and send two arguments to it 20 and 5 minus When you compile and execute the program, it yields the following output minus If the second argument is zero, then the program throws an exception minus When you compile and execute the program, it yields the following output minus In such cases, we can use option types to return Some (value) when the operation is successful or None if the operation fails. The following example demonstrates the use of options minus When you compile and execute the program, it yields the following output minus Option Properties and Methods The option type supports the following properties and methods minus F - Tuples F - Records F - Lists F - Sequences F - Discriminated Unions F - Mutable Data F - Arrays F - Mutable Lists F - Mutable Dictionary Initializes a new instance of the Dictionary(TKey, TValue) class that is empty, has the default initial capacity, and uses the default equality comparer for the key type. Dictionary(TKey, TValue)(IDictionary(TKey, TValue)) Initializes a new instance of the Dictionary(TKey, TValue) class that contains elements copied from the specified IDictionary(TKey, TValue) and uses the default equality comparer for the key type. Initializes a new instance of the Dictionary(TKey, TValue) class that is empty, has the default initial capacity, and uses the specified IEqualityComparer(T). Initializes a new instance of the Dictionary(TKey, TValue) class that is empty, has the specified initial capacity, and uses the default equality comparer for the key type. Dictionary(TKey, TValue)(IDictionary(TKey, TValue), IEqualityComparer(TKey)) Initializes a new instance of the Dictionary(TKey, TValue) class that contains elements copied from the specified IDictionary(TKey, TValue) and uses the specified IEqualityComparer(T). Dictionary(TKey, TValue)(Int32, IEqualityComparer(TKey)) Initializes a new instance of the Dictionary(TKey, TValue) class that is empty, has the specified initial capacity, and uses the specified IEqualityComparer(T). Dictionary(TKey, TValue)(SerializationInfo, StreamingContext) Initializes a new instance of the ictionary(TKey, TValue) class with serialized data. F - Basic IO F - Generics F - Delegates F - Enumerations F - Pattern Matching F - Exception Handling F - Classes F - Structures F - Operator Overloading F - Inheritance F - Interfaces F - Events F - Modules F - Namespaces

Comments