Discover this week's top 5 Buy Calls—expertly selected to help you make informed investment decisions!
Stock Name | Last Price | Target Price | Upside/Downside | Price Call | Dividend Yield | Capital Upside |
---|---|---|---|---|---|---|
testing BUMI ARMADA BERHAD |
0.525 | 0.60 | +0.075 (14.29%) | OP | 5% per annum | - |
1015 BUMI ARMADA BERHAD |
0.525 | 0.85 | +0.325 (61.90%) | BUY | 5% per annum | - |
2345 KEYFIELD INTERNATIONAL BERHAD |
2.27 | 3.18 | +0.91 (40.09%) | BUY | 5% per annum | - |
KEYFIELD KEYFIELD INTERNATIONAL BERHAD |
2.27 | 3.25 | +0.98 (43.17%) | BUY | 5% per annum | - |
MHCARE METRO HEALTHCARE BERHAD |
0.465 | 0.29 | -0.175 (37.63%) | BUY | 5% per annum | - |
Updated by 23 April 2025
Access in-depth Research Reports with expert insights and analysis to guide your investment decisions.
PORTFOLIO SIMULATOR
Description
Portfolio Simulator is a “virtual portfolio” that recommends stocks purely based on technical analysis. Most of the Bursa-listed companies recommended in the portfolio are selected based on the author’s trading strategy, which leans towards a growth investing approach. Stock picks must be those under the coverage of the Equity Research team and these include one-time coverage stocks and stocks on radar. Stock prices shall be adjusted accordingly in the event of corporate exercises. Any changes in the portfolio will be stated in the “Remarks” section.
Investors should be mindful of the risks involved. This virtual portfolio should not be interpreted as AmInvestment Bank having taken a position. Note that this virtual portfolio starts at RM1mil as our initial capital. The portfolio is for educational purposes only.
Can't convert this string to number: "13٫8" The blamed expression: ==> groupPortfolioReturns.txtPRGainLossPercent.getData()?number [in template "66960891545999#20120#48569" at line 235, column 122] ---- FTL stack trace ("~" means nesting-related): - Failed at: #if (groupPortfolioReturns.txtPRGainL... [in template "66960891545999#20120#48569" at line 235, column 57] ----
1<style>
2 .c003-table-container {
3 border: 2px solid red;
4 padding: 10px;
5 font-family: Arial, sans-serif;
6 line-height: 1.6;
7 font-size: 16px;
8 }
9
10 @media screen and (max-width: 768px) {
11 .c003 {
12 padding-left: 20px !important;
13 overflow-x: auto;
14 }
15 tr th, tr td {
16 font-size: 14px;
17 }
18 .c003-table-container-bottom-content .citing, .c003-table-container-bottom-content .remarks {
19 font-size: 14px !important;
20 }
21 .c003-table-container .notes {
22 font-size: 8px !important;
23 }
24
25 .c003-table-container {
26 display: table !important;
27 }
28
29 .c003-table-container-bottom-content {
30 padding-left: 20px !important;
31 padding-right: 20px !important;
32 }
33 .c003-table-container-bottom-content .date {
34 text-align: left !important;
35 }
36 }
37
38 .c003 p {
39 margin: 0;
40 }
41
42 .c003-table-container table {
43 width: 100%;
44 border-collapse: collapse;
45 }
46 .c003-table-container th,
47 .c003-table-container td {
48 padding: 8px;
49 }
50 .c003-table-container th {
51 font-weight: bold;
52 text-align: left;
53 vertical-align: baseline;
54 }
55
56 .c003-table-container tbody tr td:not(:first-child),
57 .c003-table-container th:not(:first-child),
58 .c003-table-container tfoot tr td:not(:first-child) {
59 text-align: right;
60 }
61 .c003-table-container .section-header {
62 font-weight: bold;
63 /* padding: 10px 0; */
64 }
65 .c003-table-container tbody {
66 border-top: 3px solid red;
67 border-bottom: 2px dashed red;
68 margin: 20px 0;
69 }
70
71 .c003-table-container .notes {
72 font-size: 14px;
73 margin-top: 10px;
74 color: #666;
75 font-weight: normal;
76 text-align: center;
77 }
78
79 .c003-table-container .last-row p {
80 font-weight: bold;
81 }
82
83 .c003-table-container .last-row td,
84 .c003-table-container tfoot td {
85 vertical-align: baseline;
86 }
87
88 .c003-table-container-bottom-content .citing {
89 font-size: 14px;
90 font-style: italic;
91 margin-top: 8px;
92 margin-bottom: 0;
93 }
94
95 .c003-table-container-bottom-content .date {
96 color: red;
97 text-align: left;
98 margin-bottom: 0;
99 }
100
101 .c003-table-container-bottom-content .remarks {
102 font-size: 14px;
103 }
104
105 .c003-table-container-bottom-content .remarks span {
106 font-weight: bold;
107 }
108</style>
109
110<div class="c003 portfolio-content">
111 <div class="c003-table-container">
112 <table>
113 <thead>
114 <tr>
115 <th>Stock</th>
116 <th>Quantity</th>
117 <th>Bought price<br />RM</th>
118 <th>Total cost<br />RM</th>
119 <th>Current price<br />RM</th>
120 <th>Market value<br />RM</th>
121 <th>Gain/loss<br />RM</th>
122 <th>Gain/loss<br />%</th>
123 <th>Dividend<br />RM</th>
124 <th>Target<br />RM</th>
125 <th>Stop loss<br />RM</th>
126 </tr>
127 </thead>
128 <tbody>
129 <tr>
130 <td colspan="11" class="section-header">Current holdings</td>
131 </tr>
132 <#if lstCurrentHoldingInfo.getSiblings()?has_content>
133 <#list lstCurrentHoldingInfo.getSiblings() as cur_lstCurrentHoldingInfo>
134 <tr class="row-data">
135 <td><#if (cur_lstCurrentHoldingInfo.txtStockName.getData())?? && (cur_lstCurrentHoldingInfo.txtStockName.getData()?string != "")>${cur_lstCurrentHoldingInfo.txtStockName.getData()}<#else>-</#if></td>
136 <td><#if (cur_lstCurrentHoldingInfo.txtQuantity.getData())?? && (cur_lstCurrentHoldingInfo.txtQuantity.getData()?number != 0) >${cur_lstCurrentHoldingInfo.txtQuantity.getData()}<#else>-</#if></td>
137 <td><#if (cur_lstCurrentHoldingInfo.txtBoughtPrice.getData())?? && (cur_lstCurrentHoldingInfo.txtBoughtPrice.getData()?number != 0) >${cur_lstCurrentHoldingInfo.txtBoughtPrice.getData()?number?string["#,###.00"]}<#else>-</#if></td>
138 <td><#if (cur_lstCurrentHoldingInfo.txtTotalCost.getData())?? && (cur_lstCurrentHoldingInfo.txtTotalCost.getData()?number != 0) >${cur_lstCurrentHoldingInfo.txtTotalCost.getData()?number?string["#,###.00"]}<#else>-</#if></td>
139 <td><#if (cur_lstCurrentHoldingInfo.txtCurrentPrice.getData())?? && (cur_lstCurrentHoldingInfo.txtCurrentPrice.getData()?number != 0) >${cur_lstCurrentHoldingInfo.txtCurrentPrice.getData()?number?string["#,###.00"]}<#else>-</#if></td>
140 <td><#if (cur_lstCurrentHoldingInfo.txtMarketValue.getData())?? && (cur_lstCurrentHoldingInfo.txtMarketValue.getData()?number != 0) >${cur_lstCurrentHoldingInfo.txtMarketValue.getData()?number?string["#,###.00"]}<#else>-</#if></td>
141 <td><#if (cur_lstCurrentHoldingInfo.txtGainLoss.getData())?? && (cur_lstCurrentHoldingInfo.txtGainLoss.getData()?number != 0) >${cur_lstCurrentHoldingInfo.txtGainLoss.getData()?number?string["#,###.00"]}<#else>-</#if></td>
142 <td><#if (cur_lstCurrentHoldingInfo.txtGainLossPercent.getData())?? && (cur_lstCurrentHoldingInfo.txtGainLossPercent.getData()?number != 0) >${cur_lstCurrentHoldingInfo.txtGainLossPercent.getData()}%<#else>-</#if></td>
143 <td><#if (cur_lstCurrentHoldingInfo.txtDividend.getData())?? && (cur_lstCurrentHoldingInfo.txtDividend.getData()?number != 0) >${cur_lstCurrentHoldingInfo.txtDividend.getData()}<#else>-</#if></td>
144 <td>
145 <#if (cur_lstCurrentHoldingInfo.txtTargetMin.getData())?? && (cur_lstCurrentHoldingInfo.txtTargetMin.getData()?number != 0) >${cur_lstCurrentHoldingInfo.txtTargetMin.getData()?number?string["#,###.00"]}<#else>-</#if>
146 <#if (cur_lstCurrentHoldingInfo.txtTargetMax.getData())?? && (cur_lstCurrentHoldingInfo.txtTargetMax.getData()?number != 0) > - ${cur_lstCurrentHoldingInfo.txtTargetMax.getData()?number?string["#,###.00"]}<#else>-</#if>
147 </td>
148 <td><#if (cur_lstCurrentHoldingInfo.txtStopLoss.getData())?? && (cur_lstCurrentHoldingInfo.txtStopLoss.getData()?number != 0) >${cur_lstCurrentHoldingInfo.txtStopLoss.getData()?number?string["#,###.00"]}<#else>-</#if></td>
149 </tr>
150 </#list>
151 </#if>
152 <tr>
153 <td colspan="11" class="section-header">Shares bought</td>
154 </tr>
155 <tr>
156 <td colspan="11">-</td>
157 </tr>
158 <tr>
159 <td colspan="11" class="section-header">Shares sold</td>
160 </tr>
161 <tr>
162 <td colspan="11">-</td>
163 </tr>
164 <tr>
165 <td class="section-header" colspan="5">Total dividend</td>
166 <td>
167 <#if (txtTotalDividend.getData())?? && txtTotalDividend.getData()?number != 0>
168 ${txtTotalDividend.getData()?number?string["#,###.00"]}
169 <#else>
170 -
171 </#if>
172 </td>
173 <td colspan="5"></td>
174 </tr>
175 <tr>
176 <td class="section-header" colspan="5">Realised profits/losses</td>
177 <td>
178 <#if (txtRealisedProfitsLoss.getData())?? && txtRealisedProfitsLoss.getData()?number != 0>
179 ${txtRealisedProfitsLoss.getData()?number?string["#,###.00"]}
180 <#else>
181 -
182 </#if>
183 </td>
184 <td colspan="5"></td>
185 </tr>
186 <tr>
187 <td class="section-header" colspan="5">Cash balance + dividend</td>
188 <td>
189 <#if (txtCashBalanceDividend.getData())?? && txtCashBalanceDividend.getData()?number != 0>
190 ${txtCashBalanceDividend.getData()?number?string["#,###.00"]}
191 <#else>
192 -
193 </#if>
194 </td>
195 <td colspan="5"></td>
196 </tr>
197 <tr class="last-row">
198 <td colspan="3" class="section-header">
199 <p>Portfolio returns</p>
200 <span class="notes"
201 >*Assuming no brokerage, fees and duties paid</span
202 >
203 </td>
204 <td>
205 <p>
206 <#if (groupPortfolioReturns.txtPRInitialCapital.getData())?? && groupPortfolioReturns.txtPRInitialCapital.getData()?number != 0>
207 ${groupPortfolioReturns.txtPRInitialCapital.getData()?number?string["#,###.00"]}
208 <#else>
209 -
210 </#if>
211 </p>
212 <span class="notes">(Initial Capital)</span>
213 </td>
214 <td colspan="1"></td>
215 <td colspan="1">
216 <p>
217 <#if (groupPortfolioReturns.txtPRMarketValue.getData())?? && groupPortfolioReturns.txtPRMarketValue.getData()?number != 0>
218 ${groupPortfolioReturns.txtPRMarketValue.getData()?number?string["#,###.00"]}
219 <#else>
220 -
221 </#if>
222 </p>
223 </td>
224 <td colspan="1">
225 <p>
226 <#if (groupPortfolioReturns.txtPRGainLoss.getData())?? && groupPortfolioReturns.txtPRGainLoss.getData()?number != 0>
227 ${groupPortfolioReturns.txtPRGainLoss.getData()?number?string["#,###.00"]}
228 <#else>
229 -
230 </#if>
231 </p>
232 </td>
233 <td colspan="1">
234 <p>
235 <#if (groupPortfolioReturns.txtPRGainLossPercent.getData())?? && groupPortfolioReturns.txtPRGainLossPercent.getData()?number != 0>
236 ${groupPortfolioReturns.txtPRGainLossPercent.getData()}%
237 <#else>
238 -
239 </#if>
240 </p>
241 </td>
242 <td colspan="3"></td>
243 </tr>
244 </tbody>
245
246 <tfoot>
247 <tr>
248 <td colspan="3" class="section-header">
249 <p>FBM KLCI (YTD)</p>
250 </td>
251 <td>
252 <p>
253 <#if (Field54139138.txtFBMInitialCapital.getData())?? && Field54139138.txtFBMInitialCapital.getData()?number != 0>
254 ${Field54139138.txtFBMInitialCapital.getData()?number?string["#,###.00"]}
255 <#else>
256 -
257 </#if>
258 </p>
259 <span class="notes">(As at 31 Dec 2023)</span>
260 </td>
261 <td colspan="1"></td>
262 <td colspan="1">
263 <p>
264 <#if (Field54139138.txtFBMMarketValue.getData())?? && Field54139138.txtFBMMarketValue.getData()?number != 0>
265 ${Field54139138.txtFBMMarketValue.getData()?number?string["#,###.00"]}
266 <#else>
267 -
268 </#if>
269 </p>
270 </td>
271 <td colspan="1">
272 <p>
273 <#if (Field54139138.txtFBMGainLoss.getData())?? && Field54139138.txtFBMGainLoss.getData()?number != 0>
274 ${Field54139138.txtFBMGainLoss.getData()?number?string["#,###.00"]}
275 <#else>
276 -
277 </#if>
278 </p>
279 </td>
280 <td colspan="1">
281 <p>
282 <#if (Field54139138.txtFBMGainLossPercent.getData())?? && Field54139138.txtFBMGainLossPercent.getData()?number != 0>
283 ${Field54139138.txtFBMGainLossPercent.getData()}%
284 <#else>
285 -
286 </#if>
287 </p>
288 </td>
289 <td colspan="3"></td>
290 </tr>
291 </tfoot>
292 </table>
293 </div>
294</div>
295<div class="c003-table-container-bottom-content">
296<p class="citing">Source: AmInvestment Bank, www.amequities.com.my</p>
297<p class="date">
298 <#if .vars["reserved-article-modified-date"].data??>
299 <#assign createDate = .vars["reserved-article-create-date"].data?date("EEE, dd MMM yyyy HH:mm:ss Z")>
300 ${createDate?string("dd MMMM yyyy")}
301 </#if>
302</p>
303<#if (txtRemarks.getData())??>
304 <p class="remarks">
305 <span>Remarks:</span> ${txtRemarks.getData()}
306 </p>
307</#if>
308</div>
Please login to view the latest report