[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: Brain fried, How do I plot a zero line on my MACD



PureBytes Links

Trading Reference Links

Hello,

If only AFL formula is written correctly and in optimum way
(i.e. using array processing only and not re-doing the same calculation
more than once), its speed is the same as compiled C/C++ code.
The overhead of AFL parsing is less than 0.1% when arrays are large
(like 100000 bars in your example)

Best regards,
Tomasz Janeczko
amibroker.com


Dennis Brown wrote:
> Hi Paul,
>
> Thanks for your comments.  A 100 fold speed improvement in processing  
> 100,000 bars for a backtest environment would indeed be nice.   
> However, I doubt it could be made more than 10 times faster, which  
> would still be nice.  I hear what you are saying: just write my  
> algorithms in C++ and forget about AFL for anything other than  
> housekeeping.  This may be a valid solution for a production system,  
> or doing certain time consuming algorithms, but I did not buy  
> Amibroker so that I could learn to code my systems in C++, I bought it  
> so I could code them in a higher level array language.  One  
> development platform only please.  (Besides, if I was going to write  
> everything myself, I would throw away XP and do it all in OS X.  I  
> don't like MS software at all -- I only barely tolerate XP so I can  
> run AB).  My system is about 8500 lines of AFL source code.  Less than  
> half of that is my actual algorithms working on arrays.  The rest is  
> used to make AB into a systems development platform the way I like  
> it.  I only have one chart and one ticker that I use.  I only run an  
> indicator for trading.  Each system has about 1000 parameters saved on  
> disk.  Having everything in readily available source for editing and  
> running as an interpreter (AFL) makes it much easier for me to debug  
> and maintain the system.  It is still in development, (even though I  
> am trading with it now), and it will probably be in development for  
> years to come.  Just because it is possible to write everything in C++  
> does not mean that it is an excuse for not having good support for  
> better low level functionality in AFL for able programmers.  However,  
> I do have some very specialized algorithms for processing geometry  
> that would make sense to put into a DLL for speed purposes -- once I  
> am happy with the prototype AFL code.  I also have some different  
> kinds of filters that could be turned into DLLs for speed.  However,  
> these would only improve speed by 10-20% at most.  I don't calculate  
> things more often than needed, but as you say I end up with a lot of  
> arrays in the process of combining multiple systems into a single  
> one.  My needs are straight forward, but the thread has become a  
> sounding board for different people that see things in a different  
> light.  It has made for a confusing jumble to try to follow, and  
> should have been spawned into several more threads.  My brain was  
> fried when I started it, but I am fully recovered at this point.  Oh  
> well, thats life on the big board.  LOL
>
> BR,
> Dennis
>
>
> On Jun 30, 2009, at 10:44 PM, Paul Ho wrote:
>
>   
>> Dennis
>> The discussion seems to have shifted towards having AB allowing a  
>> more flexible regime in SBR from some brain fried topics in order to  
>> solve quite a specific situation that you have.
>> I think your problem can be solved right now if you looked at it  
>> from a memory managment and performance perspective.
>> Lets take 200000 bars as an example, 200K bars of a single array is  
>> 800K bytes, not very much. but a 100 of them will take 80M. it  
>> starts to mount up. In afl, unless you are very careful, you will  
>> easily doing a 100 array processings with a few lines here and  
>> there. secondly, you only need to do it once, I dont know if it is  
>> once a day, once in awhile..... but you dont do it very often.
>> AFL was designed so that users dont have to worry anything about  
>> memory mangement, if an user wants the capability to manage the  
>> resource being used for a specific situation. then dll is the  
>> answer. In dll, you will have complete control how much and in what  
>> way memory is allocated. I have done that sort of things many times,  
>> you take over the allocation and dellocation memory yourself inside  
>> your dll, by passing tomasz's memory allocation routine. As you are  
>> writing code and allocating memory specific for your problem. You  
>> can be a lot more economical than any general algorithm would. you  
>> can build in controls that it is only executed when it is needed.
>> The results is a much faster and elagent solution, In all my  
>> exprience, and I dont know how complex your stuff is, but from your  
>> description, it doenst sound very complex, you should be able to get  
>> the time down to a fraction of second for 200K bars.
>>
>> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown <see3d@xxx> wrote:
>>     
>>> Brian,
>>>
>>> I believe that Tomasz is quite good at how he allocates and
>>> deallocates memory internally for arrays.  Also if you are only
>>> talking about a few thousand bars, more time could be lost in trying
>>> to shuffle things around than just using all the bars.  My minimum
>>> number of bars for a calculation is 7,000.  That is just to get
>>> accurate real time trading signals.  For backtesting, I use 200,000
>>> bars.  When you are talking high bar counts, then being able to have
>>> control over the calculation size of the arrays can amount to some
>>> serious time savings.
>>>
>>> However, you are right in that if a large number of bars is only
>>> needed for an occasional calculation to generate some reference data,
>>> then it can be costly in time and space to make everything have to  
>>> use
>>> all the bars.  That is something that would take a programmer to
>>> recognize and be able to optimize.
>>>
>>> I look for cases where I can take advantage of these cases.  So far,
>>> the only way to do this was to save the data to something like an ATC
>>> ticker and use foreign to  access the data, or to run two different
>>> charts at different refresh rates and have them communicate their  
>>> data
>>> via static variables.
>>>
>>> Trying to have AB figure out all this on the fly is complicated and
>>> beyond my understanding of how it could be done.
>>>
>>> BR,
>>> Dennis
>>>
>>>
>>> On Jun 30, 2009, at 9:38 AM, brian_z111 wrote:
>>>
>>>       
>>>>> if RAM needs reorganizing, save the last 100 bars from the
>>>>> variables >etc calculated on 1000 bars e.g. static arrays etc, dump
>>>>> the rest >and then reload the new global SBR # bars i.e. 100.
>>>>>           
>>>> What I meant to ask there was if it is possible to dump some data
>>>> out of RAM and keep a smaller amount that you will need
>>>> thereafter ... maybe move it around in RAM to to where it is needed
>>>> without the need to start again by dumping the lot and reading 100
>>>> bars in from the disc again.
>>>>
>>>> --- In amibroker@xxxxxxxxxxxxxxx, "brian_z111" <brian_z111@> wrote:
>>>>         
>>>>> Well, if my assumptions so far are more or less correct then that
>>>>> leads me towards another possibility ........
>>>>>
>>>>>
>>>>> ...... depending on how RAM memory works (not sure about that)
>>>>>
>>>>> - assuming a database of 5000 bars
>>>>>
>>>>> - if we need a large number of bars, say 1000, to calculate a long
>>>>> term indicator, or indicators ... if this was the largest bar
>>>>> requirement it could become the coded global SBR setting (I assume
>>>>> that this setting might make the need to load all bars for the
>>>>> first pass obsolete ... possibly polling all bars on the first pass
>>>>> has a function (check if bars are not null value, maybe?) ...
>>>>> assuming this function can be passed to the global SBR bars then
>>>>> putting the global SBR at the head of the code could drive AB to
>>>>> load only 1000 bars.
>>>>>
>>>>> - assuming that the 1000 bars are only need for a one off calc ...
>>>>> if we leave them all there will they restrict RAM availability for
>>>>> other uses (as I said I am not sure if contiguous memory on the
>>>>> disc translates into contiguous memory in RAM) ... if there is any
>>>>> RAM advantage to be gained  then a second global SBR command, set
>>>>> to, say 100 bars, that comes after the block of code that needed
>>>>> 1000 bars, could trigger off a dump of the 900 bars no longer need
>>>>> OR of RAM needs reorganizing, save the last 100 bars from the
>>>>> variables etc calculated on 1000 bars e.g. static arrays etc, dump
>>>>> the rest and then reload the new global SBR # bars i.e. 100.
>>>>>
>>>>> Blocks of code that only need < 100 bars could then be controlled
>>>>> via local SBR settings (one for each block).
>>>>>
>>>>>
>>>>> Beyond that idea #3 keeps coming back to me.......
>>>>>
>>>>> i.e. that AB could, should, would poll the CPU for availability and
>>>>> prioritize processing tasks.
>>>>>
>>>>> Some kind of flow control for the order of execution could be a
>>>>> tiny step in that direction i.e. reprocessing of a block of code,
>>>>> with a large number of bars, might be set to low priority (if you
>>>>> only need the answer every now and then) and AB would feed it to
>>>>> the processor a bit at a time (when the processor is not busy on
>>>>> your hot short term code).
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown <see3d@> wrote:
>>>>>           
>>>>>> Brian,
>>>>>>
>>>>>> Yes there are two pieces.  The number of bars loaded, and the  
>>>>>> number
>>>>>> of bars used in an array calculation.  Both are important for  
>>>>>> speed,
>>>>>> but the number used for array calculations can make the most
>>>>>> difference if it can be reduced.  It would take a comprehensive
>>>>>> discussion of all the different possibilities and what could be
>>>>>> gained
>>>>>> be each one to clarify all the issues.  Bruce hinted that that has
>>>>>> already taken place in the past with TJ.  My simplest case is just
>>>>>> to
>>>>>> allow the SBR in future passes to reduce the number of bars like
>>>>>> possible on the first pass.
>>>>>>
>>>>>> BR,
>>>>>> Dennis
>>>>>>
>>>>>>
>>>>>> On Jun 30, 2009, at 5:44 AM, brian_z111 wrote:
>>>>>>
>>>>>>             
>>>>>>> Clarification:
>>>>>>>
>>>>>>> The longest SBR, of the complete formula,  could be the primary
>>>>>>> (global)SBR, and control the # bars loaded into memory,
>>>>>>> while the secondary SBR's set how many of the bars already loaded
>>>>>>> into memory to actually use, for any particular block of code (as
>>>>>>> defined by the local SBR's???????????????????????????????????????
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --- In amibroker@xxxxxxxxxxxxxxx, "brian_z111" <brian_z111@>  
>>>>>>> wrote:
>>>>>>>               
>>>>>>>> I still have a few questions about this.
>>>>>>>>
>>>>>>>> FTR:
>>>>>>>>
>>>>>>>> I am OK with the idea so far ... I am wondering about the
>>>>>>>> practicality of the implementation though... I guess you guys
>>>>>>>> (Fred,Bruce,Dennis), being programmers, are confident you are
>>>>>>>> going
>>>>>>>> to gain time, either when running long BT's or Opts OR only in  
>>>>>>>> RT
>>>>>>>> charts?
>>>>>>>>
>>>>>>>> Does anyone have any idea where these gains would come from, or
>>>>>>>> how
>>>>>>>> they could be achieved, in processing terms .... what sort of  
>>>>>>>> time
>>>>>>>> gains can we expect if Tomasz does decide to action the idea?
>>>>>>>>
>>>>>>>> When Dennis said that calling SBR with a lower # bars RESTARTS  
>>>>>>>> the
>>>>>>>> charts I am guessing that he means bars are reloaded into  
>>>>>>>> memory,
>>>>>>>> thus rebuilding the charts.... is this the default behaviour?
>>>>>>>>
>>>>>>>> .. if so this would be the default for any change of setting
>>>>>>>> (either up or down) so any change of setting has this 'penalty'
>>>>>>>> attached?
>>>>>>>>
>>>>>>>> Are you guys suggesting that, where two or more calls are made  
>>>>>>>> to
>>>>>>>> SBR() that AB could still estimate max bars required for the
>>>>>>>> longest SBR after the first pass, keep them in memory, but only
>>>>>>>> access the number required for each subsequent block of shorter
>>>>>>>> length arrays .... i.e. where there are more than one SBR in a
>>>>>>>> formula, the longest SBR will be the primary SBR, and control
>>>>>>>> the #
>>>>>>>> bars loaded, while the secondary SBR's set how many of the  
>>>>>>>> loaded
>>>>>>>> bars to actually use?
>>>>>>>>
>>>>>>>> I don't know if instructing AB to change to using, say, 10 bars,
>>>>>>>> from a loaded memory of, say, 100, has much of a time penalty
>>>>>>>> attached to it ... I guess not?
>>>>>>>>
>>>>>>>> I don't understand how processors work so I am not certain that
>>>>>>>> this would lead to a time gains ... I guess if there are gains  
>>>>>>>> to
>>>>>>>> be had, by this method, it would depend on how long it takes to
>>>>>>>> change the no bars actually processed and ... how many lines of
>>>>>>>> code are included in the short array block.
>>>>>>>>
>>>>>>>> I assume that processing 10 bars, already in memory, is actually
>>>>>>>> faster than processing the whole 100, already in memory ....  
>>>>>>>> that
>>>>>>>> is a big assumption on my part (could be wrong!).
>>>>>>>>
>>>>>>>> Is that what you guys are suggesting or is it something else?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown <see3d@> wrote:
>>>>>>>>                 
>>>>>>>>> Bruce,
>>>>>>>>>
>>>>>>>>> Thanks for your suggestions.  They are appreciated.  I will
>>>>>>>>> contact
>>>>>>>>> you off-line for further discussion about these.
>>>>>>>>>
>>>>>>>>> I am glad to see that I am not the only one who would like to
>>>>>>>>> have
>>>>>>>>> more control over the number of bars used in AFL.  I posted one
>>>>>>>>> bug
>>>>>>>>> related to these long ago, and commented on the one way  
>>>>>>>>> nature of
>>>>>>>>> SBR,
>>>>>>>>> but never posted my own suggestion for having the ability to
>>>>>>>>> reduce
>>>>>>>>> the number of bars via SBR, because I previously could not get
>>>>>>>>> any
>>>>>>>>> responses from this forum or support about how I should go  
>>>>>>>>> about
>>>>>>>>> trying to do this.  I did not want to suggest something without
>>>>>>>>> knowing it was desired by more than myself, or understanding if
>>>>>>>>> there
>>>>>>>>> was another way to do it.  I have now posted a suggestion  
>>>>>>>>> #1790,
>>>>>>>>> so we
>>>>>>>>> have a place holder for the desired functionality.  http://www.amibroker.com/feedback/view_bug.php?bug_id=1790
>>>>>>>>>
>>>>>>>>> Best regards,
>>>>>>>>> Dennis
>>>>>>>>>
>>>>>>>>> On Jun 29, 2009, at 9:19 AM, bruce1r wrote:
>>>>>>>>>
>>>>>>>>>                   
>>>>>>>>>> Dennis -
>>>>>>>>>>
>>>>>>>>>> I was just making sure about you understanding of the
>>>>>>>>>> SetBarsRequired() placement.  I agree with most of your  
>>>>>>>>>> summary,
>>>>>>>>>> but
>>>>>>>>>> let's put the minor points aside and turn to your issue.
>>>>>>>>>> FWIW, I'd
>>>>>>>>>> like to have full control over bar requirements also.
>>>>>>>>>> Actually -
>>>>>>>>>> even more than you want, but that's another story.  Its
>>>>>>>>>> something
>>>>>>>>>> that I and Fred and I have both discussed with Tomasz some  
>>>>>>>>>> time
>>>>>>>>>> ago.  I might even muse on TJ's reasoning in his current  
>>>>>>>>>> design,
>>>>>>>>>> but
>>>>>>>>>> he really should comment.  But, we have to deal with the hand
>>>>>>>>>> that
>>>>>>>>>> we're dealt.
>>>>>>>>>>
>>>>>>>>>> My impression is that you have an "all in one" indicator that
>>>>>>>>>> you
>>>>>>>>>> try  to use as a control and analysis center.  I'll confess  
>>>>>>>>>> that
>>>>>>>>>> I've written one of these also, but moved away from that  
>>>>>>>>>> type of
>>>>>>>>>> design for various reasons.  I think that we are at a point
>>>>>>>>>> that if
>>>>>>>>>> you want to explore some workarounds, we'll have to examine  
>>>>>>>>>> your
>>>>>>>>>> requirements in detail, and this is probably best moved o
>>>>>>>>>> ffline to
>>>>>>>>>> e-mail.
>>>>>>>>>>
>>>>>>>>>> Before I do that, I'll offer some comments that I hope might
>>>>>>>>>> be of
>>>>>>>>>> general interest about this general problem.  Let's recap your
>>>>>>>>>> statement about the design issue -
>>>>>>>>>>
>>>>>>>>>> You said - "In my case, I sometimes want to take a one shot
>>>>>>>>>> pass at
>>>>>>>>>> allthe bars to gather some statistics and save them, then
>>>>>>>>>> immediately dropback to some minimum number of bars to speed
>>>>>>>>>> up the
>>>>>>>>>> user interface for changing parameters in the parameter window
>>>>>>>>>> or
>>>>>>>>>> even working with on-chart buttons, and go back to real time
>>>>>>>>>> trading."
>>>>>>>>>>
>>>>>>>>>> So, given that as the problem statement, some alternatives  
>>>>>>>>>> are -
>>>>>>>>>> Note that having say SetBarsRequired(100,0), for example,
>>>>>>>>>> DOES NOT
>>>>>>>>>> preclude passing all of the data. I suspect that what you want
>>>>>>>>>> is
>>>>>>>>>> to
>>>>>>>>>> expand the back bars then call Equity() and gather stats.  A
>>>>>>>>>> viable
>>>>>>>>>> alternative in some cases is just to programatically zoom to  
>>>>>>>>>> the
>>>>>>>>>> full range, run and store the stats,and programatically zoom
>>>>>>>>>> back
>>>>>>>>>> to
>>>>>>>>>> the original range.   This preserves the 100 bars back  
>>>>>>>>>> setting.
>>>>>>>>>> Another slightly more flexible alternative is to run the
>>>>>>>>>> backtestin
>>>>>>>>>> the AA.  To do this, you shell out to a JScript "controller"
>>>>>>>>>> program
>>>>>>>>>> which invokes the appropriate AA backtest and stores the
>>>>>>>>>> results.
>>>>>>>>>> In your case, though, this might require the passing of many
>>>>>>>>>> parameters in static variables, though.  However, I use this
>>>>>>>>>> technique for running a portfolio backtest over a dynamic
>>>>>>>>>> watchlist
>>>>>>>>>> on demand from an indicator.  BTW, it seems to "free up" the
>>>>>>>>>> indicator display, but I have only run this on EOD data and
>>>>>>>>>> can't
>>>>>>>>>> comment on how much parallelism can be achieved on RT data.
>>>>>>>>>> And, I
>>>>>>>>>> assume that TJ has the appropriate lock-outs, but after  
>>>>>>>>>> about a
>>>>>>>>>> year
>>>>>>>>>> and a half of use, no problems.
>>>>>>>>>> The backtest "indicator" can be run in another document.  This
>>>>>>>>>> document can have a different, full data range.  This has the
>>>>>>>>>> advantage of only calculating when when visible, but I'd still
>>>>>>>>>> put a
>>>>>>>>>> trigger on it.  But, again, some parameter communication would
>>>>>>>>>> be
>>>>>>>>>> needed.
>>>>>>>>>> Each individual would have to decide on the trade-off's. #1 is
>>>>>>>>>> the
>>>>>>>>>> easiest.  #2 might allow for some interesting things if and
>>>>>>>>>> when TJ
>>>>>>>>>> implements multi-processor support.  There are even a few  
>>>>>>>>>> other
>>>>>>>>>> alternatives.  But this is probably enough food for thought.
>>>>>>>>>>
>>>>>>>>>> -- BruceR
>>>>>>>>>>
>>>>>>>>>> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown <see3d@> wrote:
>>>>>>>>>>                     
>>>>>>>>>>> Bruce,
>>>>>>>>>>>
>>>>>>>>>>> Yes, I understand the SBR requirements. My AFLs have it as  
>>>>>>>>>>> the
>>>>>>>>>>> last
>>>>>>>>>>> statement. The thing I was showing below was some wishful
>>>>>>>>>>> thinking
>>>>>>>>>>>                       
>>>>>>>>>> if
>>>>>>>>>>                     
>>>>>>>>>>> the way SBR worked were modified to allow for reducing the
>>>>>>>>>>> number of
>>>>>>>>>>> bars at each call. In fact it would be good to iterate how it
>>>>>>>>>>> works
>>>>>>>>>>> here so nobody gets confused by my musings:
>>>>>>>>>>>
>>>>>>>>>>> When the indicator chart is first run, it takes a pass just  
>>>>>>>>>>> to
>>>>>>>>>>>                       
>>>>>>>>>> figure
>>>>>>>>>>                     
>>>>>>>>>>> out how man y bars are required (it also compiles other
>>>>>>>>>>>                       
>>>>>>>>>> information to
>>>>>>>>>>                     
>>>>>>>>>>> speed executions). Each function, or loop may have a  
>>>>>>>>>>> different
>>>>>>>>>>> requirement for historical bars previous to the
>>>>>>>>>>> FirstVisibleBar.
>>>>>>>>>>>                       
>>>>>>>>>> This
>>>>>>>>>>                     
>>>>>>>>>>> first AFL pass might give erroneous results since it does not
>>>>>>>>>>> know
>>>>>>>>>>> until the end of the pass what all the requirements are,  
>>>>>>>>>>> but I
>>>>>>>>>>> think
>>>>>>>>>>> it uses all bars, so that should not cause a problem. It is a
>>>>>>>>>>> peak
>>>>>>>>>>> detecting function, so that it only increased the number of
>>>>>>>>>>> bars
>>>>>>>>>>> required, and never decreases them. If I have operations that
>>>>>>>>>>> write
>>>>>>>>>>> information to files or static variables, I disable the  
>>>>>>>>>>> writes
>>>>>>>>>>>                       
>>>>>>>>>> during
>>>>>>>>>>                     
>>>>>>>>>>> this pass since the ChartID is not valid yet.
>>>>>>>>>>>
>>>>>>>>>>> Subsequent AFL passes now know how many bars to load from the
>>>>>>>>>>>                       
>>>>>>>>>> database
>>>>>>>>>>                     
>>>>>>>>>>> to make sure that the visible bars show accurate results.
>>>>>>>>>>>
>>>>>>>>>>> If some new conditional AFL code executes during one of the
>>>>>>>>>>>                       
>>>>>>>>>> subsequent
>>>>>>>>>> &g t; AFL passes, for instance an AddToComposite() function  
>>>>>>>>>> that
>>>>>>>>>> requires
>>>>>>>>>>                     
>>>>>>>>>>> all bars, or an SetBarsRequired() function with a larger
>>>>>>>>>>> number of
>>>>>>>>>>> bars, the next pass of AFL will load more bars and this  
>>>>>>>>>>> will be
>>>>>>>>>>> the
>>>>>>>>>>> new minimum bars requirement. However, I have noticed in my
>>>>>>>>>>> charts,
>>>>>>>>>>> that the first pass after a new requirement may not use the
>>>>>>>>>>> higher
>>>>>>>>>>> number of bars for an extra pass, so I am not sure about the
>>>>>>>>>>> exact
>>>>>>>>>>> sequence. Perhaps, a new requirement caused another "bar
>>>>>>>>>>> requirements" gathering pass first. This can lead to errors
>>>>>>>>>>> if you
>>>>>>>>>>> are saving results on a one shot basis in a static variable  
>>>>>>>>>>> or
>>>>>>>>>>> file.
>>>>>>>>>>>
>>>>>>>>>>> If an SetBarsRequired() statement is found at the very end of
>>>>>>>>>>> the
>>>>>>>>>>>                       
>>>>>>>>>> AFL,
>>>>>>>>>>                     
>>>>>>>>>>> then it will override the previous requirements. However, it
>>>>>>>>>>> still
>>>>>>>>>>> will not allow you to reduce the requirements after the first
>>>>>>>>>>> pass.
>>>>>>>>>>>
>>>>>>>>>>> I am not aware of any detailed descriptions or flow charts of
>>>>>>>>>>> this
>>>>>>>>>>> execution process for AFL, so all of this is just from
>>>>>>>>>>> observations
>>>>>>>>>>> while debugging code, and might be incorrect.
>>>>>>>>>>>
>>>>>>>>>>> I was musing about giving the user AFL control over the
>>>>>>>>>>> reducing
>>>>>>>>>>> the
>>>>>>>>>>> number of bars used on subsequent passes.
>>>>>>>>>>>
>>>>>>>>>>> In my case, I sometimes want to take a one shot pass at all  
>>>>>>>>>>> the
>>>>>>>>>>> bars
>>>>>>>>>>> to gather some statistics and save them, then immediately  
>>>>>>>>>>> drop
>>>>>>>>>>>                       
>>>>>>>>>> back to
>>>>>>>>>>                     
>>>>>>>>>>> some minimum number of bars to speed up the user interface  
>>>>>>>>>>> for
>>>>>>>>>>> changing parameters in the parameter window or even working
>>>>>>>>>>> with
>>>>>>>>>>> on-
>>>>>>>>>>> chart buttons, and go back to real time trading. It is a real
>>>>>>>>>>> drag
>>>>>>>>>>> when I have to wait 5 seconds between every parameter  
>>>>>>>>>>> change --
>>>>>>>>>>>                       
>>>>>>>>>> which
>>>>>>>>>>                     
>>>>>>>>>>> is the fastest I have been able to drop back to from the 20
>>>>>>>>>>> second
>>>>>>>>>>> full pass with SBR working in its current operating mode.  
>>>>>>>>>>> At 5
>>>>>>>>>>> seconds, a lot of the user interface functions stop worki ng.
>>>>>>>>>>> It
>>>>>>>>>>>                       
>>>>>>>>>> takes
>>>>>>>>>>                     
>>>>>>>>>>> me quite a while to get my chart back to trading fast after
>>>>>>>>>>> using
>>>>>>>>>>>                       
>>>>>>>>>> more
>>>>>>>>>>                     
>>>>>>>>>>> bars for a (not so) quick test.
>>>>>>>>>>>
>>>>>>>>>>> Of course, once the user takes control of the number of bars
>>>>>>>>>>>                       
>>>>>>>>>> required,
>>>>>>>>>>                     
>>>>>>>>>>> it is his responsibility to monitor the requirements  
>>>>>>>>>>> carefully.
>>>>>>>>>>>
>>>>>>>>>>> BR,
>>>>>>>>>>> Dennis
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Jun 28, 2009, at 9:17 PM, bruce1r wrote:
>>>>>>>>>>>
>>>>>>>>>>>                       
>>>>>>>>>>>> Dennis -
>>>>>>>>>>>>
>>>>>>>>>>>> Close, but not quite. If you were going to use
>>>>>>>>>>>> SetBarsRequired()
>>>>>>>>>>>>                         
>>>>>>>>>> to
>>>>>>>>>>                     
>>>>>>>>>>>> control the lookback, it is CRITICAL that it be the LAST
>>>>>>>>>>>>                         
>>>>>>>>>> statement in
>>>>>>>>>>                     
>>>>>>>>>>>> the program. If it is not, subsequent statements ( such as
>>>>>>>>>>>> HHV() )
>>>>>>>>>>>> may
>>>>>>>>>>>> add to the requirement. If you want to see a detailed
>>>>>>>>>>>>                         
>>>>>>>>>> explanation of
>>>>>>>>>>                     
>>>>>>>>>>>> this, refer to Tomasz's QuickAFL article in the KB.
>>>>>>>>>>>>
>>>>>>>>>>>> Regarding the issues that you described in your previous
>>>>>>>>>>>>                         
>>>>>>>>>> response to
>>>>>>>>>>                     
>>>>>>>>>>>> me,
>>>>>>>>>>>> there are a couple of ways to deal with the issue that you  
>>>>>>>>>>>> are
>>>>>>>>>>>> describing. When the teenagers go to bed and its quiet  
>>>>>>>>>>>> later,
>>>>>>>>>>>> I'll
>>>>>>>>>>>> try
>>>>>>>>>>>> to outline one.
>>>>>>>>>>>>
>>>>>>>>>>>> -- BruceR
>>>>>>>>>>>>
>>>>>>>>>>>> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown see3d@ wrote:
>>>>>>>>>>>>                         
>>>>>>>>>>>>> Yes Tony,
>>>>>>>>>>>>>
>>>>>>>>>>>>> This is close to what I was referring to as the array
>>>>>>>>>>>>> solution,
>>>>>>>>>>>>> though
>>>>>>>>>>>>> I would probably write it like this to make it symmetrical:
>>>>>>>>>>>>>
>>>>>>>>>>>>> minmax = LastValue( HHV( abs( m ), r ) );
>>>>>>>>>>>>>
>>>>>>>>>>>>> It would be interesting if we could have a faster operation
>>>>>>>>>>>>>                           
>>>>>>>>>> such that
>>>>>>>>>>                     
>>>>>>>>>>>>> if we used a SetBarsRequired( r, 0 ) in the preceding
>>>>>>>>>>>>> statement
>>>>>>>>>>>>>                           
>>>>>>>>>> to
>>>>>>>>>>                     
>>>>>>>>>>>>> reduce the range so the the range equaled the number of  
>>>>>>>>>>>>> bars
>>>>>>>>>>>>> specified, that the returned value would be a single number
>>>>>>>>>>>>> of
>>>>>>>>>>>>>                           
>>>>>>>>>> the
>>>>>>>>>>                     
>>>>>>>>>>>>> result. Hmmmmm. If that mode were available, it would look
>>>>>>>>>>>>> like
>>>>>>>>>>>>>                           
>>>>>>>>>>>> this:
>>>>>>>>>>>>                         
>>>>>>>>>>>>> m = MACD();
>>>>>>>>>>>>>
>>>>>>>>>>>>> fb = Status("FirstVisibleBar");
>>>>>>>>>>>>> lb = Status("LastVisibleBar");
>>>>>>>>>>>>> r = lb - fb;
>>>>>>>>>>>>>
>>>>>>>>>>>>> SetBarsRequired( r, 0 )
>>>>>>>>>>>>> maximum = HHV( abs( m ), r );
>>>>>>>>>>>>> Plot( m, "MACD", colorRed, styleOwnScale, -maximum,
>>>>>>>>>>>>> maximum );
>>>>>>>>>>>>> Plot(0, "", colorBlack, styleOwnScale, -maximum, maximum);
>>>>>>>>>>>>>
>>>>>>>>>>>>> Just a little brainstorming.
>>>>>>>>>>>>>
>>>>>>>>>>>>> BR,
>>>>>>>>>>>>> Dennis
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Jun 28, 2009, at 8:31 AM, Tony Grimes wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>                           
>>>>>>>>>>>>>> Try this solution, array style:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> m = MACD();
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> fb = Status("FirstVisibl eBar");
>>>>>>>>>>>>>> lb = Status("LastVisibleBar");
>>>>>>>>>>>>>> r = lb - fb;
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> minimum = LastValue( LLV( m, r ) );
>>>>>>>>>>>>>> maximum = LastValue( HHV( m, r ) );
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Plot( m, "MACD", colorRed, styleOwnScale, minimum,
>>>>>>>>>>>>>> maximum );
>>>>>>>>>>>>>> Plot(0, "", colorBlack, styleOwnScale, minimum, maximum);
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Sat, Jun 27, 2009 at 11:16 AM, Dennis Brown see3d@
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Maybe not...
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Through this discussion, the problem has been reduced to
>>>>>>>>>>>>>>                             
>>>>>>>>>> aligning
>>>>>>>>>>                     
>>>>>>>>>>>> the
>>>>>>>>>>>>                         
>>>>>>>>>>>>>> min/max range of a MACD styleOwnScale plot to another zero
>>>>>>>>>>>>>> line
>>>>>>>>>>>>>> styleOwnScale plot statement. Therefore, the only way to  
>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>                             
>>>>>>>>>> this is
>>>>>>>>>>                     
>>>>>>>>>>>>>> to find the min/max values of the MA CD function in the
>>>>>>>>>>>>>>                             
>>>>>>>>>> visible bars
>>>>>>>>>>                     
>>>>>>>>>>>>>> range and use those numbers in both plot statements, or  
>>>>>>>>>>>>>> make
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>                             
>>>>>>>>>>>> MACD
>>>>>>>>>>>>                         
>>>>>>>>>>>>>> range symmetrical and then the zero line statement can be
>>>>>>>>>>>>>> any
>>>>>>>>>>>>>> symmetrical range.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I am happy with my dual colored plot line at this point.
>>>>>>>>>>>>>>                             
>>>>>>>>>> However, to
>>>>>>>>>>                     
>>>>>>>>>>>>>> complete the original idea, I could use a simple loop to
>>>>>>>>>>>>>> find
>>>>>>>>>>>>>>                             
>>>>>>>>>> the
>>>>>>>>>>                     
>>>>>>>>>>>> min/
>>>>>>>>>>>>                         
>>>>>>>>>>>>>> max numbers of the MACD, but I am now wondering if there
>>>>>>>>>>>>>> is a
>>>>>>>>>>>>>>                             
>>>>>>>>>>>> "faster"
>>>>>>>>>>>>                         
>>>>>>>>>>>>>> execution way using array logic instead?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> It seems like a waist of time to create an array of the  
>>>>>>>>>>>>>> Min/
>>>>>>>>>>>>>>                             
>>>>>>>>>> Max over
>>>>>>>>>>                     
>>>>>>>>>>>>>> that range for all bars, then just use the last value. I  
>>>>>>>>>>>>>> use
>>>>>>>>>>>>>>                             
>>>>>>>>>> loops
>>>>>>>>>>                     
>>>>>>>>>>>>>> when I only want a single number result related to the  
>>>>>>>>>>>>>> Min/
>>>>>>>>>>>>>> Max
>>>>>>>>>>>>>>                             
>>>>>>>>>> value
>>>>>>>>>>                     
>>>>>>>>>>>>>> over the last n bars only (like the v isible bar range).
>>>>>>>>>>>>>> Am I
>>>>>>>>>>>>>>                             
>>>>>>>>>> missing
>>>>>>>>>>                     
>>>>>>>>>>>>>> an opportunity to approach this in a more efficient way?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> BR,
>>>>>>>>>>>>>> Dennis
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Jun 27, 2009, at 9:06 AM, gmorlosky wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>>> maybe....
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> IF ( MACDline == Signalline) // histogram value equals  
>>>>>>>>>>>>>>> zero
>>>>>>>>>>>>>>> X = lastvalue(MACDline-Signalline);
>>>>>>>>>>>>>>> Plot (X,"", colorblack);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown see3d@
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>                               
>>>>>>>>>>>>>>>> Yes, I have it set to 100%. The absolute values of the
>>>>>>>>>>>>>>>>                                 
>>>>>>>>>> indicator
>>>>>>>>>>                     
>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>> vary wildly, depending on the price and volatility of  
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>                                 
>>>>>>>>>> stock.
>>>>>>>>>>                     
>>>>>>>>>>>> I
>>>>>>>>>>>>                         
>>>>>>>>>>>>>> & gt;> plot ES, so the values are quite large at times.
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>>>> BR,
>>>>>>>>>>>>>>>> Dennis
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Jun 26, 2009, at 5:58 PM, monitorit wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>                                 
>>>>>>>>>>>>>>>>> If that's all you needed, the color change would be  
>>>>>>>>>>>>>>>>> best.
>>>>>>>>>>>>>>>>>                                   
>>>>>>>>>> But, I
>>>>>>>>>>                     
>>>>>>>>>>>>>>>>> think the solution I suggested would work... you would
>>>>>>>>>>>>>>>>> still
>>>>>>>>>>>>>>>>>                                   
>>>>>>>>>>>> plot/
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>> see value very high or low just within a section
>>>>>>>>>>>>>>>>> defined by
>>>>>>>>>>>>>>>>>                                   
>>>>>>>>>>>>>> pane*1/
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>>>>> minvalue [at least it has for me]. BTW, presently  
>>>>>>>>>>>>>>>>> what is
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>                                   
>>>>>>>>>>>>>> upper
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>>>>> and lower bounds of the MACD in relationship to the
>>>>>>>>>>>>>>>>> height
>>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>                                   
>>>>>>>>>>>> the
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>> pane? Is it 100% of the pane height?
>>>>>>>>>>>>>>>>> Dan
>>>>>>>>>>>>>>>>>                                   
>>>>>>>>>>>>>>>> ;>
>>>>>>>>>>>>>>>>                                 
>>>>>>>>>>>>>>>>> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown <see3d@>
>>>>>>>>>>>>>>>>>                                   
>>>>>>>>>> wrote:
>>>>>>>>>>                     
>>>>>>>>>>>>>>>>>> Dan,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> This is what I usually do for indicators when I know  
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>                                     
>>>>>>>>>> range
>>>>>>>>>>                     
>>>>>>>>>>>> of
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>>> values. However, MACD is an unbounded indicator, so I
>>>>>>>>>>>>>>>>>> don't
>>>>>>>>>>>>>>>>>>                                     
>>>>>>>>>>>> know
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>>> how
>>>>>>>>>>>>>>>>>> large the values are. It is only the zero crossings  
>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>                                     
>>>>>>>>>>>> relative
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>>> peaks that are useful info here.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> I just thought there would be some simple shortcut to
>>>>>>>>>>>>>>>>>>                                     
>>>>>>>>>> actually
>>>>>>>>>>                     
>>>>>>>>>>>>>>>>>> scanning the visible bars for the min/max values to
>>>>>>>>>>>>>>>>>> use in
>>>>>>>>>>>>>>>>>>                                     
>>>>>>>>>> the
>>>>>>>>>>                     
>>>>>>>>>>>>>> plot
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>>>>>> statemen ts. I think I will just switch colors of the
>>>>>>>>>>>>>>>>>> MACD
>>>>>>>>>>>>>>>>>>                                     
>>>>>>>>>> from
>>>>>>>>>>                     
>>>>>>>>>>>>>> red
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>> green if it is above or below zero instead of
>>>>>>>>>>>>>>>>>> resorting to
>>>>>>>>>>>>>>>>>>                                     
>>>>>>>>>> yet
>>>>>>>>>>                     
>>>>>>>>>>>>>>>>>> another
>>>>>>>>>>>>>>>>>> loop.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>> Dennis
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Jun 26, 2009, at 4:40 PM, monitorit wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>                                     
>>>>>>>>>>>>>>>>>>> Dennis,
>>>>>>>>>>>>>>>>>>> Hi. You might try this- Place a value in minvalue
>>>>>>>>>>>>>>>>>>> section
>>>>>>>>>>>>>>>>>>>                                       
>>>>>>>>>> but
>>>>>>>>>>                     
>>>>>>>>>>>>>>>>>>> none
>>>>>>>>>>>>>>>>>>> in maxvalue section [I think maybe a value like 2
>>>>>>>>>>>>>>>>>>> equates
>>>>>>>>>>>>>>>>>>>                                       
>>>>>>>>>> to
>>>>>>>>>>                     
>>>>>>>>>>>> 1/2
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>>>> pan e height] of your MACD and zero plot statements.
>>>>>>>>>>>>>>>>>>> Also,styleNoRescale in the zero plot statement. This
>>>>>>>>>>>>>>>>>>> worked
>>>>>>>>>>>>>>>>>>>                                       
>>>>>>>>>>>> for
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>>>> me
>>>>>>>>>>>>>>>>>>> when I wanted to plot a histogram and a dot on the
>>>>>>>>>>>>>>>>>>> top of
>>>>>>>>>>>>>>>>>>>                                       
>>>>>>>>>> the
>>>>>>>>>>                     
>>>>>>>>>>>>>>>>>>> histogram. Not sure if it works with a line. If it
>>>>>>>>>>>>>>>>>>> doesn't,
>>>>>>>>>>>>>>>>>>>                                       
>>>>>>>>>>>> you
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>>>> could try plotohlc with H=max(0,my#) and  
>>>>>>>>>>>>>>>>>>> L=min(0,my#).
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Dan
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown  
>>>>>>>>>>>>>>>>>>> <see3d@>
>>>>>>>>>>>>>>>>>>>                                       
>>>>>>>>>> wrote:
>>>>>>>>>>                     
>>>>>>>>>>>>>>>>>>>> Hello,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> This must be simple, but my AFL brain is fried
>>>>>>>>>>>>>>>>>>>> today. I
>>>>>>>>>>>>>>>>>>>>                                         
>>>>>>>>>> have
>>>>>>>>>>                     
>>>>>>>>>>>> an
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>>>>> MACD
>>>>>>>>>>>>>>>>>>>> plot on top of my main price chart, and I want to
>>>>>>>>>>>>>>>>>>>> plot a
>>>>>>>>>>>>>>>>>>>>                                         
>>>>>>>>>> zero
>>>>>>>>>>                     
>>>>>>>>>>>>>>>>>>>> line
>>>>>>>>>>>>>>>>>>>> over it. It is plotted as StyleOwnScale of course. I
>>>>>>>>>>>>>>>>>>>> can't
>>>>>>>>>>>>>>>>>>>>                                         
>>>>>>>>>>>> use
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>>>>> StyleLeftAxis because I am using it for something
>>>>>>>>>>>>>>>>>>>> else. I
>>>>>>>>>>>>>>>>>>>> guess I
>>>>>>>>>>>>>>>>>>>> could do something to figure out where the visible
>>>>>>>>>>>>>>>>>>>> high
>>>>>>>>>>>>>>>>>>>>                                         
>>>>>>>>>> and
>>>>>>>>>>                     
>>>>>>>>>>>> low
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>>>>> values
>>>>>>>>>>>>>>>>>>>> of the MACD are, but it seems like it should be  
>>>>>>>>>>>>>>>>>>>> easier
>>>>>>>>>>>>>>>>>>>>                                         
>>>>>>>>>> than
>>>>>>>>>>                     
>>>>>>>>>>>>>> that.
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>>>>>>>> TIA,
>>>>>>>>>>>>>>>>>>>> Dennis
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>                                         
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> ------------------------------------
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> **** IMPORTANT PLEASE READ ****
>>>>>>>>>>>>>>>>>>> This group is for the discussion between users only.
>>>>>>>>>>>>>>>>>>> This is *NOT* technical support channel.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> TO GET TECHNICAL SUPPORT send an e-mail directly to
>>>>>>>>>>>>>>>>>>> SUPPORT {at} amibroker.com
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
>>>>>>>>>>>>>>>>>>> http://www.amibroker.com/feedback/
>>>>>>>>>>>>>>>>>>> (submissions sent via other channels won't be
>>>>>>>>>>>>>>>>>>> considered)
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> For NEW RELEASE ANNOUNCEMENTS and other news always
>>>>>>>>>>>>>>>>>>> check
>>>>>>>>>>>>>>>>>>>                                       
>>>>>>>>>>>>>> DEVLOG:
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>>>>>>> http://www.amibroker.com/devlog/
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Yahoo! Groups Links
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>                                       
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ------------------------------------
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> **** IMPORTANT PLEASE READ ****
>>>>>>>>>>>>>>>>> This group is for the discussion between users only.
>>>>>>>>>>>>>>>>>                                   
>>>>>>>>>>>> ;>>>>> This is *NOT* technical support channel.
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>> TO GET TECHNICAL SUPPORT send an e-mail directly to
>>>>>>>>>>>>>>>>> SUPPORT {at} amibroker.com
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
>>>>>>>>>>>>>>>>> http://www.amibroker.com/feedback/
>>>>>>>>>>>>>>>>> (submissions sent via other channels won't be  
>>>>>>>>>>>>>>>>> considered)
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> For NEW RELEASE ANNOUNCEMENTS and other news always  
>>>>>>>>>>>>>>>>> check
>>>>>>>>>>>>>>>>>                                   
>>>>>>>>>>>> DEVLOG:
>>>>>>>>>>>>                         
>>>>>>>>>>>>>>>>> http://www.amibroker.com/devlog/
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Yahoo! Groups Links
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>                                   
>>>>>>>>>>>>>> & gt;
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>>>> ------------------------------------
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> **** IMPORTANT PLEASE READ ****
>>>>>>>>>>>>>>> This group is for the discussion between users only.
>>>>>>>>>>>>>>> This is *NOT* technical support channel.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> TO GET TECHNICAL SUPPORT send an e-mail directly to
>>>>>>>>>>>>>>> SUPPORT {at} amibroker.com
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
>>>>>>>>>>>>>>> http://www.amibroker.com/feedback/
>>>>>>>>>>>>>>> (submissions sent via other channels won't be considered)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> For NEW RELEASE ANNOUNCEMENTS and other news always check
>>>>>>>>>>>>>>>                               
>>>>>>>>>> DEVLOG:
>>>>>>>>>>                     
>>>>>>>>>>>>>>> http://www.amibroker.com/devlog/
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Yahoo! Groups Links
>>>>>>>>>>>>>>>                               
>>>>>>>>>> & gt; >>>>
>>>>>>>>>>                     
>>>>>>>>>>>>>>>                               
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>                             
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> **** IMPORTANT PLEASE READ ****
>>>>>>>>>>>> This group is for the discussion between users only.
>>>>>>>>>>>> This is *NOT* technical support channel.
>>>>>>>>>>>>
>>>>>>>>>>>> TO GET TECHNICAL SUPPORT send an e-mail directly to
>>>>>>>>>>>> SUPPORT {at} amibroker.com
>>>>>>>>>>>>
>>>>>>>>>>>> TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
>>>>>>>>>>>> http://www.amibroker.com/feedback/
>>>>>>>>>>>> (submissions sent via other channels won't be considered)
>>>>>>>>>>>>
>>>>>>>>>>>> For NEW RELEASE ANNOUNCEMENTS and other news always check
>>>>>>>>>>>> DEVLOG:
>>>>>>>>>>>> http://www.amibroker.com/devlog/
>>>>>>>>>>>>
>>>>>>>>>>>> Yahoo! Groups Links
>>>>>>>>>>>>
>>>>>>>>>>>>                         
>>>>>>>>>> & gt; >
>>>>>>>>>>                     
>>>>>>>>>>
>>>>>>>>>>                     
>>>>>>>
>>>>>>>
>>>>>>> ------------------------------------
>>>>>>>
>>>>>>> **** IMPORTANT PLEASE READ ****
>>>>>>> This group is for the discussion between users only.
>>>>>>> This is *NOT* technical support channel.
>>>>>>>
>>>>>>> TO GET TECHNICAL SUPPORT send an e-mail directly to
>>>>>>> SUPPORT {at} amibroker.com
>>>>>>>
>>>>>>> TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
>>>>>>> http://www.amibroker.com/feedback/
>>>>>>> (submissions sent via other channels won't be considered)
>>>>>>>
>>>>>>> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
>>>>>>> http://www.amibroker.com/devlog/
>>>>>>>
>>>>>>> Yahoo! Groups Links
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>               
>>>>
>>>>
>>>> ------------------------------------
>>>>
>>>> **** IMPORTANT PLEASE READ ****
>>>> This group is for the discussion between users only.
>>>> This is *NOT* technical support channel.
>>>>
>>>> TO GET TECHNICAL SUPPORT send an e-mail directly to
>>>> SUPPORT {at} amibroker.com
>>>>
>>>> TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
>>>> http://www.amibroker.com/feedback/
>>>> (submissions sent via other channels won't be considered)
>>>>
>>>> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
>>>> http://www.amibroker.com/devlog/
>>>>
>>>> Yahoo! Groups Links
>>>>
>>>>
>>>>
>>>>         
>>
>>
>> ------------------------------------
>>
>> **** IMPORTANT PLEASE READ ****
>> This group is for the discussion between users only.
>> This is *NOT* technical support channel.
>>
>> TO GET TECHNICAL SUPPORT send an e-mail directly to
>> SUPPORT {at} amibroker.com
>>
>> TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
>> http://www.amibroker.com/feedback/
>> (submissions sent via other channels won't be considered)
>>
>> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
>> http://www.amibroker.com/devlog/
>>
>> Yahoo! Groups Links
>>
>>
>>
>>     
>
>
>
> ------------------------------------
>
> **** IMPORTANT PLEASE READ ****
> This group is for the discussion between users only.
> This is *NOT* technical support channel.
>
> TO GET TECHNICAL SUPPORT send an e-mail directly to 
> SUPPORT {at} amibroker.com
>
> TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
> http://www.amibroker.com/feedback/
> (submissions sent via other channels won't be considered)
>
> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> http://www.amibroker.com/devlog/
>
> Yahoo! Groups Links
>
>
>
>
>   


------------------------------------

**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to 
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/