Panduan Penulisan Kriteria pada Screener

Pada update aplikasi Data Saham Indonesia versi 1.3.031.3.05 kami menambah fitur Stock Screener dan Stock Scoring.
Artikel ini akan membahas tata cara penulisan kriteria pada Stock Screener dan Stock Scoring.
stock_screener

Stock Screener

Stock Scoring

Stock Scoring

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:
prev hourly close <= current hourly close
==> 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 AND hourly close >= hourly sma("close", 5)
==> (sama dgn kriteria sebelumnya) DAN close diatas MA5 hourly

Rumus pada screener criteria bersifat fleksibel dan dapat berbentuk rumus sederhana seperti:
open < close
maupun rumus kompleks seperti:
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

Candle Selector

Candle Selector

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(), ema()
highest(), hhv()
lowest(), llv()
ranking()
roc()
macd()
macd_signal()
macd_histogram()
sum()
cci()
adx()
pdx()
ndx()
stoch_k()
stoch_d()
bollinger_top()
bollinger_bottom()
bollinger_mean()
bollinger_bandwidth()
bollinger_percent_b()
bollinger_percent_b_avg()

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)

top_broker_hist = [5 top net buyer] - [5 top net seller]

top_broker_hist = [5 top net buyer] – [5 top net seller]

stock_function merupakan fungsi dari stock_attr, berikut definisi stock_function:

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

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)

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

bid_offer_variables

Bid Offer Variables

top1_bid_volume : total volume pada bid di harga terbaik (lot)
top1_bid_count : jumlah order pada bid di harga terbaik
top1_offer_volume : total volume pada offer di harga terbaik (lot)
top1_offer_count : jumlah order offer di harga terbaik

top3_bid_volume : total volume pada bid di 3 harga terbaik (lot)
top3_bid_count : jumlah order pada bid di 3 harga terbaik
top3_offer_volume : total volume pada offer di 3 harga terbaik (lot)
top3_offer_count : jumlah order offer di 3 harga terbaik

top5_bid_volume : total volume pada bid di 5 harga terbaik (lot)
top5_bid_count : jumlah order pada bid di 5 harga terbaik
top5_offer_volume : total volume pada offer di 5 harga terbaik (lot)
top5_offer_count : jumlah order offer di 5 harga terbaik

top10_bid_volume : total volume pada bid di 10 harga terbaik (lot)
top10_bid_count : jumlah order pada bid di 10 harga terbaik
top10_offer_volume : total volume pada offer di 10 harga terbaik (lot)
top10_offer_count : jumlah order offer di 10 harga terbaik

all_bid_volume : total volume pada bid di semua harga (lot)
all_bid_count : jumlah order pada bid di semua harga
all_offer_volume : total volume pada offer di semua harga (lot)
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

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

2 thoughts on “Panduan Penulisan Kriteria pada Screener

  • 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

Leave a Reply to admin Cancel reply

Your email address will not be published. Required fields are marked *