Tuesday 15 August 2017

Python pandas eksponensial moving average


Alat komputasional Secara analog, DataFrame memiliki metode untuk menghitung kovarian antara kombinasinya di DataFrame, juga mengecualikan nilai NAnull. Dengan asumsi data yang hilang hilang secara acak, ini menghasilkan perkiraan matriks kovariansi yang tidak bias. Namun, untuk banyak aplikasi perkiraan ini mungkin tidak dapat diterima karena matriks kovariansi yang diperkirakan tidak dijamin bersifat semi-pasti positif. Hal ini dapat menyebabkan korelasi yang diperkirakan memiliki nilai absolut yang lebih besar dari satu, dan atau matriks kovariansi yang tidak dapat dibalik. Lihat Estimasi matriks kovarian untuk lebih jelasnya. DataFrame. cov juga mendukung kata kunci minperiod opsional yang menentukan jumlah pengamatan minimum yang diperlukan untuk setiap pasangan kolom agar memiliki hasil yang valid. Bobot yang digunakan di jendela ditentukan oleh kata kunci wintype. Daftar tipe yang dikenali adalah: boxcar triang blackman hamming bartlett parzen bohman blackmanharris nuttall barthann kaiser (kebutuhan beta) gaussian (kebutuhan std) generalgausia (butuh daya, lebar) slepian (kebutuhan lebar). Perhatikan bahwa jendela boxcar setara dengan mean (). Untuk beberapa fungsi windowing, parameter tambahan harus ditentukan: Untuk. sum () dengan wintype. Tidak ada normalisasi yang dilakukan pada bobot jendela. Melewati bobot kebiasaan 1, 1, 1 akan menghasilkan hasil yang berbeda dari pada bobot yang di atas 2, 2, 2. misalnya. Ketika melewati sebuah wintype dan bukan secara eksplisit menentukan bobotnya, bobotnya sudah dinormalisasi sehingga bobot terbesar adalah 1. Sebaliknya, sifat perhitungan. mean () adalah sedemikian rupa sehingga bobotnya dinormalisasi satu sama lain. Bobot 1, 1, 1 dan 2, 2, 2 menghasilkan hasil yang sama. Time-aware Rolling New di versi 0.19.0. Baru di versi 0.19.0 adalah kemampuan untuk melewatkan offset (atau konversi) ke metode. rolling () dan memilikinya menghasilkan jendela berukuran variabel berdasarkan jendela waktu yang berlalu. Untuk setiap titik waktu, ini mencakup semua nilai sebelumnya yang terjadi dalam delta waktu yang ditunjukkan. Ini bisa sangat berguna untuk indeks frekuensi waktu non-reguler. Ini adalah indeks frekuensi reguler. Menggunakan parameter jendela integer bekerja untuk memutar sepanjang frekuensi jendela. Menentukan offset memungkinkan spesifikasi frekuensi rolling yang lebih intuitif. Menggunakan indeks non-reguler, namun masih monoton, bergulir dengan jendela integer tidak memberikan perhitungan khusus. Menggunakan spesifikasi waktu menghasilkan jendela variabel untuk data yang jarang ini. Selanjutnya, sekarang kami mengizinkan parameter opsional untuk menentukan kolom (bukan default indeks) di DataFrame. Time-aware Rolling vs. Resampling Menggunakan. rolling () dengan indeks berbasis waktu sangat mirip dengan resampling. Mereka berdua mengoperasikan dan melakukan operasi reduktif pada objek panda yang diindeks dengan waktu. Bila menggunakan. rolling () dengan offset. Offset adalah waktu-delta. Ambil jendela belakang mundur, dan agregat semua nilai di jendela itu (termasuk titik akhir, tapi bukan titik awal). Ini adalah nilai baru pada saat itu hasilnya. Ini adalah jendela berukuran variabel dalam ruang waktu untuk setiap titik masukan. Anda akan mendapatkan hasil ukuran yang sama seperti input. Bila menggunakan. resample () dengan offset. Buatlah indeks baru yang merupakan frekuensi offset. Untuk setiap bin frekuensi, titik agregat dari input dalam jendela mencari mundur yang pada waktu itu berada dalam bin itu. Hasil agregasi ini adalah output untuk titik frekuensi tersebut. Jendela adalah ukuran ukuran tetap di ruang frekuensi. Hasil Anda akan memiliki bentuk frekuensi reguler antara min dan max dari objek masukan asli. Untuk meringkas. Rolling () adalah operasi jendela berbasis waktu, sementara. resample () adalah operasi jendela berbasis frekuensi. Memusatkan Windows Secara default label disetel ke tepi kanan jendela, namun kata kunci tengah tersedia sehingga labelnya dapat disetel di tengahnya. Fungsi Binary Window cov () dan corr () dapat menghitung statistik window bergerak sekitar dua Series atau kombinasi DataFrameSeries atau DataFrameDataFrame. Inilah perilaku dalam setiap kasus: dua Seri. Hitung statistik untuk pemasangan. DataFrameSeries. Hitung statistik untuk setiap kolom DataFrame dengan Seri yang dilewati, sehingga mengembalikan DataFrame. DataFrameDataFrame. Secara default hitung statistik untuk mencocokkan nama kolom, mengembalikan DataFrame. Jika kata kunci argumen pairwiseTrue dilewatkan maka hitung statistik untuk setiap pasangan kolom, mengembalikan Panel yang itemnya adalah tanggal yang dimaksud (lihat bagian selanjutnya). Computing rolling pairwise covariances and correlations Dalam analisis data keuangan dan bidang lainnya, hal itu umum untuk menghitung matriks kovarians dan korelasi untuk kumpulan deret waktu. Seringkali seseorang juga tertarik pada kovarians bergerak-jendela dan matriks korelasi. Hal ini dapat dilakukan dengan melewatkan argumen kata kunci berpasangan, yang jika input DataFrame akan menghasilkan Panel yang itemnya adalah tanggal yang dimaksud. Dalam kasus argumen DataFrame tunggal argumen berpasangan bahkan dapat diabaikan: Nilai yang hilang diabaikan dan setiap entri dihitung dengan menggunakan pengamatan lengkap berpasangan. Silakan lihat bagian kovarian untuk peringatan yang terkait dengan metode penghitungan kovarians dan matriks korelasi ini. Selain tidak memiliki parameter jendela, fungsi ini memiliki antarmuka yang sama dengan rekan mereka. rolling. Seperti di atas, parameter yang mereka terima adalah: minperiods. Ambang data non-null diperlukan. Default ke minimum yang dibutuhkan untuk menghitung statistik. Tidak ada NaN yang akan menjadi output setelah titik data non-null minperiod terlihat. pusat. Boolean, apakah untuk mengatur label di bagian tengah (default adalah False) Output dari metode. rolling dan. expanding tidak mengembalikan NaN jika setidaknya ada nilai minperiods non-null di jendela aktif. Ini berbeda dari cumsum. Cumprod Cummax Dan cummin. Yang mengembalikan NaN ke output dimanapun NaN ditemui di input. Statistik jendela yang meluas akan lebih stabil (dan kurang responsif) daripada penggabungan window rolling karena meningkatnya ukuran jendela akan mengurangi dampak relatif dari titik data individual. Sebagai contoh, berikut ini adalah mean () output untuk dataset seri waktu sebelumnya: Windows yang tertimbang secara eksponensial Satu set fungsi yang terkait adalah versi tertimbang secara eksponensial dari beberapa statistik di atas. Antarmuka yang serupa dengan. rolling dan. expanding diakses melalui metode. ewm untuk menerima objek EWM. Sejumlah metode EW (eksponensial weighted) yang meluas juga disediakan: Memunggulkan Crossover Rata-rata Bergerak dengan Python dengan panda Pada artikel sebelumnya mengenai Lingkungan Penyajian Ulang Penelitian Dengan Python Dengan Panda, kami menciptakan lingkungan backtesting berdasarkan penelitian berbasis objek dan mengujinya pada Strategi peramalan acak. Pada artikel ini kami akan menggunakan mesin yang kami perkenalkan untuk melakukan penelitian mengenai strategi aktual, yaitu Moving Average Crossover on AAPL. Strategi Crossover Average Crossover Teknik Moving Average Crossover adalah strategi momentum sederhana yang sangat terkenal. Hal ini sering dianggap sebagai contoh Hello World untuk perdagangan kuantitatif. Strategi yang digariskan di sini adalah long-only. Dua filter rata-rata bergerak sederhana yang terpisah dibuat, dengan berbagai periode waktu tunggu, dari rangkaian waktu tertentu. Sinyal untuk membeli aset terjadi ketika moving average moving average yang lebih pendek melebihi rata-rata moving average lookback yang lama. Jika rata-rata yang lebih lama kemudian melebihi rata-rata yang lebih pendek, aset tersebut dijual kembali. Strategi ini berjalan dengan baik saat deret waktu memasuki periode tren kuat dan perlahan membalikkan tren. Untuk contoh ini, saya telah memilih Apple, Inc. (AAPL) sebagai rangkaian waktu, dengan tampilan singkat 100 hari dan tampilan balik 400 hari yang panjang. Ini adalah contoh yang disediakan oleh zipline algorithmic trading library. Jadi jika kita ingin menerapkan backtester kita sendiri, kita perlu memastikan bahwa itu sesuai dengan hasil zipline, sebagai sarana dasar validasi. Implementasi Pastikan mengikuti tutorial sebelumnya disini. Yang menjelaskan bagaimana hirarki objek awal untuk backtester dibangun, jika kode di bawah ini tidak akan berhasil. Untuk implementasi khusus ini saya telah menggunakan library berikut: Implementasi macross. py membutuhkan backtest. py dari tutorial sebelumnya. Langkah pertama adalah mengimpor modul dan objek yang diperlukan: Seperti pada tutorial sebelumnya, kita akan mengelompokkan kelas dasar Strategi abstrak untuk menghasilkan MovingAverageCrossStrategy. Yang berisi semua rincian tentang bagaimana menghasilkan sinyal saat rata-rata bergerak AAPL saling silang. Objek membutuhkan shortwindow dan longwindow untuk beroperasi. Nilai telah ditetapkan ke default masing-masing 100 hari dan 400 hari, yang merupakan parameter yang sama yang digunakan pada contoh utama zipline. Rata-rata bergerak dibuat dengan menggunakan fungsi rollingmanan pandas pada harga tutup bar tutup dari saham AAPL. Setelah rata-rata pergerakan individu telah dibangun, Seri sinyal dihasilkan dengan menetapkan kolom sebesar 1,0 bila rata-rata bergerak pendek lebih besar daripada rata-rata bergerak yang panjang, atau 0,0 sebaliknya. Dari posisi inilah pesanan bisa dihasilkan untuk mewakili sinyal trading. MarketOnClosePortfolio adalah subkelas dari Portofolio. Yang ditemukan di backtest. py. Hal ini hampir sama dengan implementasi yang dijelaskan di tutorial sebelumnya, dengan pengecualian bahwa perdagangan sekarang dilakukan secara Close-to-Close, bukan Open-to-Open. Untuk rincian tentang bagaimana objek Portofolio didefinisikan, lihat tutorial sebelumnya. Ive meninggalkan kode untuk kelengkapan dan untuk menjaga agar tutorial ini mandiri: Setelah kelas MovingAverageCrossStrategy dan MarketOnClosePortfolio telah ditetapkan, fungsi utama akan dipanggil untuk mengikat semua fungsi bersama-sama. Selain itu kinerja strategi akan diperiksa melalui sebidang kurva ekuitas. Objek pandas DataReader mendownload harga OHLCV dari saham AAPL untuk periode 1 Januari 1990 sampai 1 Januari 2002, dimana sinyal DataFrame dibuat untuk menghasilkan sinyal lama. Selanjutnya portofolio dihasilkan dengan basis modal awal 100.000 USD dan imbal hasil dihitung pada kurva ekuitas. Langkah terakhir adalah menggunakan matplotlib untuk merencanakan plot dua gambar dari harga AAPL, yang dilapisi dengan rata-rata bergerak dan sinyal buysell, serta kurva ekuitas dengan sinyal buysell yang sama. Kode pemodelan diambil (dan dimodifikasi) dari contoh penerapan zipline. Output grafis dari kode tersebut adalah sebagai berikut. Saya menggunakan perintah paste IPython untuk memasukkan ini langsung ke konsol IPython saat berada di Ubuntu, sehingga output grafis tetap terlihat. The upticks merah muda mewakili pembelian saham, sedangkan downticks hitam mewakili menjual kembali: Seperti dapat dilihat strategi kehilangan uang selama periode, dengan lima perdagangan round-trip. Hal ini tidak mengherankan mengingat perilaku AAPL selama periode tersebut, yang pada tren sedikit menurun, diikuti oleh kenaikan yang signifikan yang dimulai pada tahun 1998. Periode lookback dari sinyal rata-rata bergerak agak besar dan ini berdampak pada keuntungan perdagangan akhir , Yang sebaliknya mungkin telah membuat strategi menguntungkan. Pada artikel selanjutnya kita akan menciptakan cara yang lebih canggih untuk menganalisis kinerja, serta menggambarkan bagaimana mengoptimalkan periode lookback dari sinyal rata-rata bergerak individual. Memulai dengan Quantitative TradingSmoothing dengan Rata-rata Moved Weighted Moving Moving moving average membutuhkan waktu yang bising dan mengganti setiap nilai dengan nilai rata-rata lingkungan sekitar nilai yang diberikan. Lingkungan ini mungkin terdiri dari data historis murni, atau mungkin berpusat pada nilai yang diberikan. Selanjutnya, nilai di lingkungan dapat diberi bobot dengan menggunakan set bobot yang berbeda. Berikut adalah contoh rata-rata pergerakan tiga titik bobot rata-rata, menggunakan data historis, Disini mewakili sinyal merapikan, dan merupakan deringan waktu yang bising. Berbeda dengan moving average sederhana, rata-rata bergerak tertimbang secara eksponensial (FIFO) menyesuaikan nilai sesuai dengan jumlah tertimbang eksponensial dari semua nilai sebelumnya. Ini adalah ide dasarnya, ini bagus karena Anda tidak perlu khawatir memiliki jendela tiga titik, versus jendela lima titik, atau khawatir tentang kelayakan skema pembobotan Anda. Dengan EWMA, pertengkaran sebelumnya yang dijawab, 8221 dan 8220 terlupakan, 8221 oleh istilah dalam persamaan terakhir, sedangkan dengan jendela atau lingkungan dengan batas-batas diskrit, perturbasi dilupakan begitu ia melewati jendela. Rata-rata EWMA untuk Mengakomodasi Tren Setelah membaca tentang EWMA dalam buku analisis data, saya telah dengan senang hati menggunakan alat ini untuk setiap aplikasi perataan tunggal yang saya temukan. Tidak sampai kemudian saya mengetahui bahwa fungsi EWMA benar-benar sesuai untuk data stasioner, yaitu data tanpa tren atau musiman. Secara khusus, fungsi EWMA menolak tren dari mean saat ini sehingga sekarang sudah 8220seen8221. Jadi, jika Anda memiliki fungsi topi berisik yang berlangsung dari 0, ke 1, dan kemudian kembali ke 0, maka fungsi EWMA akan mengembalikan nilai rendah di sisi atas bukit, dan nilai tinggi di sisi bawah bukit. Salah satu cara untuk menghindari hal ini adalah dengan memperlancar sinyal di kedua arah, berbaris maju, dan kemudian berbaris mundur, dan kemudian rata-rata keduanya. Di sini, kita akan menggunakan fungsi EWMA yang disediakan oleh modul panda. Holt-Winters Order Kedua EWMA Dan inilah beberapa kode Python yang menerapkan metode urutan kedua Holt-Winters pada fungsi topi berisik lainnya, seperti sebelumnya. Posting navigasi Recent Posts

No comments:

Post a Comment