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.

Une erreur s'est produite lors du traitement du modèle.
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> 
Download

DISCLOSURE AND DISCLAIMER

This report is prepared for information purposes only and it is issued by AmInvestment Bank Berhad (“AmInvestment”) without regard to your individual financial circumstances and objectives. Nothing in this report shall constitute an offer to sell, warranty, representation, recommendation, legal, accounting or tax advice, solicitation or expression of views to influence any one to buy or sell any real estate, securities, stocks, foreign exchange, futures, investment or other products. AmInvestment recommends that you evaluate a particular investment or strategy based on your individual circumstances and objectives and/or seek financial, legal or other advice on the appropriateness of the particular investment or strategy.
The information in this report was obtained or derived from sources that AmInvestment believes are reliable and correct at the time of issue. While all reasonable care has been taken to ensure that the stated facts are accurate and views are fair and reasonable, AmInvestment has not independently verified the information and does not warrant or represent that they are accurate, adequate, complete or up-to-date and they should not be relied upon as such. All information included in this report constitute AmInvestment’s views as of this date and are subject to change without notice. Notwithstanding that, AmInvestment has no obligation to update its opinion or information in this report. Facts and views presented in this report may not reflect the views of or information known to other business units of AmInvestment’s affiliates and/or related corporations (collectively, “AmBank Group”).
This report is prepared for the clients of AmBank Group and it cannot be altered, copied, reproduced, distributed or republished for any purpose without AmInvestment’s prior written consent. AmInvestment, AmBank Group and its respective directors, officers, employees and agents (“Relevant Person”) accept no liability whatsoever for any direct, indirect or consequential losses, loss of profits and/or damages arising from the use or reliance of this report and/or further communications given in relation to this report. Any such responsibility is hereby expressly disclaimed.
AmInvestment is not acting as your advisor and does not owe you any fiduciary duties in connection with this report. The Relevant Person may provide services to any company and affiliates of such companies in or related to the securities or products and/or may trade or otherwise effect transactions for their own account or the accounts of their customers which may give rise to real or potential conflicts of interest. This report is not directed to or intended for distribution or publication outside Malaysia. If you are outside Malaysia, you should have regard to the laws of the jurisdiction in which you are located. If any provision of this disclosure and disclaimer is held to be invalid in whole or in part, such provision will be deemed not to form part of this disclosure and disclaimer. The validity and enforceability of the remainder of this disclosure and disclaimer will not be affected.