Bagaimana sebenarnya indikator teknis di pasar saham bekerja?

Siapa pun, yang pernah tertarik pada saham atau cryptocurrency telah melihat garis-garis tambahan ini pada grafik. Anda mungkin pernah mendengar pendapat bahwa itu tidak berhasil. Tetapi mereka sangat meningkatkan kemampuan perdagangan saya, sambil menampilkan banyak data penting. Tapi bagaimana cara kerjanya? Dan kepada siapa ini bisa bermanfaat?

Anda pasti harus membaca ini jika:

  1. Anda menggunakannya dalam perdagangan hari
  2. Anda berencana untuk menulis bot perdagangan
  3. Jika Anda ingin menerapkan strategi atau indikator perdagangan sendiri




Paling sering indikator teknis adalah fungsi jendela, fungsi rekursif atau fungsi tertimbang dari harga / volume yang ditarik dari bursa saham dalam format UOHLCV (waktu unix, buka, tinggi, rendah, dekat, volume). Tidak jarang bagi indikator untuk menggunakan penyaringan yang berbeda, minimum dan maksimum atau indikator lainnya sebagai dasar untuk perhitungan selanjutnya.

Simple moving average (SMA)


Saat mengkodekan indikator, sangat mudah untuk menggunakan pendekatan fungsional. Sebagai contoh, moving average itu hanya rata-rata dari setiap nilai jendela bergulir.

function sma($close, window) { return rolling(x => mean(x), window, $close); } 

Dimana mean adalah operasi yang menghitung rata-rata array dan rolling adalah kombinasi dari fungsi window yang untuk setiap elemen yang ada dalam array menghasilkan array elemen n terakhir dan operasi yang melipat jendela ini menjadi angka.

 function rolling(operation, window, array) { let result = []; for (let i = 0; i < array.length; i++) { if (i + 1 < window) { result.push(NaN); } else { result.push(operation(array.slice(i + 1 - window, i + 1))); } } return result; } 

SMA adalah indikator yang tertinggal dan membantu menentukan tren. Digambar sebagai overlay pada bagan dan nilai pertama biasanya dibuang. Dua moving average dapat digunakan bersama untuk menghasilkan sinyal crossover.

Simple moving average (SMA)

Crossover bullish terjadi ketika satu moving average yang relatif pendek breakout moving average yang panjang. Rata-rata bergerak tertimbang secara eksponensial lebih sering digunakan dalam praktik, karena fungsi jendela tertimbang mengurangi efek penundaan.

Standar deviasi (STDEV)


Jika kita mengganti fungsi rata - rata di SMA dengan deviasi standar kita akan mendapatkan deviasi standar geser

 function stdev($close, window) { return rolling(x => sd(x), window, $close); } 

Di mana sd dianggap sebagai akar kuadrat dari varians dan umumnya tanpa koreksi Bessel. Kami akan menganggap bahwa semua orang mengerti bagaimana mengimplementasikan sd

sd(x)= sqrt frac sum(xi hatx)2N.


Akar kuadrat dari varians digunakan karena varians itu sendiri diukur dalam dolar suqare dalam teori dimensi dan bukan karena seseorang merek dagang terdaftar atau apa pun.

Bollinger Bands (BBAND)


Dengan demikian, kami telah menerapkan dua indikator dasar yang dapat kami gabungkan dan dapatkan yang baru. Misalnya, jika kita mempertimbangkan penambahan rata-rata bergerak dan simpangan baku dikalikan dengan 2, kita akan mendapatkan bagian atas dari pita Bollinger dan bagian yang lebih rendah akan kita dapatkan jika kita kurangi.

 function bb($close, window, mult) { let middle = sma($close, window); let upper = pointwise((a, b) => a + b * mult, middle, stdev($close, window)); let lower = pointwise((a, b) => a - b * mult, middle, stdev($close, window)); return { lower : lower, upper : upper}; } 

di mana fungsi pointwise adalah fungsional lain yang bermanfaat

 export function pointwise(operation, ...arrays) { let result = []; for (let i = 0, len = arrays[0].length; i < len; i++) { let iarr = (i) => arrays.map(x => x[i]); result[i] = operation(...iarr(i)); } return result; } 

dan itu hanya melakukan operasi dengan beberapa array

Bollinger Bands (BBAND)

Bollinger band membantu menentukan ketenangan sebelum pergerakan harga besar, dan digunakan sebagai alat untuk memindahkan volatilitas tepat pada grafik, standar deviasi dikurangi / ditambahkan dari moving average untuk ditampilkan sebagai overlay pada satu grafik dengan harga.

Exponential moving average (EMA)


Bagaimana kita bisa mengurangi lag moving average sederhana? Karena menghitung rata-rata dari harga penutupan terakhir dan kita dapat memahami bahwa kita dapat melakukan penjumlahan dengan beberapa bobot dan mengurangi kontribusi harga lama.

 barx= frac sumxiN= frac sum1 cdotxi sum1 quad Rightarrow quad widetildex= frac sumxiwi sumwi


Misalnya kalau kita pilih wn=qndan konstan qitu kurang dari satu, maka kita mendapatkan bobot yang jauh berkurang, jika kita akan menambahkan harga mulai dari yang terbaru.

fungsi tertimbang

Juga dimungkinkan untuk memperkirakan perhitungan dan mendapatkan persamaan rekursif jika kita memperluas jendela hingga panjang penuh dan mengasumsikan bahwa kontribusi ekornya kecil.

1+q+q2+...+qn undersetn to infty undersetq<0= frac11q mathrmEMAcurr= frac sumxiqi sumqi=(1q) jumlahxiqi mathrmEMAnext= fracxnext+q cdot jumlahxiqi1+q cdot jumlahqi=(1q) cdot kiri[xberikutnya+q cdot jumlahxiqi benar] mathrmEMAnext=(1q) cdotxberikutnya+q) cdot mathrmEMAcurr



Secara Finlandia kita membutuhkan beberapa nilai α = 1 - q sebagai konstanta perataan. Adalah mungkin untuk membuktikan bahwa ketika kita memilih  alpha=2/(N+1)pusat massa grafik bobot EMA dan SMA di atas menjadi sama. Dalam kode ini terlihat jauh lebih sederhana.

 function ema($close, window, weight = null) { weight = weight ? weight : 2 / (window + 1); let ema = [ mean($close.slice(0, window)) ]; for (let i = 1; i < $close.length; i++) { ema.push($close[i] * weight + ema[i - 1] * (1 - weight)); }; return ema; } 

Secara umum ini adalah moving average yang sama tetapi lebih sensitif.

Exponential moving average (EMA)
Efektivitas penggunaan tergantung pada pengalaman Anda dan pengaturan yang digunakan. Misalnya di situs ini parameter dipilih dengan cukup baik.

Divergensi konvergensi rata-rata bergerak (MACD)


Gerald Appel pada tahun 1979 muncul dengan salah satu indikator paling sederhana dan paling efektif yang tersedia. Ini mengubah dua indikator tren EMA menjadi osilator momentum dan menawarkan yang terbaik dari kedua dunia: mengikuti tren dan momentum. Secara kasar MACD histogram itu adalah turunan dari harga. Itu digambar dalam sistem coordintate baru daripada overlay dan mewakili dengan dua garis dan satu histogram.

Divergensi konvergensi rata-rata bergerak (MACD)

Untuk menghitung garis MACD kita perlu mengurangi panjang EMA dari yang pendek, itu saja. EMA lain dari garis ini dengan jendela kecil akan menghasilkan garis sinyal. Histogram diperoleh dengan perbedaan antara dua hasil sebelumnya.

 function macd($close, wshort, wlong, wsig) { let line = pointwise((a, b) => a - b, ema($close, wshort), ema($close, wlong)); let signal = ema(line, wsig); let hist = pointwise((a, b) => a - b, line, signal); return { line : line, signal : signal, hist : hist }; } 

Matriks korelasi


Jika Anda tertarik dalam investasi jangka panjang dan analisis portofolio, Anda akan menemukan manfaatnya dalam matriks korelasi.

 function cor(f, g) { let Ef = mean(f), Eg = mean(g); let Ef2 = mean(pointwise((a) => a * a, f)); let Eg2 = mean(pointwise((a) => a * a, g)); let Efg = mean(pointwise((a, b) => a * b, f, g)); return (Efg - Ef * Eg) / Math.sqrt((Ef2 - Ef * Ef) * (Eg2 - Eg * Eg)); } 

Di sini matriks korelasi berbagai cryptoassets dalam 2 bulan.



Pengujian unit indikator


Jika kami memiliki tabel nilai indikator yang akurat, kami dapat dengan tepat menguji perhitungan kami. Ada berbagai cara untuk menentukan ukuran kesalahan antara dua fungsi tetapi dalam kasus ini kesalahan kuadrat rata-rata yang dinormalisasi lebih cocok karena kuantitas berdimensi berbeda dengan RMSE dan relatif.

 mathrmNRMSE= kiri. sqrt frac sum( hatxixi)2N tengah/( maxxi minxi) benar.


Misalnya, bitcoin dapat berharga $ 20.000 dan selisih $ 10 kecil, sedangkan ketika seluruh altcoin dapat biaya $ 1 dan perbedaan dalam $ 10 sangat besar.

 function nrmse(f, g) { let sqrDiff = pointwise((a, b) => (a - b) * (a - b), f, g); return Math.sqrt(mean(sqrDiff)) / (Math.max(...f) - Math.min(...f)); } 

Kita juga bisa menggunakan MAPE tetapi tidak komutatif dan memiliki masalah mendekati nol.

Kesimpulan


Jadi begitu. Dalam beberapa baris kode, kita dapat mengekspresikan indikator teknis dasar, jika Anda suka ledakan ini, periksa perpustakaan saya di github. Di sana Anda dapat menemukan lebih banyak. Jika Anda ingin menggunakan beberapa algoritma pembelajaran mesin untuk bot Anda, periksa indikator Zig-Zag sebagai titik masuk.

Referensi


1. StockCharts - daftar algoritma dengan data uji dalam tabel.
2. Cryptowatch - parameter indikator yang disesuaikan dengan baik.
3. Github - kode sumber saya.

PS Jika Anda menemukan kesalahan dalam teks, tolong beri tahu saya secara langsung.

Source: https://habr.com/ru/post/id440090/


All Articles