AmiBroker Formula Language (AFL)

Salah satu aspek terpenting dari AFL adalah bahasa pemrosesan array. Bahasa Pemrograman ini beroperasi pada array (atau baris / vektor) data. Cara operasi ini sangat mirip dengan cara kerja spreadsheet populer (seperti Microsoft Excel). Siapa pun yang terbiasa dengan MS Excel seharusnya tidak memiliki masalah dengan cepat mengambil AFL.
AFL Editor

Apa itu Array?

Array adalah sebuah daftar (atau baris) nilai. Dalam beberapa buku dapat disebut sebagai vektor. Setiap baris nilai bernomor dalam contoh mewakili array individual. Amibroker telah menyimpan 6 array databasenya untuk setiap simbol. Satu untuk Open, satu untuk Low, satu untuk High, satu untuk Close dan satu untuk Volume (lihat baris berlabel 1-5 di bawah) dan satu untuk openint. Ini dapat dirujuk dalam AFL sebagai Open, Low, High, Close, Volume, openint atau O, L, H, C, V, OI.
Gambar 1 Susunan Harga Pembukaan (Open)

Array lain apa pun dihitung dari 6 array (O, L, H, C, V, OI) ini menggunakan rumus yang dibangun ke dalam AFL. Array ini tidak disimpan dalam basis data tetapi dihitung jika perlu.
Tool Tip

Setiap nilai individu dalam array memiliki tanggal yang terkait dengannya. Jika Anda mengaktifkan opsi tip alat (Preferences -> Miscellaneous Tab - > Price data tool tips), saat Anda memindahkan kursor di atas candle pada candle harian, sebuah kotak kuning kecil muncul. AFL kemudian mencari nilai Open, Low, High, Close, Volume Values, dalam array yang sesuai dan menampilkannya di dalam Tool Tip.

Memproses array - mengapa AFL begitu cepat?

Mari kita lihat bagaimana pernyataan berikut diproses:

MyVariable = ( High + Low )/2;

Ketika AFL mengevaluasi pernyataan seperti ini (High + Low) / 2 tidak perlu menafsirkan ulang kode ini untuk setiap bilah. Alih-alih dibutuhkan ARRAY High dan ARRAY Low dan menambahkan elemen array yang sesuai dalam satu tahap. Dengan kata lain + operator (dan operator lain juga) bekerja pada array sekaligus dan dieksekusi pada kecepatan penuh kode-dikompilasi, maka array yang dihasilkan (masing-masing elemen itu) dibagi 2 juga dalam satu tahap.

Mari kita lihat detailnya - lihat gambar 2 .. Ketika AFL engine melihat (High + Low) / 2 pertama-tama dibutuhkan array High (1) dan Low (2) dan menghasilkan (dalam langkah terkompilasi tunggal) array sementara (3). Kemudian ia menciptakan array terakhir (4) dengan membagi setiap elemen array sementara dengan dua. Hasil ini ditugaskan untuk myVariable.
Gambar 2 Langkah AFL saat memproses (High + Low) / 2

Moving Average, pernyataan kondisional

Mari kita perhatikan kode berikut:

Cond1 = Close > MA( Close, 3 );
Cond2 = Volume > Ref( Volume, -1 );
Buy = Cond1 AND Cond2;
Sell = High > 1.30;

Kode ini menghasilkan sinyal beli ketika Close (harga penutupan) hari ini lebih tinggi dari rata-rata bergerak 3 hari dari penutupan DAN volume hari ini lebih tinggi dari volume kemarin. Ini juga menghasilkan sinyal jual ketika High (harga tertinggi) hari ini lebih tinggi dari 1,30.

Jika dalam kode AFL, perlu melihat apakah Close (harga penutupan) lebih besar daripada simple moving average 3 hari AFL pertama-tama akan berjalan melalui array Close (harga penutupan) membuat array baru yang disebut MA (Close, 3) untuk simbol yang dianalisis. Setiap sel dalam array baru kemudian dapat dibandingkan satu untuk satu dalam array dekat. Dalam contoh array bernama dibuat dengan cara ini. Untuk setiap sel di mana Close (harga penutupan) lebih besar dari nilai sel yang sesuai di MA (Close, 3) nilai sel untuk array baru diatur ke '1'. Jika Close (harga penutupan) tidak lebih besar dari harga yang sesuai dalam array Close (harga penutupan) nilai dalam 'Cond1' diatur ke '0'.

AFL juga dapat melihat ke depan atau ke belakang sejumlah sel dalam array menggunakan Ref fungsi (lihat baris 6 di mana array sementara dibuat menahan volume hari sebelumnya)

Pada baris 9 array baru bernama Cond2 telah dibuat dengan membandingkan nilai setiap sel dalam array volume dengan sel sebelumnya yang mengatur nilai sel Cond2 ke '1' jika benar dan '0' jika salah.

Baris 10 memperlihatkan array yang disebut 'Buy' yang dibuat dengan membandingkan nilai sel di dengan nilai sel di Cond2. Jika sel di Cond1 memiliki '1' DAN begitu juga sel yang sesuai di Cond2 maka '1' ditempatkan di sel array 'Buy'.

Baris 11 menunjukkan array yang disebut 'Sell' yang dibuat setiap kali nilai sel dalam array Close (harga penutupan) lebih besar dari  1,30.
Jelas Buy dan Sell adalah array khusus yang hasilnya dapat ditampilkan di jendela Analyser atau di layar menggunakan nilai merah atau hijau sesuai kebutuhan.

Sedikit lebih kompleks

Contoh di atas sangat sederhana. Sekarang akan dinjelaskan 3 hal yang tampaknya menimbulkan kebingungan di antara para pengguna:
  • referensi nilai yang dipilih (SelectedValue, BeginValue, EndValue, LastValue)
  • Fungsi IIF
  • Fungsi AMA

AFL memiliki fungsi khusus yang memungkinkan untuk merujuk nilai array pada bilah yang dipilih, mulai dan berakhir. Fungsi-fungsi ini disebut SelectedValue, BeginValue dan EndValue. Ada satu lagi fungsi yang disebut LastValue yang memungkinkan untuk mendapatkan nilai array di bar terakhir. Keempat fungsi ini mengambil elemen array pada bilah yang diberikan dan mengembalikan SINGLE NUMBER yang mewakili nilai array pada titik tertentu. Ini memungkinkan untuk menghitung beberapa statistik mengenai poin yang dipilih. Sebagai contoh: 

EndValue( Close ) - BeginValue( Close )

Akan memberi perubahan nilai mata uang antara Close (harga penutupan) dalam kisaran dari-ke yang dipilih.

Ketika nomor diambil oleh salah satu dari fungsi-fungsi ini dibandingkan dengan array atau operasi aritmatika lainnya yang melibatkan angka dan array dilakukan itu berfungsi seperti angka yang membentang semua elemen array. Ini diilustrasikan dalam tabel di bawah ini (baris 2, 6, 7). Tanda warna hijau "begin" bar dan tanda warna merah "end" bar. Bilah terpilih ditandai dengan warna biru.

Sekarang IIF (kondisi, truepart, falsepart) fungsi. Berhasil mengembalikan nilai kedua ( truepart ) atau ketiga ( falsepart ) argumen tergantung pada kondisi . Seperti yang Anda lihat pada tabel di atas di baris 8, nilainya berasal dari Close array ( truepart ) untuk bar ketika kondisinya benar (1) dan berasal dari Open array ( falsepart ) untuk bilah yang tersisa. Dalam hal ini array yang dikembalikan oleh fungsi IIF terdiri dari beberapa nilai dari Close dan beberapa nilai dari Open array. Perhatikan bahwa keduanya truepart dan falsepart adalah array dan dievaluasi terlepas dari kondisinya (jadi ini bukan pernyataan IF-THEN-ELSE biasa tetapi fungsi yang mengembalikan array).

AMA (array, factor) fungsi tampaknya menyebabkan masalah dengan memahaminya. Tetapi sebenarnya ini sangat sederhana. Ini bekerja dengan cara rekursif. Ini berarti bahwa ia menggunakan nilai sebelumnya untuk perhitungan nilai saat ini. Ini memproses array bar demi bar, dengan setiap langkahnya dikalikan sel yang diberikan argumen pertama (array) dengan sel yang diberikan argumen kedua (faktor) dan menambahkannya ke nilai AMA sebelumnya dikalikan dengan (1-faktor). Mari kita perhatikan kolom 3. Nilai AMA di kolom 3 diberikan dengan mengalikan harga penutupan dari kolom 3 ( 1.23 ) berdasarkan faktor (0,4). Daripada kita menambahkan nilai AMA sebelumnya ( 1.0363 ) dikalikan dengan (1-faktor = 0,6). Hasilnya (dibulatkan ke 4 tempat) adalah 1,23 * 0,4 + 1,0363 * 0,6 = 1.1138.

Jika Anda melihat angka-angka di baris 12 Anda mungkin memperhatikan bahwa nilai-nilai ini terlihat seperti rata-rata bergerak dari penutupan. Dan itu benar. Kami benar-benar mempresentasikan bagaimana cara menghitung rata-rata periode eksponensial bergerak variabel menggunakan fungsi AMA.

Perulangan baru

Dengan versi 4.40 AmiBroker membawa kemampuan untuk beralih melalui penawaran menggunakan for dan while loop dan menambahkan pernyataan if-else. Peningkatan ini memungkinkan untuk bekerja KEDUA cara: baik menggunakan pemrosesan ARRAY (dijelaskan di atas) untuk kecepatan dan kesederhanaan atau menggunakan LOOPS untuk melakukan hal-hal kompleks. Sebagai contoh bagaimana menerapkan rata-rata periode variabel eksponensial (dijelaskan di atas) menggunakan perulangan, lihat kode berikut:


Period = ... some calculation

vaexp[ 0 ] = Close[ 0 ]; // initialize first value
for( i = 1; i < BarCount; i++ )
{
// calculate the value of smoothing factor
Factor = 2/(Period[ i ] + 1 );
// calculate the value of i-th element of array
// using this bar close ( close[ i ] ) and previous average value ( vaexp[ i - 1 ] )
vaexp[ i ] = Factor * Close[ i ] + ( 1 - Factor ) * vaexp[ i - 1 ];
}


Seperti yang Anda lihat, kodenya lebih panjang tetapi di sisi lain sangat mirip dengan bahasa pemrograman lain seperti C / Pascal / Basic. Jadi, orang-orang dengan pengalaman dalam pemrograman mungkin merasa lebih mudah untuk dipahami.

Jika Anda pemula, saya sarankan untuk mempelajari pemrosesan array terlebih dahulu sebelum menggali ke dalam hal perulangan yang lebih kompleks. Jika Anda mengalami masalah dalam pengkodean AFL, saya sarankan Anda membuat sendiri array dalam contoh di Excel. Jika masih bermasalah, mintalah bantuan dari teman - terutama jika teman itu adalah seorang akuntan.

Semoga bermanfaat ! 😉


Untuk mendapatkan data EOD Saham Indonesia lengkap dengan frekuensi dan NBSA secara GRATIS silahkan berkunjung ke yuniortrader.blogspot.com

No comments:

Post a Comment