Stock Portfolio Organizer

The ultimate porfolio management solution.

Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
For Portfolio Manager Click Here

WiseTrader Toolbox

#1 Selling Amibroker Plugin featuring:

Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Find Out More Here

Rotasi Saham / Stock Rotation XY-Chart Exploration for Amibroker (AFL)

Rating:
5 / 5 (Votes 1)
Tags:
amibroker, exploration, rotasisaham, xychart, stockrotation, rrg
  • This formula only applies to Exploration/Scan, doesn’t show anything on the chart!

Explore Stocks based on their position in the XY-Chart quadrant.

  • Filter condition based on Transaction Value.

Screenshots

Indicator / Formula

Copy & Paste Friendly
/*
** Rotasi Saham / Stock Rotation XY-Chart Exploration
** Author: newbie123
** --------
** Explore Stocks based on their position in the XY-Chart quadrant.
*/

_N( base = ParamStr( "Base", "IHSG" ) );
Value = Param( "Trx Value (in Billion)", 50, 0, 1000, 1 );

function getrs ( sc, t )
{
    bc = Foreign( base, "C" );
    sbr = sc / bc;

    rs1 = MA( sbr, 12 );
    rs2 = MA( sbr, 26 );
    rs = 100 * ( ( rs1 - rs2 ) / rs2 + 1 );

    rm1 = MA( rs, 1 );
    rm2 = MA( rs, 9 );
    rm = 100 * ( ( rm1 - rm2 ) / rm2 + 1 );

    return IIf( t, rs , rm ) - 100;
}

rs = getrs( C, 1 );
rm = getrs( C, 0 );

Lagging = rs < 0 AND rm < 0;
Improving = rs < 0 AND rm > 0;
Leading = rs > 0 AND rm > 0;
Weakening = rs > 0 AND rm < 0;

pos = WriteIf( Lagging, "3. Lagging",
               WriteIf( Improving, "4. Improving",
                        WriteIf( Leading, "1. Leading",
                                 WriteIf( Weakening, "2. Weakening", "5." ) ) ) );

qcolor = IIf( Lagging, colorOrange,
              IIf( Improving, colorSkyblue,
                   IIf( Leading, colorBrightGreen,
                        IIf( Weakening, colorYellow, colorLightGrey ) ) ) );

VAL = V * C / ( 10 ^ 9 * 0.01 /*fraksi lot - Indonesian Market*/ ); // in billion
Chg = ROC( C, 1 );

Filter = LastValue( VAL ) > Value;

AddColumn( C, "Last", 1.0, colorDefault, colorDefault, 70 );
AddColumn( Chg, "%Chg", 1.2, IIf( Chg > 0, colorGreen, IIf( Chg < 0, colorRed, colorDefault ) ), IIf( Chg >= 5, colorPaleGreen, IIf( Chg <= -5, colorPink, colorDefault ) ), 70 );
AddTextColumn( pos, "Quadrant Pos", 1.0, IIf( qcolor == colorLightGrey, qcolor, colorDefault ), qcolor, 170 );
AddColumn( VAL, "Trx Value", 1.2, colorDefault, colorDefault, 100 );

SetSortColumns( 5, -6 );

26 comments

1. dmr28

Admin please approve this code.

2. baldiboi

please approve this..thx

3. iwan

Terimakasih @newbie123. Sangat bermanfaat, selanjutnya memberikan bobot pada masing masing saham sesuai posisi quadrantnya. Mantap.

4. iwan

Mohon bantuannya @newbie123 untuk menampilkan 1 kolom hasil exploration apakah sedang Akselerasi atau deselerasi guna melengkapi hasil afl explore ini. Terimakasih.

5. iwan

Hallo @newbie123,
saya bermaksud melakukan scan dg timeframe weekly sbb :

//Weekly
TimeFrameSet( inWeekly );
rso = getrs( C, 1 );
rmo = getrs( C, 0 );
TimeFrameRestore();
rso1 = TimeFrameExpand( rso, inWeekly );
rmo1 = TimeFrameExpand( rmo, inWeekly );

//Daily
rs = getrs( C, 1 );//trend
rm = getrs( C, 0 );//momentum

Ternyata hasil scan weeklynya ada yang benar dan salah. Mohon bantuan koreksi
code tsb. Terimakasih.

6. ngocvb

I can’t scan/explore with my Ami

7. newbie123

Halo iwan,

definisi akselerasi/deselerasi itu bagaimana/seperti apa?
Kalau ada rumusnya tentu bisa di tambahkan.

Scan weekly, paling mudahnya bisa di atur di —> backtester setting —> periodicity.

Kalau lgsg invoke ke code, selain mengubah timeframe Close Array pada ticker yang bersangkutan, juga jangan lupa mengubah timeframe Close Array pada ticker base/acuannya

8. newbie123

ngocvb,

whats error? any screen capture?
just saying “can’t scan/explore…” dont help us to help.

try change line 48
Filter = 1;
and see if it solves the problem

9. t3nsai

kl itungan heading nya ada ?

bantu jawab
akselerasi mgkn jarak dr tail ke head ?

10. nhongoc101

I can’t explore, it is not similar your screen, Quadrant pos empty-

11. nhongoc101

image error
this is my image error

12. nhongoc101

image error
this is my image error
I changed line48 Filter=1

13. iwan

Hallo @newbie123

function getrs ( sc, t )
{
    bc = Foreign( base, "C" );
    sbr = sc / bc;
 
    rs1 = MA( sbr, 12 );
    rs2 = MA( sbr, 26 );
    rs = 100 * ( ( rs1 - rs2 ) / rs2 + 1 );
 
    rm1 = MA( rs, 1 );
    rm2 = MA( rs, 9 );
    rm = 100 * ( ( rm1 - rm2 ) / rm2 + 1 );
 
    return IIf( t, rs , rm ) - 100;
}
 
rs = getrs( C, 1 );
rm = getrs( C, 0 );

bagaimana merubahnya untuk peruntukan analisa time frame WEEKLY ?

14. iwan

Hallo @newbie123

function getrs ( sc, t )
{
    bc = Foreign( base, "C" );
    sbr = sc / bc;
 
    rs1 = MA( sbr, 12 );
    rs2 = MA( sbr, 26 );
    rs = 100 * ( ( rs1 - rs2 ) / rs2 + 1 );
 
    rm1 = MA( rs, 1 );
    rm2 = MA( rs, 9 );
    rm = 100 * ( ( rm1 - rm2 ) / rm2 + 1 );
 
    return IIf( t, rs , rm ) - 100;
}
 
rs = getrs( C, 1 );
rm = getrs( C, 0 );

bagaimana merubahnya untuk peruntukan analisa time frame WEEKLY ? Sementara time frame daily juga tetap ada dalam satu penyajian hasil explore.

15. newbie123

nhongoc101,
you need to change the symbol that you want to use as reference/base.
on analysis screen, click parameters, change symbol there.
IHSG is composite index that i use as base/reference for Indonesian market.

16. newbie123

halo iwan,

bisa menggunakan timeframecompress untuk mengubah timeframe ticker foreign nya. demikian juga untuk ticker yg bersangkutan.

bc = TimeFrameCompress( Foreign( base, “C” ), inWeekly );

rs = getrs( TimeFrameCompress( C, inWeekly ), 1 );

17. iwan

Dear Mr. Newbie123

Terima Kasih atas pencerahan code in weekly-nya. Namun saya masih terkendala ketika ingin menampilkan hasil explore ke dalam dua timeframe yg berbeda sekaligus (ada kolom daily & kolom weekly terpisah).

Model code saya spt dibawah ini :

_SECTION_BEGIN( "Relative Performance" );
//Quadrant
_N( base = ParamStr( "Base", "^JKSE" ) );
Value = Param( "Trx Value (in Billion)", 50, 0, 1000, 1 );

//MOHON DIKOREKSI
function getrs ( sc, t )
{
    bc = Foreign( base, "C" ); //???
    bc = TimeFrameCompress(Foreign( base, "C"),inWeekly ); //???
    sbr = sc / bc;
    
    rs1 = MA( sbr, 12 );
    rs2 = MA( sbr, 26 );
    rs = 100 * ( ( rs1 - rs2 ) / rs2 + 1 );

    rm1 = MA( rs, 1 );
    rm2 = MA( rs, 9 );
    rm = 100 * ( ( rm1 - rm2 ) / rm2 + 1 );

    return IIf( t, rs , rm ) - 100;
}
//Menampilkan TF Daily dan TF Weekly
//Daily
rs = getrs( C,1 ); 
rm = getrs( C,0 ); 
//Weekly
rs_w = getrs(TimeFrameCompress( C,inWeekly), 1 ); 
rm_w = getrs(TimeFrameCompress( C, inWeekly),0 ); 

ternyata hasil explore antara daily dan weekly tdk sama dg chart RRG. Mhn bantuannya untuk dikoreksi tu, timeframe Close Array pada ticker base/acuannya untuk bisa berfungsi baik secara daily maupun weekly. Tks.

Maaf apakah bisa chat pribadi agar saya bisa melampirkan hasil explore dll ?

18. iwan

Dear Mr. Newbie123

Terima Kasih atas pencerahan code in weekly-nya. Namun saya masih terkendala ketika ingin menampilkan hasil explore ke dalam dua timeframe yg berbeda sekaligus (ada kolom daily & kolom weekly terpisah).

Model code saya spt dibawah ini :

_SECTION_BEGIN( “Relative Performance” );
//Quadrant
_N( base = ParamStr( “Base”, “^JKSE” ) );
Value = Param( “Trx Value (in Billion)”, 50, 0, 1000, 1 );

//MOHON DIKOREKSI
function getrs ( sc, t )
{
bc = Foreign( base, “C” );//baris ini saya masih ragu ?
bc = TimeFrameCompress(Foreign( base, “C”),inWeekly );//baris ini saya masih ragu?
sbr = sc / bc;

rs1 = MA; rs2 = MA; rs = 100 * ( ( rs1 – rs2 ) / rs2 + 1 ); rm1 = MA; rm2 = MA; rm = 100 * ( ( rm1 – rm2 ) / rm2 + 1 ); return IIf( t, rs , rm ) – 100;
}
//Menampilkan TF Daily dan TF Weekly
//Daily
rs = getrs( C,1 );
rm = getrs( C,0 );
....................dstnya
//Weekly
rs_w = getrs(TimeFrameCompress( C,inWeekly), 1 );//sesuai arahan sebelumnya
rm_w = getrs(TimeFrameCompress( C, inWeekly),0 );//sesuai arahan sebelumnya
....................dstnya

//Filter
AddTextColumn( pos, "QDR Daily", 1.0, IIf( qcolor == colorLightGrey, qcolor, zcolor ), qcolor, 87 );
AddTextColumn( pos1, "QDR Weekly", 1.0, IIf( qcolor1 == colorLightGrey, qcolor1, zcolor1 ), qcolor1, 87 );

//Hasil Explore
Ticker Date/Time   Sector       Last  QDR Daily  QDR Weekly  Val-Mil
SMGR   12/08/2022  Barang Baku  7025  Improving  Improving   79.34

Hasil yang sebenarnya sesuai chart RRG : Daily >> Improving dan Weekly >> Leading

masih terdapat perbedaan antara hasil explore dan chart terutama Quadrant dg TF WEEKLY. Mhn bantuannya untuk dikoreksi tu, timeframe Close Array pada ticker base/acuannya (bc)untuk bisa berfungsi baik secara daily maupun weekly. Tks.

Maaf apakah bisa chat pribadi agar saya bisa melampirkan hasil explore dll ?

19. put_tooth

Quadrant Pos saya juga muncul warna abu-abu. Saya menggunakan plugins dari Tradingview. Baik dengan menggunakan IHSG, IDX atau JKSE sebagai dasar/referensi untuk pasar saham Indonesia juga muncul warna abu-abu. Untuk itu mohon bantuannya. Terima kasih sebelumnya

20. nhongoc101

Dear Mr. Newbie123
Thank you so much, I’ve made

21. newbie123

Halo Iwan,

Cara paling mudah dan simple, tentunya bisa dengan membuat fungsi getrs jadi dua. Satu untuk daily, satu untuk weekly. Demikian juga untuk variable rs/rm nya, kondisi syarat kuadrannya, posisi kuadrannya, dan pewarnaannya.
Nama fungsi, variable rs/rm, syarat kuadran, pos, dan warna harus di bedakan sendiri2 antara yang daily dengan yg weekly, agar tidak tertukar.

//daily
function getrs ( sc, t )
{
    bc = Foreign( base, "C" );
    ...dst
}
//weekly
function getrs_w ( sc, t )
{
    bc = TimeFrameCompress( Foreign( base, "C" ), inWeekly );
    ...dst
}

//daily
rs = getrs( C, 1 );
rm = getrs( C, 0 );
 
Lagging = rs < 0 AND rm < 0;
....dst 
pos = WriteIf( Lagging, "3. Lagging",
....dst

//weekly
rs_w = getrs_w( TimeFrameCompress( C, inWeekly ), 1 );
rm_w = getrs_w( TimeFrameCompress( C, inWeekly ), 0 );
 
Lagging_w = rs_w < 0 AND rm_w < 0;
....dst 
pos_w = WriteIf( Lagging_w, "3. Lagging",
....dst

@

22. newbie123

halo put_tooth,

Selama ini kalau mau lihat/akses price chart IHSG, bagaimana caranya kalau tidak tau kode tickernya?
Kode ticker yang digunakan untuk melihat/akses price chart IHSG, itulah yang di gunakan, bukan dengan menebak2 apakah kodenya IHSG, ^JKSE, atau lainnya.
Saya tidak menggunakan plugin tradingview, jadi tidak tau kode tickernya apa untuk plugin tradingview.

23. iwan

Dear Mr. Newbie123
Sudah saya aplikasikan algoritma
dan coding nya. EXPLORE sdh berfungsi
dan hasilnya sdh sesuai juga dg chart
Daily or weekly. Thank you very much.
Senang bisa saling berbagi pengetahuan.

24. iwan

Dear Mr.Newbie123

Apakah code berikut ini menggambarkan tail(ekor) dan head(kepala) dari Chart RRG ?

function drawpos ( x, y, sym, text )
{
    rsl = VarGet( "rsl" );
    rsh = VarGet( "rsh" );
    rml = VarGet( "rml" );
    rmh = VarGet( "rmh" );

    xx = pxl + pxw + x * ( pxw / ( Max( rsh, -rsl ) * 1.10 ) );
    yy = pxb - pxh - y * ( pxh / ( Max( rmh, -rml ) * 1.10 ) );

    xp = Nz( VarGet( "xp" + sym ), xx );
    yp = Nz( VarGet( "yp" + sym ), yy );

    VarSet( "xp" + sym, xx );
    VarSet( "yp" + sym, yy );
}

Mhn bantuannya menyusun code untuk menghitung jarak tail ke head (akselerasi → semakin jauh, deselerasi → semakin dekat) untuk bisa dituangkan dalam bentuk explorer. Terima kasih.
My best Regard.

25. newbie123

Halo iwan,

Saya belum paham benar tentang konsep akselerasi ini.
Dikatakan semakin jauh tuh seperti apa? dibandingkan dengan apa? syarat di sebut menjauh itu gimana? dstnya.

Kalau hitung jarak dari tail ke head, harusnya bisa dihitung pakai rumus segitiga phytagoras. cmiiw.

Kalau di tanya drawpos(), fungsi itu gunanya untuk menggambar/plot semua titik2 rs/rm ke xychart.
Titik (xp,yp) adalah tail, titik (xx,yy) adalah head.

26. iwan

Dear Mr.Newbie123

Memperjelas maksud pertanyaan saya :
1 . Menghitung jarak antara Head ke
Tail terdekat.
2. Menghitung jarak Head ke sumbu
utama (composite).
Terimakasih.

My Best Regard.

Leave Comment

Please login here to leave a comment.

Back