Tuesday 18 July 2017

Moving Average Pseudo Code


Moving Average Eksponensial - EMA BREAKING DOWN Exponential Moving Average - EMA EMA 12 dan 26 hari adalah rata-rata jangka pendek yang paling populer, dan indikator tersebut digunakan untuk menciptakan indikator seperti moving average convergence divergence (MACD) dan harga osilator persentase (PPO). Secara umum, EMA 50 dan 200 hari digunakan sebagai sinyal tren jangka panjang. Pedagang yang menggunakan analisis teknis menemukan rata-rata bergerak sangat berguna dan berwawasan bila diterapkan dengan benar namun menimbulkan malapetaka bila digunakan dengan tidak semestinya atau disalahartikan. Semua rata-rata bergerak yang biasa digunakan dalam analisis teknis adalah, pada dasarnya, indikator lagging. Akibatnya, kesimpulan yang diambil dari penerapan rata-rata bergerak ke bagan pasar tertentu adalah untuk mengkonfirmasi pergerakan pasar atau untuk menunjukkan kekuatannya. Sangat sering, pada saat garis indikator rata-rata bergerak membuat perubahan untuk mencerminkan pergerakan yang signifikan di pasar, titik optimal masuk pasar telah berlalu. EMA berfungsi untuk mengurangi dilema ini sampai batas tertentu. Karena perhitungan EMA menempatkan lebih banyak bobot pada data terbaru, ia memeluk aksi harga sedikit lebih ketat dan karena itu bereaksi lebih cepat. Hal ini diinginkan bila EMA digunakan untuk mendapatkan sinyal masuk perdagangan. Menafsirkan EMA Seperti semua indikator rata-rata bergerak, tren ini jauh lebih sesuai untuk pasar tren. Bila pasar dalam uptrend yang kuat dan berkelanjutan. Garis indikator EMA juga akan menunjukkan tren naik dan sebaliknya untuk tren turun. Pedagang yang waspada tidak hanya memperhatikan arah garis EMA tapi juga hubungan tingkat perubahan dari satu bar ke bar berikutnya. Sebagai contoh, karena aksi harga dari uptrend yang kuat mulai meratakan dan membalikkan, tingkat perubahan EMAs dari satu bar ke bar berikutnya akan mulai berkurang sampai saat garis indikator rata dan tingkat perubahannya nol. Karena efek lagging, pada titik ini, atau bahkan beberapa bar sebelumnya, tindakan harga seharusnya sudah berbalik arah. Oleh karena itu, mengikuti bahwa penurunan yang konsisten secara konsisten dalam perubahan EMA dapat digunakan sebagai indikator yang dapat mengatasi dilema yang disebabkan oleh efek lagging moving averages. Kegunaan Umum EMA EMA biasanya digunakan bersamaan dengan indikator lain untuk mengkonfirmasi pergerakan pasar yang signifikan dan untuk mengukur validitasnya. Bagi pedagang yang berdagang intraday dan pasar yang bergerak cepat, EMA lebih bisa diterapkan. Cukup sering trader menggunakan EMA untuk mengetahui bias trading. Misalnya, jika EMA pada grafik harian menunjukkan tren kenaikan yang kuat, strategi pedagang intraday mungkin hanya diperdagangkan dari sisi panjang pada grafik intraday. Saya mencoba menghitung rata-rata pergerakan sebuah sinyal. Nilai sinyal (ganda) diperbarui pada waktu acak. Saya mencari cara yang efisien untuk menghitung rata-rata tertimbang waktunya di atas jendela waktu, secara real time. Saya bisa melakukannya sendiri, tapi ini lebih menantang dari yang saya duga. Sebagian besar sumber yang saya temukan di internet menghitung rata-rata sinyal periodik bergerak, namun pembaruan ranjau pada waktu yang acak. Apakah ada yang tahu sumber daya yang baik untuk itu Caranya adalah sebagai berikut: Anda mendapatkan update secara acak melalui update void (int time, float value). Namun Anda juga perlu juga melacak saat update jatuh dari jendela waktu, jadi Anda mengatur alarm yang memanggil pada waktu N yang menghapus pembaruan sebelumnya dari yang pernah dipertimbangkan lagi dalam perhitungan. Jika ini terjadi secara real-time Anda dapat meminta sistem operasi untuk melakukan panggilan ke metode void dropoffoldestupdate (int time) untuk dipanggil pada saat N Jika ini adalah simulasi, Anda tidak dapat memperoleh bantuan dari sistem operasi dan Anda perlu Lakukan secara manual Dalam simulasi Anda akan memanggil metode dengan waktu yang diberikan sebagai argumen (yang tidak berkorelasi dengan real time). Namun, asumsi yang masuk akal adalah bahwa panggilan dijamin sedemikian rupa sehingga argumen waktu meningkat. Dalam hal ini Anda perlu mempertahankan daftar nilai waktu alarm yang diurutkan, dan untuk setiap pembaruan dan baca panggilan Anda memeriksa apakah argumen waktu lebih besar daripada daftar alarm. Meskipun lebih besar Anda melakukan pemrosesan terkait alarm (nonaktifkan pembaruan yang paling lama), lepaskan kepala dan periksa lagi sampai semua alarm sebelum waktu tertentu diproses. Lalu lakukan update call. Sejauh ini saya menduga sudah jelas apa yang akan Anda lakukan untuk perhitungan sebenarnya, tapi saya akan menjelaskannya untuk berjaga-jaga. Saya asumsikan Anda memiliki metode float read (int time) yang Anda gunakan untuk membaca nilainya. Tujuannya agar panggilan ini seefisien mungkin. Jadi Anda tidak menghitung rata-rata bergerak setiap kali metode baca dipanggil. Sebagai gantinya Anda melakukan precompute nilai pada update terakhir atau alarm terakhir, dan tweak nilai ini oleh beberapa operasi floating point untuk memperhitungkan berlalunya waktu sejak update terakhir. (I. sejumlah operasi konstan kecuali mungkin memproses daftar alarm yang tertumpuk). Semoga ini jelas - ini harus menjadi algoritma yang cukup sederhana dan cukup efisien. Optimalisasi lebih lanjut. Salah satu masalah yang tersisa adalah jika sejumlah besar pembaruan terjadi di jendela waktu, maka ada waktu yang lama dimana tidak ada pembacaan atau pembaruan, dan kemudian pembacaan atau pembaruan muncul. Dalam kasus ini, algoritma di atas akan tidak efisien secara bertahap memperbarui nilai untuk setiap pembaruan yang jatuh. Ini tidak perlu karena kami hanya peduli dengan pembaruan terakhir di luar jendela waktu sehingga jika ada cara untuk secara efisien menurunkan semua pembaruan lama, ini akan membantu. Untuk melakukan ini, kita dapat memodifikasi algoritma untuk melakukan pencarian biner update untuk menemukan update terbaru sebelum jendela waktu. Jika ada sedikit pembaruan yang perlu dijatuhkan maka seseorang dapat secara bertahap memperbarui nilainya untuk setiap update yang dibatalkan. Tapi jika ada banyak update yang perlu dijatuhkan maka seseorang bisa menghitung ulang nilainya dari nol setelah mengundurkan diri dari update lama. Lampiran pada Perhitungan Incremental: Saya harus menjelaskan apa yang saya maksud dengan perhitungan tambahan di atas dalam kalimat yang men-tweak nilai ini oleh beberapa operasi floating point untuk memperhitungkan berlalunya waktu sejak update terakhir. Perhitungan awal non-inkremental: kemudian iterate over relevantupdate dalam rangka meningkatkan waktu: movingaverage (sum lastupdate timesincelastupdate) windowlength. Sekarang jika tepat satu update jatuh dari jendela tapi tidak ada update baru tiba, sesuaikan jumlah sebagai: (perhatikan itu adalah priorupdate yang memiliki cap waktu dimodifikasi untuk memulai jendela terakhir dimulai). Dan jika tepat satu update masuk ke jendela tapi tidak ada update baru yang jatuh, sesuaikan jumlah sebagai: Seperti yang seharusnya jelas, ini adalah sketsa kasar tapi mudah-mudahan ini menunjukkan bagaimana Anda dapat mempertahankan rata-rata sedemikian rupa sehingga operasi O (1) per update Atas dasar amortisasi. Tapi perhatikan optimasi lebih lanjut di paragraf sebelumnya. Perhatikan juga masalah stabilitas yang disinggung dalam jawaban yang lebih tua, yang berarti bahwa kesalahan floating point dapat menumpuk lebih dari sejumlah besar operasi inkremental semacam itu sehingga ada perbedaan dari hasil perhitungan penuh yang signifikan terhadap aplikasi. Jika perkiraannya baik-baik saja dan ada waktu minimum di antara sampel, Anda bisa mencoba super sampling. Miliki sebuah array yang mewakili interval waktu yang jaraknya merata yang lebih pendek dari minimum, dan pada setiap periode menyimpan sampel terakhir yang diterima. Semakin pendek jeda, semakin mendekati rata-rata nilai sebenarnya. Periode seharusnya tidak lebih dari setengah minimum atau ada kemungkinan kehilangan sampel. Jawab 15 Des 11 at 18:12 menjawab 15 Desember 11 di 22:38 Terima kasih atas jawabannya. Salah satu perbaikan yang akan dibutuhkan untuk benar-benar mengutip nilai rata-rata dari total rata-rata jadi kami tidak meluangkan waktu. Juga, ini mungkin titik kecil, tapi tidakkah lebih efisien menggunakan deque atau daftar untuk menyimpan nilainya, karena kita berasumsi bahwa pembaruan akan sesuai dengan urutan yang benar. Penyisipan akan lebih cepat dari pada peta. Ndash Arthur 16 Des 11 at 8:55 Ya, Anda bisa menyimpan nilai penjumlahan. Kurangi nilai sampel yang Anda hapus, tambahkan nilai sampel yang Anda sisipkan. Juga, ya, contoh dequeltpairltample, Dategtgt mungkin lebih efisien. Saya memilih peta untuk mudah dibaca, dan kemudahan memohon peta :: upperbound. Seperti biasa, tulis kode yang benar dulu, lalu profil dan ukur perubahan tambahan. Ndash Rob 16 Desember 11 pukul 15:00 Catatan: Rupanya ini bukan cara untuk mendekati ini. Membiarkannya di sini untuk referensi tentang apa yang salah dengan pendekatan ini. Periksa komentarnya. UPDATED - berdasarkan komentar Olis. Tidak yakin tentang ketidakstabilan yang dia bicarakan sekalipun. Gunakan peta waktu kedatangan yang ditentukan terhadap nilai. Setelah kedatangan sebuah nilai menambahkan waktu kedatangan ke peta yang diurutkan beserta nilainya dan memperbarui moving average. Peringatan ini pseudo-code: disana Tidak sepenuhnya fleshed keluar tapi Anda mendapatkan ide. Hal yang perlu diperhatikan. Seperti yang saya katakan di atas adalah kode pseudo. Anda harus memilih peta yang sesuai. Jangan menghapus pasangan saat Anda melakukan iterasi karena Anda akan membuat iterator tidak valid dan harus dimulai lagi. Lihat komentar Olis di bawah ini juga. Menjawab 15 Des 11 jam 12:22 Pekerjaan ini tidak berhasil: tidak memperhitungkan berapa proporsi panjang jendela setiap nilai. Selain itu, pendekatan penambahan dan penguraian ini hanya stabil untuk tipe integer, bukan pelampung. Ndash Oliver Charlesworth 15 Des 12 12 OliCharlesworth - maaf saya melewatkan beberapa poin penting dalam deskripsi (double and time-weighted). Saya akan update Terima kasih. Ndash Dennis Dec 15 11 at 12:33 Waktu-bobot adalah masalah lain. Tapi bukan itu yang saya bicarakan. Saya mengacu pada fakta bahwa ketika nilai baru pertama kali memasuki jendela waktu, kontribusinya terhadap rata-rata sangat minim. Kontribusinya terus meningkat sampai nilai baru masuk. 11 11 Pada dasarnya saya memiliki sejumlah nilai seperti ini: Array di atas disederhanakan, saya mengumpulkan 1 nilai per milidetik dalam kode sebenarnya dan saya perlu mengolah output pada algoritma yang saya tulis untuk menemukan Puncak terdekat sebelum titik waktu. Logika saya gagal karena dalam contoh saya di atas, 0,36 adalah puncak sebenarnya, tapi algoritme saya akan terlihat mundur dan melihat angka terakhir 0,25 sebagai puncaknya, karena ada penurunan menjadi 0,24 sebelum itu. Tujuannya adalah untuk mengambil nilai-nilai ini dan menerapkan algoritma kepada mereka yang akan menghaluskannya sedikit sehingga saya memiliki nilai linier yang lebih banyak. (Yaitu: Id seperti hasil saya melengkung, tidak bergerigi) Saya telah diberitahu untuk menerapkan filter rata-rata bergerak eksponensial ke nilai-nilai saya. Bagaimana saya bisa melakukan ini Sangat sulit bagi saya untuk membaca persamaan matematis, saya jauh lebih baik dengan kode. Bagaimana cara memproses nilai dalam array saya, menerapkan perhitungan rata-rata bergerak eksponensial bahkan sampai mereka bertanya pada 8 Februari pukul 20:27 untuk menghitung rata-rata pergerakan eksponensial. Anda perlu menyimpan beberapa keadaan di sekitar dan Anda memerlukan parameter tuning. Ini memerlukan kelas kecil (dengan asumsi Anda menggunakan Java 5 atau yang lebih baru): Instantiate dengan parameter peluruhan yang Anda inginkan (mungkin mengambil tuning harus antara 0 dan 1) dan kemudian gunakan rata-rata () untuk memfilter. Saat membaca sebuah halaman tentang beberapa kekambuhan mathmatical, semua yang Anda benar-benar perlu ketahui saat mengubahnya menjadi kode adalah matematikawan suka menulis indeks menjadi array dan urutan dengan subskrip. (Ada beberapa notasi lain juga, yang tidak membantu). Namun, EMA cukup sederhana karena Anda hanya perlu mengingat satu nilai lama tanpa susunan negara yang rumit. Jawab Feb 8 12 jam 20:42 TKKocheran: Cukup banyak. Tidak masalah jika hal-hal sederhana (Jika dimulai dengan urutan baru, dapatkan rata-rata baru.) Perhatikan bahwa beberapa istilah pertama dalam urutan rata-rata akan melompat sedikit karena efek batas, namun Anda mendapatkan yang memiliki rata-rata bergerak lainnya. terlalu. Namun, keuntungan yang bagus adalah Anda dapat membungkus logika rata-rata bergerak ke rata-rata dan bereksperimen tanpa mengganggu keseluruhan program Anda. Ndash Donal Fellows Feb 9 12 at 0:06 Saya mengalami kesulitan untuk memahami pertanyaan Anda, tapi saya akan mencoba menjawabnya juga. 1) Jika algoritma Anda menemukan 0,25 bukan 0,36, maka itu salah. Ini salah karena mengasumsikan kenaikan atau penurunan monotonik (yang selalu naik atau selalu turun). Kecuali Anda rata-rata SEMUA data Anda, poin data Anda --- seperti yang Anda sampaikan - tidak bersifat nonlinier. Jika Anda benar-benar ingin menemukan nilai maksimum antara dua titik dalam waktu, maka iris array Anda dari tmin ke tmax dan temukan maks dari subarray itu. 2) Sekarang, konsep moving averages sangat sederhana: bayangkan bahwa saya memiliki daftar berikut: 1.4, 1.5, 1.4, 1.5, 1.5. Saya bisa menghaluskannya dengan mengambil rata-rata dua angka: 1.45, 1.45, 1.45, 1.5. Perhatikan bahwa angka pertama adalah rata-rata 1,5 dan 1,4 (angka kedua dan pertama) yang kedua (daftar baru) adalah rata-rata 1,4 dan 1,5 (daftar ketiga dan kedua) yang ketiga (daftar baru) rata-rata 1,5 dan 1,4 (Keempat dan ketiga), dan seterusnya. Saya bisa membuatnya periode tiga atau empat, atau n. Perhatikan bagaimana datanya jauh lebih mulus. Cara yang baik untuk melihat rata-rata bergerak di tempat kerja adalah pergi ke Google Finance, pilih saham (coba Tesla Motors cukup mudah menguap (TSLA)) dan klik pada teknikal di bagian bawah bagan. Pilih Moving Average dengan periode tertentu, dan moving average eksponensial untuk membandingkan perbedaannya. Rata-rata pergerakan eksponensial hanyalah penjabaran lain dari ini, namun bobot data yang lebih tua kurang dari data baru ini adalah cara untuk meratakan perataan ke arah belakang. Silahkan baca entri Wikipedia. Jadi, ini lebih merupakan komentar daripada sebuah jawaban, tapi kotak komentar kecil itu hanya untuk mungil. Semoga berhasil. Jika Anda mengalami masalah dengan matematika, Anda bisa pergi dengan rata-rata bergerak sederhana daripada eksponensial. Jadi output yang Anda dapatkan akan menjadi x terakhir yang dibagi dengan x. Pseudocode yang tidak teruji: Perhatikan bahwa Anda perlu menangani bagian awal dan akhir data karena dengan jelas Anda tidak dapat menghitung rata-rata 5 persyaratan saat Anda berada di data 2 Anda. Juga, ada cara yang lebih efisien untuk menghitung rata-rata bergerak ini (jumlah sum - tertua terbaru), namun ini adalah untuk mendapatkan konsep tentang apa yang terjadi. Jawab 8 Feb 12 jam 20:41

No comments:

Post a Comment