Kriteria pada screener dinyatakan dalam rumus matematika yang disebut Boolean Expression (BE).Boolean Expression (BE) adalah ekpresi/pernyataan logika yang akan diproses sistem dan akan menghasilkan dua kemungkinan nilai, yaitu: nilai benar (true), atau nilai salah (false).
Contoh:
4 == 4 ==> true
4 == 3 + 1 ==> true
4 > 5 ==> false
true and false ==> false
true or false ==> true
4 == 4 and 4 == 3 + 1 ==> true
(catatan: tanda == adalah operator untuk menyatakan persamaan nilai)
Proses screener akan menghitung rumus Boolean Expression pada kriteria yang di-input, terhadap seluruh saham yang terdaftar di bursa BEI (saat ini berjumlah 617 saham) dan menampilkan saham-saham yang menghasilkan nilai benar (true).
Contoh:
==> menampilkan saham-saham yang nilai close pada candle hourly sebelumnya lebih kecil atau sama dengan nilai close pada candle hourly saat ini.
prev hourly close <= current hourly close
==> (sama dgn kriteria sebelumnya) DAN close diatas MA5 hourly
prev hourly close <= current hourly close AND hourly close >= hourly sma("close", 5)
Rumus pada screener criteria bersifat fleksibel dan dapat berbentuk rumus sederhana seperti:
maupun rumus kompleks seperti:
open < close
hourly high > prev hourly hhv("high", 100) and
hourly close > hourly open and
index macd_histogram > 0 and
high < bollinger_top
Boolean Expression dan Arithmetic Expression merupakan turunan dari Expression. Arithmetic Expression adalah suatu ekpresi/pernyataan yang akan menghasilkan satu nilai dalam himpunan bilangan real. Expression sendiri didefinisikan sebagai “apapun yang menghasilkan satu nilai”.
Hierarki dari Expression adalah sebagai berikut:
Expression :
– Boolean Expression (BE)
– Boolean Value : true , false
– Bracket Expression : ( BE )
– Boolean Operation : and, or, not
– Arithmetic Comparison : >= , <= , > , < , == , !=
– Arithmetic Expression (E)
– Numeric Expression
– Arithmetic Operation : * , / , + , –
– Bracket Expression : ( E )
– Stock Expression
(catatan: pada dokumen ini dan pada criteria composer kami menggunakan notasi E sebagai singkatan untuk Arithmetic Expression)
Bagian yang cukup penting dari kriteria screener adalah Stock Expression, yang merupakan turunan dari Arithmetic Expression.
Struktur dari Stock Expression adalah sebagai berikut:
E: stock_expression: [candle_selector] [timeframe] [target] <stock_attr>
E: stock_expression: [candle_selector] [timeframe] [target] <stock_function>
E: stock_expression: <stock_fundamental_attr>
E: stock_expression: <bid_offer_variables>
candle_selector: prev_N, ..., prev_3, prev_2, prev, current
default: current
timeframe: monthly, weekly, daily, hourly, 15min, 5min, 1min
default: daily
target: stock, sector, index
default: stock
stock_attr:
open, high, low, close, volume
macd, macd_signal, macd_histogram
rsi, stoch_k, stoch_d, stochrsi, atr, adx, pdx, ndx, cci, uo, roc, william_r, mfi
alligator_jaw, alligator_teeth, alligator_lips, alligator_ao, alligator_ac
bollinger_top, bollinger_bottom, bollinger_mean, bollinger_bandwidth, bollinger_percent_b, bollinger_percent_b_avg
value, top_broker, foreign, top_broker_hist, foreign_hist
dto_stochk, dto_stochd, obv, sar
pivot_s1, pivot_s2, pivot_s3, pivot_r1, pivot_r2, pivot_r3
mid_price, tick
stock_function:
sma(n), sma(subformula,n)
ema(n), ema(subformula,n)
highest(subformula,n), hhv(subformula,n)
lowest(subformula,n), llv(subformula,n)
ranking(subformula,n)
ranking_per_sector(subformula,n)
roc(n)
macd(fast_period,slow_period)
macd_signal(fast_period,slow_period,signal_period)
macd_histogram(fast_period,slow_period,signal_period)
sum(subformula,n)
vwap(n)
cci(n)
atr(n)
adx(n)
pdx(n)
ndx(n)
stoch_k(lookback_period,k_period)
stoch_d(lookback_period,k_period,d_period)
bollinger_top(period, multiplier)
bollinger_bottom(period, multiplier)
bollinger_mean(period, multiplier)
bollinger_bandwidth(period, multiplier)
bollinger_percent_b(period, multiplier)
bollinger_percent_b_avg(period, multiplier)
rsi(n)
stochrsi(period,dtostoch_period,dtostoch_k_period,dtostoch_d_period)
dto_stochk(period,dtostoch_period,dtostoch_k_period,dtostoch_d_period)
dto_stochd(period,dtostoch_period,dtostoch_k_period,dtostoch_d_period)
Parameter yang memiliki nilai default boleh tidak ditulis (tidak disertakan) dalam penulisan. Dalam hal Stock Expression hanya parameter stock_attr yang wajib ditulis.
Contoh:
current daily stock close == close ==> true
current daily stock close == daily close ==> true
current daily stock close == stock close ==> true
current daily stock close == current daily close ==> true
Tetapi ketika parameter ditulis, maka urutan penulisan harus sesuai dengan struktur yang sudah ditetapkan diatas.
Contoh:
stock daily close ==> error
daily current close ==> error
current daily close ==> OK
Parameter target terdiri dari 3 nilai yaitu: stock, sector, index
stock
: menyatakan target yang dipilih adalah chart dari saham yang bersangkutan, misal untuk saham TLKM dan BMRI : target stock akan memilih chart saham TLKM dan BMRI.
sector
: menyatakan target yang dipilih adalah chart dari index sectoral, misal untuk saham TLKM dan BMRI : target sector akan memilih chart dari index INFRA dan FINANCE.
index
: menyatakan target yang dipilih adalah chart index composite dari saham yang bersangkutan, misal untuk saham TLKM dan BMRI : target index akan memilih chart COMPOSITE (^JKSE)
Berikut definisi stock_attr:
open, high, low, close, volume
: nilai open, high, low, close, volume dari chart candlestick saham
macd, macd_signal, macd_histogram
: nilai dari chart MACD(12,26,9) , macd_histogram = macd – macd_signal
rsi
: nilai dari chart RSI(14)
stoch_k, stoch_d
: nilai dari chart Stochastic(15,3,3)
stochrsi
: nilai dari chart StochRSI(9,6)
atr
: nilai dari chart ATR(14)
adx, pdx, ndx
: nilai dari chart ADX(14)
cci
: nilai dari chart CCI(14)
uo
: nilai dari chart UO(7,14,28)
roc
: nilai dari chart ROC(12)
william_r
: nilai dari chart WilliamsR(14)
mfi
: nilai dari chart MFI(14)
alligator_jaw, alligator_teeth, alligator_lips, alligator_ao, alligator_ac
: nilai dari chart Alligator(13,8,5)
bollinger_top, bollinger_bottom, bollinger_mean, bollinger_bandwidth, bollinger_percent_b, bollinger_percent_b_avg
: nilai dari chart Bollinger(20,2)
value
: total nilai transaksi saham
top_broker
: akumulasi dari transaksi top broker (current top_broker = prev top_broker + current top_broker_hist)
foreign
: akumulasi dari transaksi foreign (current foreign = prev foreign + current foreign_hist)
top_broker_hist
: nilai dari chart histogram transaksi top broker (dalam satuan lembar saham)
foreign_hist
: nilai dari chart histogram transaksi foreign (dalam satuan lembar saham)
dto_stochk, dto_stochd
: nilai dari chart DTOStoch(8,5,3)
obv
:
sar
: nilai dari chart SAR(0.02,0.2)
pivot_s1, pivot_s2, pivot_s3, pivot_r1, pivot_r2, pivot_r3
:
mid_price
: mid_price = (high + low) / 2
tick
: nilai fraksi harga saham (harga < 200 : 1 ; harga 200-500 : 2 ; harga 500-2000 : 5 ; harga 2000-5000 : 10; harga > 5000 : 25)
vwap
: vwap = (high + low + close) / 3
sma("<stock_attr>",N)
: simple moving average dari suatu stock_attr sejumlah N bar
Contoh:
sma("close", 5)
==> MA5 dari nilai close daily
hourly sma("volume", 20)
==> MA20 dari nilai volume hourly
ema("<stock_attr>",N)
: exponential moving average dari suatu stock_attr sejumlah N bar
Contoh:
ema("close", 5)
==> EMA5 dari nilai close daily
hourly ema("volume", 20)
==> EMA20 dari nilai volume hourly
highest("<stock_attr>",N)
:
hhv("<stock_attr>",N)
: highest value/nilai tertinggi dari suatu stock_attr sejumlah N bar
Contoh:
daily hhv("high", 5)
==> 5 day highest high daily
hourly hhv("close", 5)
==> 5 hour highest close hourly
lowest("<stock_attr>",N)
:
llv("<stock_attr>",N)
: lowest value/nilai terendah dari suatu stock_attr sejumlah N bar
Contoh:
daily llv("low", 5)
==> 5 day lowest low daily
hourly llv("close", 5)
==> 5 hour lowest close hourly
ranking("<stock_attr>",N)
: ranking nilai stock_attr dari seluruh saham, dengan ranking 1 adalah nilai tertinggi dari stock_attr, jika diinginkan urutan dari terendah ke tertinggi kalikan stock_attr dengan -1
Contoh:
ranking("value") <= 10
==> filter saham-saham top 10 value
ranking("roc") <= 10
==> filter saham-saham yang memiliki 10 nilai ROC tertinggi
ranking("roc * -1") <= 10
==> filter saham-saham yang memiliki 10 nilai ROC terendah
roc(period)
: nilai dari chart Rate of Change (ROC)
Contoh:
roc(12)
==> nilai roc(12)
macd(fast_period,slow_period)
:
macd_signal(fast_period,slow_period,signal_period)
:
macd_histogram(fast_period,slow_period,signal_period)
: nilai dari chart macd, macd_signal, dan macd_histogram
Contoh:
macd(12, 26)
==> nilai macd(12, 26)
macd_signal(12, 26, 9)
==> nilai macd signal(12, 26, 9)
macd_histogram(12, 26, 9)
==> nilai macd histogram(12, 26, 9)
sum("<stock_attr>",N)
: jumlah dari stock_attr sejumlah N bar
Contoh:
sum("foreign", 5)
==> jumlah foreign accumulation 5 hari terakhir
vwap(N)
: nilai dari chart indikator Volume-Weighted Average Price (VWAP)
Formula:
vwap(N) = sum("volume * (high + low + close) / 3", N) / sum("volume", N)
Contoh:
vwap(5)
nilai vwap dengan periode 5 hari terakhir
atr(period)
: nilai dari chart Average True Range (ATR)
Contoh:
atr(14)
==> nilai garis atr(14)
adx(period)
: nilai dari chart Average Directional Index (ADX)
Contoh:
adx(14)
==> nilai garis adx(14)
pdx(14)
==> nilai garis DI+ pada indikator adx(14)
ndx(14)
==> nilai garis DI- pada indikator adx(14)
cci(period)
: nilai dari chart Commodity Channel Index (CCI)
Contoh:
cci(20)
==> nilai cci(20)
stoch_k(lookback_period,k_period)
:
stoch_d(lookback_period,k_period,d_period)
: nilai dari chart Stochastic Oscillator
Contoh:
stock_k(15, 3)
==> nilai Stochastic %K(15, 3)
stock_d(15, 3, 3)
==> nilai Stochastic %D(15, 3, 3)
bollinger_top(period, multiplier) :
bollinger_bottom(period, multiplier) :
bollinger_mean(period, multiplier) :
bollinger_bandwidth(period, multiplier) :
bollinger_percent_b(period, multiplier) :
bollinger_percent_b_avg(period, multiplier) : nilai dari chart Bollinger Bands
Contoh:
bollinger_top(20, 2)
==> nilai Bollinger Band top line(20, 2)
bollinger_bottom(20, 2)
==> nilai Bollinger Band bottom line(20, 2)
rsi(n)
: nilai dari chart indikator Relative Strength Index (RSI)
Contoh:
rsi(14)
==> nilai garis indikator rsi(14)
stochrsi(period,dtostoch_period,dtostoch_k_period,dtostoch_d_period)
dto_stochk(period,dtostoch_period,dtostoch_k_period,dtostoch_d_period)
dto_stochd(period,dtostoch_period,dtostoch_k_period,dtostoch_d_period)
: nilai dari chart indikator StochRSI
Contoh:
stochrsi(14, 8, 5, 3)
==> nilai garis indikator stochrsi(14, 8, 5, 3)
dto_stochk(14, 8, 5, 3)
==> nilai garis %K indikator stochrsi(14, 8, 5, 3)
dto_stochd(14, 8, 5, 3)
==> nilai garis %D indikator stochrsi(14, 8, 5, 3)
stock_fundamental_attr:
debt_equity, ebitda, ebitda_anl, eps, eps_anl
ev_ebitda, ev_ebitda_anl, market_cap, netprofit, netprofit_anl
pbv, pbv_anl, per, per_anl, revenue, revenue_anl
roa, roa_anl, roe, roe_anl
debt_equity
: Debt to Equity Ratio
ebitda
: Earnings Before Interest, Taxes, Depreciation and Amortization (lastest financial report)
ebitda_anl
: Earnings Before Interest, Taxes, Depreciation and Amortization (annualized)
eps
: Earning Per Share (lastest financial report)
eps_anl
: Earning Per Share (annualized)
ev_ebitda
: Enterprise Multiple (lastest financial report)
ev_ebitda_anl
: Enterprise Multiple (annualized)
market_cap
: Market Capitalization
netprofit
: Net Profit (lastest financial report)
netprofit_anl
: Net Profit (annualized)
pbv
: Price-to-Book Ratio (lastest financial report)
pbv_anl
: Price-to-Book Ratio (annualized)
per
: Price-Earnings Ratio (lastest financial report)
per_anl
: Price-Earnings Ratio (annualized)
revenue
: Revenue (lastest financial report)
revenue_anl
: Revenue (annualized)
roa
: Return on assets (lastest financial report)
roa_anl
: Return on assets (annualized)
roe
: Return on Equity (lastest financial report)
roe_anl
: Return on Equity (annualized)
bid_offer_variables:
top1_bid_volume, top1_bid_count, top1_offer_volume, top1_offer_count
top3_bid_volume, top3_bid_count, top3_offer_volume, top3_offer_count
top5_bid_volume, top5_bid_count, top5_offer_volume, top5_offer_count
top10_bid_volume, top10_bid_count, top10_offer_volume, top10_offer_count
all_bid_volume, all_bid_count, all_offer_volume, all_offer_count
top1_bid_volume
: total volume pada bid di harga terbaik (lembar)
top1_bid_count
: jumlah order pada bid di harga terbaik
top1_offer_volume
: total volume pada offer di harga terbaik (lembar)
top1_offer_count
: jumlah order offer di harga terbaik
top3_bid_volume
: total volume pada bid di 3 harga terbaik (lembar)
top3_bid_count
: jumlah order pada bid di 3 harga terbaik
top3_offer_volume
: total volume pada offer di 3 harga terbaik (lembar)
top3_offer_count
: jumlah order offer di 3 harga terbaik
top5_bid_volume
: total volume pada bid di 5 harga terbaik (lembar)
top5_bid_count
: jumlah order pada bid di 5 harga terbaik
top5_offer_volume
: total volume pada offer di 5 harga terbaik (lembar)
top5_offer_count
: jumlah order offer di 5 harga terbaik
top10_bid_volume
: total volume pada bid di 10 harga terbaik (lembar)
top10_bid_count
: jumlah order pada bid di 10 harga terbaik
top10_offer_volume
: total volume pada offer di 10 harga terbaik (lembar)
top10_offer_count
: jumlah order offer di 10 harga terbaik
all_bid_volume
: total volume pada bid di semua harga (lembar)
all_bid_count
: jumlah order pada bid di semua harga
all_offer_volume
: total volume pada offer di semua harga (lembar)
all_offer_count
: jumlah order offer di semua harga
bid_volume(n)
: volume pada bid di harga terbaik ke-n, dimana n: 1,2,3,…
bid_count(n)
: jumlah order pada bid di harga terbaik ke-n, dimana n: 1,2,3,…
offer_volume(n)
: volume pada offer di harga terbaik ke-n, dimana n: 1,2,3,…
offer_count(n)
: jumlah order pada offer di harga terbaik ke-n, dimana n: 1,2,3,…
sum_bid_volume(n)
: total volume pada bid di n harga terbaik
sum_bid_count(n)
: jumlah order pada bid di n harga terbaik
sum_offer_volume(n)
: total volume pada offer di n harga terbaik
sum_offer_count(n)
: jumlah order pada offer di n harga terbaik
Beberapa variable lain yang bisa di coba antara lain:
(note untuk memeriksa nilai variable, atau mengetes formula bisa menggunakan menu “Formula Evaluator”)
best_bid_price
: harga bid (penawaran beli) tertinggi/terbaik saham
best_offer_price
: harga offer (penawaran jual) terendah/terbaik saham
top1_bid_volume
: total volume pada bid di harga terbaik (lembar)
top1_bid_count
: jumlah order pada bid di harga terbaik
top3_bid_volume
: total volume pada bid di 3 harga terbaik (lembar)
top3_bid_count
: jumlah order pada bid di 3 harga terbaik
top5_bid_volume
: total volume pada bid di 5 harga terbaik (lembar)
top5_bid_count
: jumlah order pada bid di 5 harga terbaik
top10_bid_volume
: total volume pada bid di 10 harga terbaik (lembar)
top10_bid_count
: jumlah order pada bid di 10 harga terbaik
all_bid_volume
: total volume pada bid di semua harga (lembar)
all_bid_count
: jumlah order pada bid di semua harga
top1_offer_volume
: total volume pada offer di harga terbaik (lembar)
top1_offer_count
: jumlah order pada offer di harga terbaik
top3_offer_volume
: total volume pada offer di 3 harga terbaik (lembar)
top3_offer_count
: jumlah order pada offer di 3 harga terbaik
top5_offer_volume
: total volume pada offer di 5 harga terbaik (lembar)
top5_offer_count
: jumlah order pada offer di 5 harga terbaik
top10_offer_volume
: total volume pada offer di 10 harga terbaik (lembar)
top10_offer_count
: jumlah order pada offer di 10 harga terbaik
all_offer_volume
: total volume pada offer di semua harga (lembar)
all_offer_count
: jumlah order pada offer di semua harga
blot
: volume transaksi yang terjadi pada harga bid (terjadi ha-ki) dalam satuan lot
slot
: volume transaksi yang terjadi pada harga offer (terjadi ha-ka) dalam satuan lot
bvol
: volume transaksi yang terjadi pada harga bid (terjadi ha-ki) dalam satuan lembar
svol
: volume transaksi yang terjadi pada harga offer (terjadi ha-ka) dalam satuan lembar
bfreq
: frequensi transaksi yang terjadi pada harga bid (terjadi ha-ki)
sfreq
: frequensi transaksi yang terjadi pada harga offer (terjadi ha-ka)
all_buy_volume
: sama dengan bvol
all_sell_volume
: sama dengan svol
all_buy_freq
: sama dengan bfreq
all_sell_freq
: sama dengan sfreq
broker_buyer_count
: jumlah broker yang melakukan pembelian
broker_seller_count
: jumlah broker yang melakukan penjualan
net_broker_buyer_count
: jumlah broker yang melakukan pembelian bersih
net_broker_seller_count
: jumlah broker yang melakukan penjualan bersih
top1_net_broker_buyer_volume
: total volume saham pembelian bersih 1 broker teratas dalam lembar
top1_net_broker_buyer_value
: nilai transaksi saham pembelian bersih 1 broker teratas
top1_net_broker_buyer_avg_price
: harga rata-rata saham pembelian bersih 1 broker teratas
top3_net_broker_buyer_volume
: total volume saham pembelian bersih 3 broker teratas dalam lembar
top3_net_broker_buyer_value
: nilai transaksi saham pembelian bersih 3 broker teratas
top3_net_broker_buyer_avg_price
: harga rata-rata saham pembelian bersih 3 broker teratas
top5_net_broker_buyer_volume
: total volume saham pembelian bersih 5 broker teratas dalam lembar
top5_net_broker_buyer_value
: nilai transaksi saham pembelian bersih 5 broker teratas
top5_net_broker_buyer_avg_price
: harga rata-rata saham pembelian bersih 5 broker teratas
top10_net_broker_buyer_volume
: total volume saham pembelian bersih 10 broker teratas dalam lembar
top10_net_broker_buyer_value
: nilai transaksi saham pembelian bersih 10 broker teratas
top10_net_broker_buyer_avg_price
: harga rata-rata saham pembelian bersih 10 broker teratas
top1_net_broker_seller_volume
: total volume saham penjualan bersih 1 broker teratas dalam lembar
top1_net_broker_seller_value
: nilai transaksi saham penjualan bersih 1 broker teratas
top1_net_broker_seller_avg_price
: harga rata-rata saham penjualan bersih 1 broker teratas
top3_net_broker_seller_volume
: total volume saham penjualan bersih 3 broker teratas dalam lembar
top3_net_broker_seller_value
: nilai transaksi saham penjualan bersih 3 broker teratas
top3_net_broker_seller_avg_price
: harga rata-rata saham penjualan bersih 3 broker teratas
top5_net_broker_seller_volume
: total volume saham penjualan bersih 5 broker teratas dalam lembar
top5_net_broker_seller_value
: nilai transaksi saham penjualan bersih 5 broker teratas
top5_net_broker_seller_avg_price
: harga rata-rata saham penjualan bersih 5 broker teratas
top10_net_broker_seller_volume
: total volume saham penjualan bersih 10 broker teratas dalam lembar
top10_net_broker_seller_value
: nilai transaksi saham penjualan bersih 10 broker teratas
top10_net_broker_seller_avg_price
: harga rata-rata saham penjualan bersih 10 broker teratas
*sebagai pelengkap terdapat juga variable transaksi broker yang belum net (tanpa menggunakan kata net) sbb:
top1_broker_buyer_volume, top3_broker_buyer_volume, top5_broker_buyer_volume, top10_broker_buyer_volume,
top1_broker_seller_volume, top3_broker_seller_volume, top5_broker_seller_volume, top10_broker_seller_volume,
Contoh-contoh formula screener:
– higher high higher low :
prev high < high and prev low < low
– inside bar :
prev high > high and prev low < low
– golden cross MA 5-20 (garis MA 5 memotong keatas MA 20) :
prev sma(5) < prev sma(20) and sma(5) > sma(20)
– MACD naik :
prev macd < macd and macd > 0
– three white soldier :
prev_2 close > prev_2 open
and prev close > prev open
and close > open
daftar 10 saham tertinggi akumulasi berdasarkan nilai top-5-net-broker-accumulation :
ranking("top_broker_hist * daily_price_avg") <= 10
Saya mencoba untuk membuat screener dengan kriteria sbb:
– Harga diatas SMA26 mingguan
– MACD Histogram bergerak naik dibawah center line
– Stochastic garis K dibawah 19 memotong garis D dari bawah ke atas
apakah sudah benar seperti ini:
close > weekly sma(“close”, 26) AND
macd_histogram < 0 AND
prev_2 macd_histogram < prev_1 macd_histogram AND
prev macd_histogram < current macd_histogram AND
stoch_k < 19 AND
stoch_k <= stoch_d
Hallo pak Robby,
untuk kriteria stochastic K memotong garis D dari bawah keatas formulanya: prev stoch_k < prev stoch_d and stoch_k > stoch_d
jadi formula lengkapnya:
close > weekly sma(“close”, 26)
and macd_histogram < 0 and prev_2 macd_histogram < prev macd_histogram and prev macd_histogram < macd_histogram and stoch_k < 19 and prev stoch_k < prev stoch_d and stoch_k > stoch_d