|
Reliability of the Historical Tester. |
Mccluer840EU
|
Post subject: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Sat 23 Nov, 2013, 23:14
|
|
User rating: 1
Joined: Mon 21 Jan, 2013, 09:11 Posts: 51 Location: New ZealandNew Zealand
|
Hi. I have a very simple strategy, which involves 3 SMAs, usually set at sma5, sma100 and sma200. The stategy is to BUY when sma5 is increasing and the 3 smas are in order, that is sma5>sma100>sma200.
If sma5 turns and starts decreasing, the position should be closed.
A similar situation applies for a SELL, just the mirror image. Developing the strategyonly required a few IF blocks.
After running the strategy and comparing the results with what can be seen directly from the chart with the indicators, seems to show a significant difference, in fact they can be poles apart.
I'm a novice in this, but the conclusion to be drawn is that either the strategy formulation is wrong or the Historical Tester is not operating correctly. I would be pleased for someone to comment on this, perhaps show me where I have got it wrong, or where the system may be at fault.
I have attached a copy of the strategy and a screen shot of a chart with the 3 indicators.
Calpro.
Attachments: |
SMAs.jpg [185.53 KiB]
Downloaded 760 times
|
VJF_SMA_12_Nov_13.vfs [44.47 KiB]
Downloaded 417 times
|
DISCLAIMER: Dukascopy Bank SA's waiver of responsability - Documents, data or information available on
this webpage may be posted by third parties without Dukascopy Bank SA being obliged to make any control
on their content. Anyone accessing this webpage and downloading or otherwise making use of any document,
data or information found on this webpage shall do it on his/her own risks without any recourse against
Dukascopy Bank SA in relation thereto or for any consequences arising to him/her or any third party from
the use and/or reliance on any document, data or information found on this webpage.
|
|
|
|
|
 |
amine_chourou
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Mon 25 Nov, 2013, 15:20
|
|
Visual JForex expert at Dukascopy |  |
User rating: 288
Joined: Thu 18 Apr, 2013, 09:26 Posts: 1496 Location: Switzerland, Geneva
|
Hi,
I've made couple of changes in your strategy so that it cope with your conditions: - I changed the SL level to 100 for testing purpose, feel free to set it as per your needs. - I've included triggers (assign blocks with Boolean variables) so that the strategy will enter the market once and wait till the position meets SL/TP or the SMA 5 reverse its trend.
I've only tested the strategy over couple of weeks, re-testeting is mandatory to be 100% sure of its behavior.
Hope this helps... Amine
Attachments: |
VJF_SMA_12_Nov_13_modified.vfs [51.81 KiB]
Downloaded 473 times
|
DISCLAIMER: Dukascopy Bank SA's waiver of responsability - Documents, data or information available on
this webpage may be posted by third parties without Dukascopy Bank SA being obliged to make any control
on their content. Anyone accessing this webpage and downloading or otherwise making use of any document,
data or information found on this webpage shall do it on his/her own risks without any recourse against
Dukascopy Bank SA in relation thereto or for any consequences arising to him/her or any third party from
the use and/or reliance on any document, data or information found on this webpage.
|
|
|
|
|
 |
Mccluer840EU
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Tue 26 Nov, 2013, 09:40
|
|
User rating: 1
Joined: Mon 21 Jan, 2013, 09:11 Posts: 51 Location: New ZealandNew Zealand
|
Hi Amine. Thank you for your help, and I'm most impressed. I feel though that there is a layer of information on how to use Visual JKorex that aught to be made readily available, preferably as a manual. Perhaps there is already one, I just have not found it. The webinars that seem to come up from time to time are at rather uncivilised times for this side of the globe.
There are a couple of question that I would like to ask about the strategy. 1. What is the function of the separate On-Tick section? At some stage while testing I disconnected it. With the On-Tick disconnected I have been getting consistent and significant profits. With On-Tick connected I was getting consistently small but negative results. I presume that section can be dispensed with?
2. There was an anomalous result which you may be able to explain. Using Daily, Last Month's data, I get 260 pips, with just one Long trade. Using Daily, last 3 months data, I get 525 pips, with just one trade. That seems a little odd, does is not?
3. Can these strategies now be run on live data with real money? A few months ago they were to be regarded as testing material only, not to be used live with real money.
Calpro
|
|
|
|
 |
Heruar
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Tue 26 Nov, 2013, 16:17
|
|
User rating: 11
Joined: Tue 05 Feb, 2013, 10:39 Posts: 104 Location: Romania, Iasi
|
Hi Mccluer840EU , I would recommend using strategies in demo account and run them for a while too see how they behave. After at least a week of continuous testing you may consider using it on the real account. Just don't want you to lose your money  Test test test.... but not in historical tester. Demo account with strategy running in real time is best. Analyze everything and then make a decision  Hope this helps. Cheers
|
|
|
|
 |
Mccluer840EU
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Tue 26 Nov, 2013, 21:47
|
|
User rating: 1
Joined: Mon 21 Jan, 2013, 09:11 Posts: 51 Location: New ZealandNew Zealand
|
Thank you for that advice, its something I need to be reminded about constantly.
But can I put this question to you again. What is the function of the separate On-Tick section? At some stage while testing I disconnected it. With the On-Tick disconnected I have been getting consistent and significant profits. With On-Tick connected I was getting consistently small but negative results. I presume that section can be dispensed with?
Thanks, Calpro
|
|
|
|
 |
Heruar
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Tue 26 Nov, 2013, 22:27
|
|
User rating: 11
Joined: Tue 05 Feb, 2013, 10:39 Posts: 104 Location: Romania, Iasi
|
Hi there , I actually copied the strategy today, but unfortunately I've been really busy and haven't got the chance to look at it. I'll get back to you tomorrow after I study it. After 6PM (GMT+2)  Be patient  Cheers. Edit: I looked over the code a little... It's quite simple to read, but a lot harder to explain(not really hard, but long explanation). So we're back with the "tomorrow" deadline  C ya tomorrow.
|
|
|
|
 |
amine_chourou
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Wed 27 Nov, 2013, 00:41
|
|
Visual JForex expert at Dukascopy |  |
User rating: 288
Joined: Thu 18 Apr, 2013, 09:26 Posts: 1496 Location: Switzerland, Geneva
|
Hello,
1. What is the function of the separate On-Tick section?
OnTick start point is more sensitive than OnCandle or OnTradeEvent, as it is based on tick prices. When you want to have a check/actions to be done in a dynamic way you may use this start point but it has to be well specified: Let's consider the following example: If your strategy is based on candle with several conditions and trading actions, if you you use Ontick start point with lastTradeEvent variable (let's say "Trade Message Position: State"for instance) your strategy will look for the status of the last trade before even a trade was made. As the check is tick based, the system will keep checking on every single tick for any trade status while no position is submitted yet. In most cases it will return an error message with "Null".
At some stage while testing I disconnected it. With the On-Tick disconnected I have been getting consistent and significant profits. With On-Tick connected I was getting consistently small but negative results. I presume that section can be dispensed with?
As I said, I did not fully test the strategy and most of our tests are purely technical and functional (No guarantee for the strategy performance). If the strategy is more profitable without the "Tick" section, this basically means that waiting for an exit with TP is better than an exit when the short EMA reverses.
2. There was an anomalous result which you may be able to explain. Using Daily, Last Month's data, I get 260 pips, with just one Long trade. Using Daily, last 3 months data, I get 525 pips, with just one trade. That seems a little odd, does is not?
Did you get these results without the OnTick section ? IF nor the TP@700pips or SL @100pips were reached, it sounds okay for me. Maybe you could explain more why it sounds odd for you.
3. Can these strategies now be run on live data with real money?
Heruar is right ! Don't give up testing until you're almost sure of your results.
|
|
|
|
 |
Heruar
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 2
|
Posted: Wed 27 Nov, 2013, 18:35
|
|
User rating: 11
Joined: Tue 05 Feb, 2013, 10:39 Posts: 104 Location: Romania, Iasi
|
Very well written Amine Chourou. As I promised, I come back with a long explanation of the strategy.  I like to explain things to others in detail so there is no confusion.  OnCandle block (I'll explain block by block 1 to ... end): 1. Filter for the right instrument (only checks values for that instrument) 2. Filter for period (Only checks the specified period to move on) 3. SMA 5 candle indicator with shift 0 (Current candle) - returns variable sma5Curr 4. SMA 5 candle indicator with shift 1 (Previous candle) - returns variable sma5Prev 5. SMA 100 candle indicator with shift 0 - returns variable smaMidCurr 6. SMA 200 candle indicator with shift 0 - returns variable smaSlowCurr 7. Check if current sma 5 is higher or lower than previous sma 5. Now the things go a little tricky. The next if's are reversed. Don't worry it's just a visual thing. (as in things you see and not Visual JForex  ). You can rearrange them to see it better. Left to left and right to right and 1 under the other in order to see it better. If you did that here's the rest: 8.left - If sma 5 current is lower than sma 5 previous(block 7 check) then, if sma 5 current is also lower than sma 100 then... 9.left - If sma 5 current is also lower than sma 200 then... 10.left - If Go_short (boolean variable that can be true or false) is true then ... Boolean variable on first use is by default false but here it was specified and initial value of true, otherwise it wouldn't do anything in block 10.left or right thus blocking the strategy. 11.left - If the above conditions are met, in that order, then open at market Sell with the default variables (SL, TP, Volume... ) 12.left - After the trade was submitted successfully, the boolean variable(Go_short in this case) reverses and takes the value "false". This will make it in the future so that it will always alternate between 1 short order and 1 long. Always !  13.left - Go_long takes value of true (although it already has this value at first, it makes sure in the future, when it will be false it returns to true) The last two variables (the boolean ones) make a cycle between buy and sell (always go 1 long and 1 short). I hope you understand how this works  8.right - If sma 5 current is higher than sma 5 previous(block 7 check) then, if sma 5 current is also higher than sma 100 then... 9.right - If sma 5 current is also higher than sma 200 then... 10.right - If Go_long is true then ... 11.right - If the above conditions are met, in that order, then open at market Buy with the default variables (SL, TP, Volume... ) 12.right - After the trade was submitted successfully, the boolean variable(Go_long in this case) reverses and takes the value "false". This will make it in the future so that it will always alternate between 1 short order and 1 long. Always !  13.right - Go_short takes value of true (thus completing the cycle) Now, the above line from onCandle only runs once every hour (It runs more than once but it stops at the period filter). Here's the onTick line: 1. Multiple action - this runs multiple actions in order from left to right (not at the same time ! ) 2.left - Action 1 - If there is a buy position open then... 3.left - If sma 5 current is lower than sma 5 previous then... (this checks if the sma 5 reverses) 4.left - Close all open Buy positions 2.right - Action 2 - If there is a sell position open, then... 3.right - If sma 5 current is higher than sma 5 previous then... (this checks if the sma 5 reverses) 4.right - Close all open Sell positions Well, this is all.  Feel free to ask anything that you do not understand. Cheers
|
|
|
|
 |
Heruar
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 1
|
Posted: Wed 27 Nov, 2013, 18:37
|
|
User rating: 11
Joined: Tue 05 Feb, 2013, 10:39 Posts: 104 Location: Romania, Iasi
|
I hope you didn't get bored reading everything.  If you look carefully at a strategy you can understand how it works and even improve it easily. All you need to do is be patient, focused and determined  Cheers.
|
|
|
|
 |
dirk_r1
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Thu 28 Nov, 2013, 08:37
|
|
Visual JForex expert at Dukascopy |  |
User rating: 27
Joined: Fri 03 May, 2013, 18:25 Posts: 366 Location: GermanyGermany
|
|
|
|
 |
Mccluer840EU
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Thu 28 Nov, 2013, 08:59
|
|
User rating: 1
Joined: Mon 21 Jan, 2013, 09:11 Posts: 51 Location: New ZealandNew Zealand
|
Thank you, I have a much better understanding of how this program works. Yes, there are a few points I would like to make, or questions to put to you.
1. For a short trade sma5 must be < sma100, and sma100 must be < sma200, as well as sma5 decreasing. But at lines 8.left and 9.left you wrote that sma5 < sma100 and sma5 < sma200. But this is not the same as the above because sma200 could be < sma100 but still > sma5.
2. There is a part of the strategy which I find not to be in accord with the basic concept of how I thought it should work. At line 12.left you say the variable Go_Short is reversed from True to False after a short trade, and at the same time Go_Long is set to True. So there will be a Long before the next Short trade, that is, they alternate. This is not what I had in mind. Imagine an extended downward trend, and a Short trade is open. Any minor fluctuation in which sma5 increased would cause the trade to be closed. The minor upbeat movement in sma5 would not trigger a Long trade because the SMA's would not be in "proper order" for a Long trade to be opened. And although the down trend may continue for a month or longer, there would be no more Short trades. That is not the way it should operate. As soon as sma5 starts decreasing again, another Short trade should be opened. The question is, should the Assign blocks be removed?
3. The On-Tick section is also not in accord with how I thought the strategy should work. I want the SMA's to be checked after 1 hour, or 1 day but not after every tick. That is I don't want the strategy to be sensitive to the noise. Do I just remove the On_Tick section?
Referring to Amine's note, you ask why I thought it odd that Using Daily, Last month, and I get 260 pips, 1 Long trade, and then Using Daily, last 3 months, and I get 525 pips, 1 Long trade.
I am presuming that the Last Month is included in the Last 3 Months. It is possible that the up trend started in the second month and continued on into the last month. I suppose I presumed that if there was only one Long trade in both the Last Month and in the Last 3 Months it would have been the same.
There was at some stage more detail given in the Results, detail specifying times of all the trades, but that seems to have been removed, for whatever reason. More detail could be useful.
Calpro
|
|
|
|
 |
Heruar
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Thu 28 Nov, 2013, 12:09
|
|
User rating: 11
Joined: Tue 05 Feb, 2013, 10:39 Posts: 104 Location: Romania, Iasi
|
Hi there ,
First I'd like to say that, what I did was describe the strategy made/modified by Amine. That doesn't mean the strategy meets your exact criteria. I'll try to modify it later if you'd like, but I'll be needing your exact parameters. Now to answer your questions:
1. At 8.left and 9.left there are 2 if's that compare sma 5 to sma 100 and sma 200. There is no comparison between sma 100 and 200 so we don't know if 1 is larger than the other. Another "if" would solve that.
2. I believe that was added by Amine aswell, but can be easily removed along with the assign's after the market order is placed. That would cancel the rule of 1 short and 1 long cycle.
3. The on tick section is necessary for the "If sma5 turns and starts decreasing, the position should be closed", but I think it should be re-written differently. Unfotunately I don't have an ideea right now to give you an optimal solution. I'll have to think about it for a little while.
Regarding your first post: I personally don't really trust hystorical tester and as I said to some other community member, I'd rather check everything manually on the chart.
|
|
|
|
 |
Heruar
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Thu 28 Nov, 2013, 14:29
|
|
User rating: 11
Joined: Tue 05 Feb, 2013, 10:39 Posts: 104 Location: Romania, Iasi
|
I checked the strategy. I'm at work and don't have much time... The variables checked on the onTick flow are defined in the onCandle flow, so the value is calculated hourly. The onTick flow is only used for the check and it doesn't make any difference because for 1 hour those variables have the same value. So I guess it does what you wanted after all  In conclussion, I think the check for the sma5 trend reversal should be reconsidered. Maybe find a better trigger for the order close function. If I get any other idea I'll post it here. For now you can make the changes I discussed in my previous post to get the strategy to the desired point. Cheers
|
|
|
|
 |
Mccluer840EU
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Sat 30 Nov, 2013, 04:36
|
|
User rating: 1
Joined: Mon 21 Jan, 2013, 09:11 Posts: 51 Location: New ZealandNew Zealand
|
Hi and thank you again. For the last few months I've been flying blind, so you will understand why I really appreciate your help.
1. Your point 1, that there is no comparisons between sma100 and sma200. Looking at the blocks, the first IF compares sma5Curr and sma5Prev. The second IF block compares sma5 and sma100, and the third IF compares sma100 and sma200. That is, on the Sell side, if sma5 < sma100 and sma100 < sma200 then Sell (if sma5 decreasing) and that is equivalent to sma5 < sma100 < sma200. Please correct me if I have misinterpreted this. Certainly the intention is sma5 < sma100 < sma200.
2. I have just run the Historical Tester 3 times with identical parameters, using Daily and Last 3 Months, but changing the strategy by removing the Assign blocks and tge OnTick section. (a) Assign blocks and OnTick both connected. Results; 258pips, one Long, no Shorts, profit factor 0
(b) Assign blocks connected, OnTick disconnected. Results; 525 pips, one Long, no Shorts, pf 0.
(c) Both Assigns and Ontick disconnected. Results; 6243 pips, 26 Long, 23 Longs positive, 3 negative, no Shorts, pf 151. The question is, why no Shorts? Could it be there was an unrelenting up trend for the 3 months?
Calpro
|
|
|
|
 |
Heruar
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Sat 30 Nov, 2013, 10:04
|
|
User rating: 11
Joined: Tue 05 Feb, 2013, 10:39 Posts: 104 Location: Romania, Iasi
|
Hi , I need to apologize. It seems I have made a tiny mistake.  The 9.left and 9.right do compare sma 100 with sma 200. I don't know how I miss-read that. I'm really sorry for confusing you. I checked a graph on daily for the past 3 months on EUR/USD and with you settings the sell conditions are never met. The trend was mostly up. (see picture below) With your conditions the Sell condition was only met at the end of June this year and in August last year.  That's as far as I checked. Now, logically speaking, the strategy should work exactly the way it's represented on my chart. In historical tester it seemed to work fine. I hope THIS helps  Cheers. 
Attachments: |
VJF_SMA_12_Nov_13_modified2.vfs [47.23 KiB]
Downloaded 424 times
|
3 month daily chart.jpg [270.9 KiB]
Downloaded 874 times
|
DISCLAIMER: Dukascopy Bank SA's waiver of responsability - Documents, data or information available on
this webpage may be posted by third parties without Dukascopy Bank SA being obliged to make any control
on their content. Anyone accessing this webpage and downloading or otherwise making use of any document,
data or information found on this webpage shall do it on his/her own risks without any recourse against
Dukascopy Bank SA in relation thereto or for any consequences arising to him/her or any third party from
the use and/or reliance on any document, data or information found on this webpage.
|
|
|
|
|
 |
Mccluer840EU
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Wed 04 Dec, 2013, 11:19
|
|
User rating: 1
Joined: Mon 21 Jan, 2013, 09:11 Posts: 51 Location: New ZealandNew Zealand
|
Hi Heruar. You said several posts ago that you would think of a better way of closing the trades, I wonder how that is going now. I am particularly interested now because the strategy, which I will attached below, is not closing as it should. It also has another aspect that I do not want.
I ran the strategy on the Historical Tester, using Daily and Last 3 months. By using the pause button and recording the pip changes and the times when those changes occurred, I found that 1. The strategy was not closing the trades, even when the sma5 was decreasing for several days. The IF block, comparing sma5Curr and sma5Prev, is not, or does not seem to be operating.
2. The candlePeriod is set at Daily. I presumed that at the start of the day the sma's would be checked for a trade to be opened or closed according to the conditions. It seemed to me that the pip count was changing any time through the day, and not just at the start of the day. By setting the candleperiod to Daily, does that not mean checks would be made just once a day? If I set it to Hourly, would the checks not be done on the hour?
Can you help me with this please?
Ted
Attachments: |
VJF_SMA_2_Dec_13.vfs [47.33 KiB]
Downloaded 494 times
|
DISCLAIMER: Dukascopy Bank SA's waiver of responsability - Documents, data or information available on
this webpage may be posted by third parties without Dukascopy Bank SA being obliged to make any control
on their content. Anyone accessing this webpage and downloading or otherwise making use of any document,
data or information found on this webpage shall do it on his/her own risks without any recourse against
Dukascopy Bank SA in relation thereto or for any consequences arising to him/her or any third party from
the use and/or reliance on any document, data or information found on this webpage.
|
|
|
|
|
 |
Heruar
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Wed 04 Dec, 2013, 22:22
|
|
User rating: 11
Joined: Tue 05 Feb, 2013, 10:39 Posts: 104 Location: Romania, Iasi
|
Mccluer840EU wrote: Hi Heruar. You said several posts ago that you would think of a better way of closing the trades, I wonder how that is going now. I am particularly interested now because the strategy, which I will attached below, is not closing as it should. It also has another aspect that I do not want.
I ran the strategy on the Historical Tester, using Daily and Last 3 months. By using the pause button and recording the pip changes and the times when those changes occurred, I found that 1. The strategy was not closing the trades, even when the sma5 was decreasing for several days. The IF block, comparing sma5Curr and sma5Prev, is not, or does not seem to be operating.
2. The candlePeriod is set at Daily. I presumed that at the start of the day the sma's would be checked for a trade to be opened or closed according to the conditions. It seemed to me that the pip count was changing any time through the day, and not just at the start of the day. By setting the candleperiod to Daily, does that not mean checks would be made just once a day? If I set it to Hourly, would the checks not be done on the hour?
Can you help me with this please?
Ted Hi Mccluer840EU , Sorry I haven't had the time to answer you sooner. 1. My suggestion is to run the strategy on a demo account for a while and see what it does. Check opened/closed positions for accuracy with your strategy triggers. As I said before, I don't really trust the historical tester and do the calculations and testing on the graph manually. 2. To me, the logic of the strategy is good. If it worked the way it was planned it would be a great long term strategy. Unfortunately, the reasons why it's not working in historical tester are out of my reach. My own strategy does some crazy things sometimes, that I can't explain. What you can do, to eliminate some causes is: - Copy source code from Visual JForex to a java file and run it in the historical tester of the JForex platform. - Run it on demo account in real time to see how it behaves for at least 2 weeks (could take longer) - Hope a developer can check more background data on your strategy and see if it's working properly (could be a bug somewhere). In the end, I think Visual Jforex is a great platform for developing automated strategies but it seems barely out of Alpha Testing to me(No offence Developers  ). It needs a lot of work to get it to at least a semi-professional level. Just my 2 cents. Cheers.
|
|
|
|
 |
amine_chourou
|
Post subject: Re: Reliability of the Historical Tester. |
Post rating: 0
|
Posted: Fri 06 Dec, 2013, 11:29
|
|
Visual JForex expert at Dukascopy |  |
User rating: 288
Joined: Thu 18 Apr, 2013, 09:26 Posts: 1496 Location: Switzerland, Geneva
|
Hello there,
I've made couple of changes to the strategy for testing purpose, I'm not sure if it will meet your criteria but it might give you some ideas specifically on the order closing process. I've removed TP and SL only for testing the feature of closing all open positions if the SMA5 turns (down > close Longs | up > close shorts ) Indeed, it has to be fine tuned if you need to adjust your TP and SL order with regards to this changes
Hope this helps,
Amine
Attachments: |
Mccluer_v2.vfs [47.48 KiB]
Downloaded 457 times
|
DISCLAIMER: Dukascopy Bank SA's waiver of responsability - Documents, data or information available on
this webpage may be posted by third parties without Dukascopy Bank SA being obliged to make any control
on their content. Anyone accessing this webpage and downloading or otherwise making use of any document,
data or information found on this webpage shall do it on his/her own risks without any recourse against
Dukascopy Bank SA in relation thereto or for any consequences arising to him/her or any third party from
the use and/or reliance on any document, data or information found on this webpage.
|
|
|
|
|
 |
|
Pages: [
1
]
|
|
|
|
|