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

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



PureBytes Links

Trading Reference Links

That should be

(load100/execute100)process2;


--- In amibroker@xxxxxxxxxxxxxxx, "brian_z111" <brian_z111@xxx> wrote:
>
> In that case ...
> 
> 
> - if 
> 
> load/execute;
> load/execute;
> load/execute;
> 
> is the efficient model?
> 
> - why is
> 
> (load1000/execute1000)process1;
> (load1000/execute1000)process2;
> (load1000/execute1000)process3;
> 
> more efficient than
> 
> (load1000/execute1000)process1;
> (load1000/execute100)process2;
> (load1000/execute1000)process3;
> 
> I just got out of bed ... haven't even had breakfast yet!
> 
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown <see3d@> wrote:
> >
> > Brian,
> > 
> > You are making things to complicated.
> > 
> > The execution model as I understand it for AB is that only static  
> > variables, a few other housekeeping items, and the "compiled" formula  
> > are retained in memory between passes.  The operating system itself  
> > has a lot of information saved about windows and processes also.
> > 
> > AB processes one chart, say for IBM, then, it process the next chart  
> > for say AAPL, and so on for perhaps 20 charts that you have open in  
> > your desktop.  That may take 10 times more memory than your machine  
> > has available.  By reloading the data for each chart from disk, or  
> > cache, or whatever, the resources of the machine can be shared more  
> > effectively, and the program architecture is simpler and less prone to  
> > bugs.
> > 
> > However, I use fewer bars than loaded in RAM all the time using  
> > loops.  With a loop, I have total control of how many bars to process,  
> > and fewer is faster.  I would also like to have that same explicit  
> > control over how many bars the built-in array operations use, because  
> > they will also operate faster with fewer bars, and are more efficient  
> > than loops doing the same operations.
> > 
> > When we start talking about multiple core and multiple charts being  
> > calculated in parallel, then more memory will be required based on the  
> > number of parallel processes and processors.  Tomasz has already said  
> > he is going to make this happen when the stars are in proper  
> > alignment.  I am sure it will be as efficient as Tomasz can make it.
> > 
> > Get some sleep.  ;-)
> > 
> > BR,
> > Dennis
> > 
> > 
> > 
> > On Jun 30, 2009, at 8:37 PM, brian_z111 wrote:
> > 
> > > Rather than find and 'bump up' two older posts I will add some  
> > > additional comment here.
> > >
> > > Re proactive polling and managing of processing capability by AB:
> > >
> > > - this idea keeps coming back to me
> > > - I am tentatively discussing it on the basis that we are all  
> > > professionals or aspiring professionals and therefore we all have at  
> > > least one dedicated trading machine OR we are FundManagers etc and  
> > > have an IT dept that looks after our IT needs .... therefore we are  
> > > all in the position to elect the option for AB to take over our  
> > > machine (at least I am) ..... I would like AB to do this ... to  
> > > efficiently manage the allocation of my processing time (biased  
> > > towards its own ends)
> > > - perhaps this could become a feature of the Pro version and make it  
> > > really distinctive from the Standard version
> > >
> > >
> > > Re memory allocation:
> > >
> > > - what I am questioning here is the way AB uses the cache and RAM in  
> > > particular .... compared to other programs etc ... what does it do  
> > > differently and is that absolutely essential to its performance
> > >
> > > - so AB parses the formula, makes a smart decision about the least #  
> > > bars required and then loads that number of bars into memory (from  
> > > the cache?)
> > >
> > > - once this optimum allocation (of array length and hence memory)  
> > > has been made and the data is loaded into memory can we have a  
> > > second bite of the cherry ... if we now want to work on a lesser  
> > > number of bars can we handle that new objective IN MEMORY or not ...  
> > > if so can we do that efficiently (without corrupting data or without  
> > > taking longer to do it than it would to dump the original allocation  
> > > and just reload the new requirement from the cache?)
> > >
> > > - if it is more efficient to dump the loaded data and reload from  
> > > cache (AB's default behaviour seems to imply this) then what happens  
> > > when a new bar arrives
> > >
> > > for example:
> > >
> > > - we have SBR 1000
> > > - this is loaded into memory
> > > - the formula is executed
> > > - a new bar arrives .....
> > >
> > >
> > > ..... what happens now?
> > >
> > > - we have 1000 + 1 bars 'in memory' or trying to get in there? ...  
> > > we have exceeded, or are about to exceed our memory allocation?
> > >
> > > - if processors in general (or specifically AB) can't handle this  
> > > internally then they must have to 'write' the new bar into the cache  
> > > then reload the current 1000 bars into memory and do all the calcs  
> > > again
> > >
> > > OR
> > >
> > > - if processors in general (or specifically AB) can handle this  
> > > internally then they must efficiently rearrange the data in memory  
> > > in some way ... perhaps they kick the oldest bar out of one side of  
> > > the bed and let the new bar into the other.
> > >
> > >
> > > Of course the most interesting question so far, in my mind, is can  
> > > processors in general (and specifically AB) run calcs on some arrays  
> > > in allocated memory and then efficiently change over to running  
> > > calcs on only a portion of the arrays ... or is any attempt to do  
> > > this within the processor so inefficient that reload from cache/ 
> > > rebooting the execution is actually the best way to do it?
> > >
> > >
> > >
> > >
> > > --- In amibroker@xxxxxxxxxxxxxxx, "brian_z111" <brian_z111@> wrote:
> > >>
> > >>> I'd suggest that we let Tomasz worry about the "how".
> > >>
> > >> I am conflicted about this.
> > >>
> > >> On the one hand I am innately driven by the desire to know how it  
> > >> works, at a basic level, and to fix something that is broken if it  
> > >> can be fixed.
> > >>
> > >> I have to try to balance my own needs against the needs of others,  
> > >> including Tomasz.... it is a question of how far will I push it, to  
> > >> try to glean some little piece of information from somewhere, or to  
> > >> give Tomasz a heads up about the issues I am facing on my side of  
> > >> the screen. I understand there is a risk that I will be perceived  
> > >> as being too cheeky or making personal attacks on Tomasz .. so be it.
> > >>
> > >> This is how I make my living and I have invested a lot of time into  
> > >> learning AB ... time that I can't get back ... I can't afford to  
> > >> make friends or take prisoners in this business ... I have to  
> > >> know ... the consequences are too high for me to live on good  
> > >> guesses for ever.
> > >>
> > >> Frankly I have a love hate relationship with AB.
> > >>
> > >> I can't fix my car if I don't know how it works.
> > >>
> > >> Is there any car sold in America that comes without a 100% detailed  
> > >> maintenance manual ... would any manufacturer be allowed to sell  
> > >> the vehicle without providing a 100% detailed maintenance manual?
> > >>
> > >> In the absence of the facts I have guessed my way to many a good  
> > >> understanding ... guess by guess until I get there.
> > >>
> > >> I reserve the right at all times to continue to use this method ...  
> > >> I would much rather know for sure though. Of course, I could do my  
> > >> guessing in private but then anyone in the forum who is interested  
> > >> would miss out on the value of my occasional good guess.
> > >>
> > >> <snip>When editing/developing an AFL that is inserted on a
> > >> chart, any change causes an execution using all bars.  This can be
> > >> painful very painful when you have 100k+ bars and complex code.  I
> > >> understand why AB needs to do this, but there is a "chicken and egg"
> > >> problem of needing to execute the AFL on all bars in order to get the
> > >> SetBarsRequired() requirements. <snip>
> > >>
> > >> This is the part that has me confused .... Dennis also speculated  
> > >> that AB uses 'all bars', at the first pass, to calculate SBR.
> > >>
> > >> I went back to the KB, yesterday, and reread the article on  
> > >> QuickAFL and it definitely says that AB calculates forward and  
> > >> backward bar requirements when PARSING the formula .... my limited  
> > >> understanding is that AB has its own compiler (written by Tomasz)  
> > >> and so this is done by the AB compiler before the code is executed  
> > >> on even a bar of data?
> > >>
> > >> So, I don't think rote execution of all SetBars, after edit, is  
> > >> being driven by SBR or QuickAFL ... IMO it is being driven by AB's  
> > >> core behaviour of autoallocating memory and block (orthoganal)  
> > >> treatment of arrays of the same length ... that is what I am trying  
> > >> to flag ... this is AB's 'strength' when BT or Opt large databases  
> > >> etc.
> > >>
> > >> Does this strength become a weakness in RT charts and if so can we  
> > >> OR AB do anything about it.
> > >>
> > >> So far, based on Tomasz's last comments the answer is no .. he said  
> > >> the penalty of this default behaviour, when charts need to be  
> > >> recalced as new bars arrive etc, is less than the penalty involved  
> > >> in managing 1 new bar at a time (I am keeping an open mind on this  
> > >> until I find out for certain one way or another ... and it seems as  
> > >> if that might take until eternity).
> > >>
> > >> My best andidote so far appears to be to brutally simplify my RT  
> > >> needs (careful design and selection of indicators, work to reduce  
> > >> the number of lookback bars required, re-engineer the maths to  
> > >> report more info in less bars and careful design selection of  
> > >> metrics etc).
> > >>
> > >>>    2. In the AA, Tomasz implemented almost all that is needed.
> > >>
> > >> I could strongly disagree with that statement on several counts.
> > >>
> > >> <snip>The only thing that is a slight drawback is that if you run  
> > >> an Explore or Scan on a CURRENT SYMBOL on an unchanged AFL, it  
> > >> doesn't use the SetBarsReuiqed() from the previous execution.  It  
> > >> does use the
> > >> requirement, though, on tickers 2-N when it is run on a watchlist.   
> > >> SO,I consider this a minor annoyance, and am guessing that TJ had  
> > >> to do this for structural reasons.<snip>
> > >>
> > >> It would take forever for Tomasz to explain why he does everything  
> > >> he does ..... it is essential for users to know what AB is doing  
> > >> though ..... how it does it is also nice to know.
> > >>
> > >> Thanks for sharing this info ... I will add it to my hardcopy file  
> > >> of "The Golden Precepts of AmiBroker".
> > >>
> > >> --- In amibroker@xxxxxxxxxxxxxxx, "bruce1r" <brucer@> wrote:
> > >>>
> > >>> Dennis, Brian, all -
> > >>>
> > >>> I'd suggest that we let Tomasz worry about the "how".  What I think
> > >>> Tomasz does a masterful job of is "integrating" requests and
> > >>> requirements within his desired business model.  And finally  
> > >>> consider
> > >>> this - even the best programmer can make educated guesses about
> > >>> another's code, but only the author knows what is truly possible and
> > >>> most efficient.
> > >>>
> > >>> With that in mind, I will mention two things though that are  
> > >>> possible
> > >>> "opportunities", and I'll mention them here only to stimulate  
> > >>> thought on
> > >>> others that might have been overlooked or might be desirable.  My
> > >>> personal inclination is to code around issues and get on with  
> > >>> using the
> > >>> app and/or trading.  But -
> > >>>
> > >>>    1. Long history of high frequency bars such as 1-min bars  
> > >>> create some
> > >>> special problems.  When editing/developing an AFL that is inserted  
> > >>> on a
> > >>> chart, any change causes an execution using all bars.  This can be
> > >>> painful very painful when you have 100k+ bars and complex code.  I
> > >>> understand why AB needs to do this, but there is a "chicken and egg"
> > >>> problem of needing to execute the AFL on all bars in order to get  
> > >>> the
> > >>> SetBarsRequired() requirements.  Something should be done about this
> > >>> long term because it makes debugging / development painful.  I  
> > >>> just code
> > >>> around it by detecting the all bar condition and bypassing  
> > >>> calculations
> > >>> except for a SetBarsRequired().  I can then click to test with the
> > >>> smaller number of bars.
> > >>>    2. In the AA, Tomasz implemented almost all that is needed.   
> > >>> The only
> > >>> thing that is a slight drawback is that if you run an Explore or  
> > >>> Scan on
> > >>> a CURRENT SYMBOL on an unchanged AFL, it doesn't use the
> > >>> SetBarsReuiqed() from the previous execution.  It does use the
> > >>> requirement, though, on tickers 2-N when it is run on a  
> > >>> watchlist.  SO,
> > >>> I consider this a minor annoyance, and am guessing that TJ had to do
> > >>> this for structural reasons.
> > >>> -- BruceR
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown <see3d@> 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

<*> 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/