| stevehopwoodforex.com https://www.stevehopwoodforex.com/phpBB3/ Print view |
|
| Coding for beginners - this is how Steve started https://www.stevehopwoodforex.com/phpBB3/viewtopic.php?t=301 |
Page 3 of 7 |
| Author: | SteveHopwood [ Tue Apr 24, 2012 8:17 pm ] |
| Post subject: | Re: Coding for beginners - this is how Steve started |
Better out than in. As it happens, I first met this problem over 30 years ago programming in BBC Basic for my first pc. I have not met it lately (i.e. in the last 25 years) so it looks as though those infantile cretins at Empty4 have managed to reinvent the bent wheel. So, how about my original solution of turning doubles into strings and comparing the strings? |
|
| Author: | rob2360 [ Tue Apr 24, 2012 8:37 pm ] |
| Post subject: | Re: Coding for beginners - this is how Steve started |
Problem with double to string conversion is it is pretty cpu intensive; although most Empty4 programming is not optimised for speed! The old fashioned way of solving the problem was to do something like if (MathAbs( x - y) < 0.001) { }.... where 0.001 was your accuracy. Note the MathAbs function is just there so to make sure you don't care whether x or y is the larger value... |
|
| Author: | garyfritz [ Tue Apr 24, 2012 8:42 pm ] |
| Post subject: | Re: Coding for beginners - this is how Steve started |
Well, it should work. But it seems like a pretty convoluted and high-overhead way to do something pretty simple. The (A-B) < ReallySmall approach works fine (especially with the scaling addition) and is very simple. You could encapsulate it into your own CloseEnough() function and forget about the details. (BTW I realized I forgot something -- it should be MathAbs(A-B) < ReallySmall.) (Whoops, rob2360 beat me to it. And the Empty4 boys are not alone in this. It's the standard way that most languages work. I've only come across 1 or 2 languages (out of many dozens) in 35 years that tried to handle it intelligently. (I don't *think* any of the common languages today do anything but simple equality tests, though it's easy to extend C++/C#/Java/etc to do so.) |
|
| Author: | SteveHopwood [ Tue Apr 24, 2012 9:48 pm ] |
| Post subject: | Re: Coding for beginners - this is how Steve started |
Hehe. I am just a pianist who stumbled across programming by accident. When geeks get going properly, I retire and leave them to it. For now, I shall use CompareDoubles(). As it happens, I am doing battle with this in a private (but soon to be public due to the generosity of the sponser) grid trading manager. I am waiting to see if the solution solves the problem. Described briefly, the ea modifies the stop loss and take profit of pending trades to reflect those of an open trade. The ea kept on insisting that the various sl/tp's were not equal even though they are. These posts cropped up at just the right time. I will let you know if CompareDoubles() does the job. The member has not whinged for a while, so it is looking promising. |
|
| Author: | tiberium [ Sat Apr 28, 2012 1:43 am ] |
| Post subject: | Re: Coding for beginners - this is how Steve started |
Thanks Steve this forum especially almost threads in this forum very helpful for newbie trader like me that want to learn how to coding in Empty4 (maybe in the future in MT5 and another programmable trading platform |
|
| Author: | SteveHopwood [ Sat Apr 28, 2012 8:14 am ] |
| Post subject: | Re: Coding for beginners - this is how Steve started |
Being called here to read tiberium's post (welcome, tiberium) caused me to re-read this and Rob's post. This is clearly a better solution than the CompareDoubles() thingy and I shall adopt it. No idea why I did not get this first time around - must have been tired. Cheers. |
|
| Author: | traderduke [ Thu Jul 12, 2012 2:11 pm ] |
| Post subject: | Re: Coding for beginners - this is how Steve started |
Can anybody tell me the reason for a good run using int start() { // Only run once per completed bar L-118 if(timeprev==Time[0]) return(0); timeprev = Time[0]; as opposed to not in int start() { // Only run once per completed bar L-118 // if(timeprev==Time[0]) return(0); // timeprev = Time[0]; I see the different entries but WHY?? |
|
| Author: | garyfritz [ Thu Jul 12, 2012 2:17 pm ] |
| Post subject: | Re: Coding for beginners - this is how Steve started |
I have no idea what the EA is doing or how it's good vs. not. But the difference between those two code snippets is that the first one runs the rest of the start() code only once per completed bar, whereas the second one runs all the start() code on every tick. You'd have to figure out how that changes the EA behavior. |
|
| Author: | traderduke [ Thu Jul 12, 2012 10:18 pm ] |
| Post subject: | Re: Coding for beginners - this is how Steve started |
Gary Thank for that explanation. The "second one runs all the start() code on every tick" seems to give the closest backtest results to forward testing.
|
|
| Author: | f-trader [ Thu Jul 12, 2012 10:42 pm ] |
| Post subject: | Re: Coding for beginners - this is how Steve started |
I had the same problem. Compared 2 doubles which were Normalized before ( NormalizeDouble ) and went almost crazy because they should have been identical but the if( a == b) resulted in false. hanover helped me. Now I use his MathFix function. And all is fine. Example: Double A; Double B; I compare them like this: Code: Select all Code: Select all |
|
| All times are UTC | Page 3 of 7 |
|
Powered by phpBB® Forum Software © phpBB Limited |
|