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

Re: Re[2]: [amibroker] Re: Events in AB/AFL - use of www.Amibroker.com/feedback



PureBytes Links

Trading Reference Links

Herman,

The refresh button refreshes the only chart I have right away on my system.  F5 is not functionally hooked to the virtual PC on my Mac, so I have never used any F keys with AB.  The little solution provided by Bruce causes AFL to in essence press the F5 key on the virtual keyboard.  I put this code right at the very end of my AFL so it does not send it out when there is still a lot of work left to do in my formula.  That means I am sending the F5 key right at the end of the formula, and it restarts the formula again right away.  I had the database offline while testing this.

I am happy for workarounds like this one.  However, my concern with workarounds that simulate a user UI action through the operating system or with programs like AutoIt is that they interfere with the ability to use the AB user interface normally.  The simulated user grabs the mouse or keyboard out of your hands at a time when you are trying to make a parameter setting, or even abort the formula execution.  In a race between you and the machine, the machine usually wins.  A built-in AFL function would behave much better in this regard.  Tomasz has proven that he gives more thought to how these things should operate than most of the rest of us do.  It is always the edge conditions that get you.

So yes, I give my support to having more AFL built-in functions to control user settings/preferences/controls rather than hacking with other workaround UI automation programs.

Best regards,
Dennis


On Mar 10, 2009, at 9:03 PM, Herman wrote:

How does F5 differ from RefreshAll()?

Is F5 still limited to 1/sec or doe it bypass this limitation? 
Does it refresh only charts or also the ticker tree?

It seems like we are getting more demand for a local formula refresh (repeat execution) function. This has been discussed on several occasions... It would be nice to be able to break out of a formula and restart execution with something like ReExecute() or RestartAFL( max repeats );

herman


Tuesday, March 10, 2009, 8:53:36 PM, you wrote:

>
Bruce,

Thank you!  That works perfectly to force an immediate refresh.  A simple and elegant solution.

I should caution anyone contemplating using this, that it should only be used when you want to chain several passes together without any delays, but not as a normal update mode.  In other words, it should only be used under specific conditions that will only last one or a very few passes, because this almost completely locks out the UI until the sequence of passes is completed.  Sending the F5 key overrides any other UI operations.

Now I am able to do all the normal RequestTimedRefresh( -1 to n ) modes, plus an auto time mode to refresh at 1 or 2 seconds longer than the time it takes to execute the AFL, plus the new 0 second delay mode for internal context switching sequences.

Best regards,
Dennis



On Mar 10, 2009, at 7:14 AM, bruce1r wrote:


"I would be happy to create a condition that forces an immediaterefresh of my chart after it exits.  What kinds of events could I makehappen just before I exit my chart AFL that would force an immediaterefresh?"


_TRACE( " " );
_TRACE( "START" );

Plot( C, "C", colorDefault );

if ( NOT Nz( StaticVarGet( "_oneshot" ) ) )
{
    _TRACE( "  Normal execution" );
    _TRACE( "  SENDKEYS");
    StaticVarSet( "_oneshot", True );
    WSHShell = CreateObject( "WScript.Shell" );
    WSHShell.AppActivate( "AmiBroker" );
    WSHShell.Sendkeys( "{F5}" );
}
else
{
    _TRACE( "  Refresh" );
    StaticVarSet( "_oneshot", False );
}

_TRACE( "END" );





I have experimented and notice that my DLL which pokes the --- In amibroker@xxxxxxxxxxxxxxx, Dennis Brown & lt;see3d@xxx> wrote:
>
> Herman,
> Your solution is clever, but does not apply to me. I already have 
> realtime event handling in my general includes for my chart -- and I 
> really only have one realtime chart that I use, so that is not my 
> problem.
> However, your other statement is interesting:
> "You could also write a DLL to deal with non-price events. You could 
> probably force a refresh by simulating some event that refreshes afl."
> I would be happy to create a condition that forces an immediate 
> refresh of my chart after it exits. What kinds of events could I make 
> happen just before I exit my chart AFL that would force an immediate 
> refresh?
> I have experimented and notice that my DLL which pokes the Reset all 
> button and that does cause a refresh of the chart, so one down. 
> Clicking on the chart via DLL might cause a refresh (or other side 
> effects), or maybe not since it is still in the AFL when the click 
> happens. Is there some foolproof way to do this that you have 
> discovered?
> To give you the idea, here is the comments from my sequencer to change 
> parameter sets when selecting a new timeframe or named set in Flexible 
> Parameters.
> // make a sequence to close all menus, switch sets, then restore menus 
> again and the timeframe setting in prefs
> // Pass 1: New set or symbol detected, Close all menus (Internal 
> variables switched, but not the Params window ones)
> // Pass 1.5: DLL clicks the Reset all button
> // if we have a pending reset at this point, the params window must 
> not be open, so skip all the rest
> // Pass 2: Close all menus and recompile(clear) the Params window params
> // Pass 3: Hold all menus closed in case the UI did not get the Reset 
> all yet
> // Pass 3.5: DLL clicks the Reset all button
> // Pass 4: Recompile the Params window params to sync Params window to 
> new internal params
> //
> // Since this can be slow, we also speed up the processing by reducing 
> the number of bars processed in loops
> And while I am discussing this sequence, it sure would be nice to have 
> a status that says the current AFL pass is compiling the parameters. 
> Then I could close the loop and make sure my request to reset all 
> parameters was indeed done on the next pass. I am always worried that 
> there is some condition that will cause it to not happen. Right now, 
> I am giving it two passes just to make sure, since it sometimes failed 
> with just one pass. Another slow down.
> BR,
> Dennis
> On Mar 9, 2009, at 4:35 PM, Herman wrot e:
> > You could use the common include (put it in all your formulas) i 
> > mentioned in the other email. It would execute the second you exit a 
> > formula, and execute whatever you need before entering the next 
> > formula, without respect for which pane or window was completed or 
> > which is on the queue to execute next.
> >
> > herman
> >
> > Monday, March 9, 2009, 4:20:32 PM, you wrote:
> >
> > >
> > Herman,
> >
> > What I said is that I have to exit AFL between passes. That is to 
> > let operations take place that will not run while I am inside the 
> > AFL loop. For instance, recompiling the Parameters window (after 
> > poking the Reset all button with my DLL) takes a whole new AFL pass 
> > from the start. Poking a Preference and applying it with AutoIt can 
> > not ta ke effect while inside the AFL loop. Some things happen at a 
> > higher level than AFL and I have to exit AFL and get back in to let 
> > them take place.
> >
> > If you know another way to do this, I am all ears.
> >
> > BR,
> > Dennis
> >
> >
> > On Mar 9, 2009, at 3:41 PM, Herman wrote:
> >
> >
> > Dennis, for code that needs to re-execute before the next second 
> > refresh you can use a while loop. For example, i use the following 
> > in some of my code:
> >
> > Repeat = 0;
> > While( Repeat )
> > {
> > most of my code in here, if it requires re-execution it sets Repeat 
> > to True. It will re-execute at max afl execution rates until my code 
> > sets Repeat to False.
> > }
> >
> > This works well however you want to put limits on the numb er of 
> > repeats, or break out on the next second refresh, to prevent it from 
> > staying in the loop to long.
> >
> > herman
> >
> > Monday, March 9, 2009, 12:19:17 PM, you wrote:
> >
> > > Gordon,
> >
> > > AFL is event driven. Some event causes your AFL program to execute.
> > > You can check to see which event caused it to run and run all or a
> > > portion of your program depending on the event.
> >
> > > Check back on your suggestion again for an example of bar closed.
> >
> > > You can suggest a new event type that is not already covered if you
> > > need one. However, because the AFL engine is shared between all
> > > charts, a particular chart's AFL will have to wait until a currently
> > > executing chart is done before the next one can be executed. So the
> ; > > AFL engine looks for the next chart that has an event only when it 
> > is
> > > idle.
> >
> > > One event that has been suggested before, that would be useful to me
> > > as well, is an AFL self programmed event. This would be some AFL
> > > statement that would cause the currently running chart to be put 
> > into
> > > the queue to be run again as soon as possible --subject to some CPU
> > > loading constraints, or after a specified delay less than a second.
> > > Currently, if no quotes are coming in, one second is the fastest
> > > guaranteed repeat AFL execution. I have some sequences related to
> > > changing parameters that require 4 passes of the AFL to trigger
> > > certain conditions that have to happen between AFL passes. I shut
> > > down all but the essential AFL during these sequential p asses, but
> > > time drags on when you have to wait for one second each pass.
> >
> > > Best regards,
> > > Dennis
> >
> > > On Mar 9, 2009, at 11:50 AM, Gordon wrote:
> >
> > >> Hi sidhartha70,
> >
> > >> Thanks for your thoughts. I actually did try something like that,
> > >> but seemed to find some sensitive timing issues. My objective was,
> > >> as soon as I detected a new bar (this was using one minute bars), 
> > to
> > >> access information about the just completed bar. At least in my
> > >> experience, it was necessary to introduce a delay so that the
> > >> Ref(XYZ, -1) function returned information about the bar I was
> > >> interested in and not the one before it. In the end, I just felt
> > >> uncomfortable that I had an approach I coul d rely on as being rock
> > >> solid.
> >
> > >> I think I'll revisit it, but in the end, would love to be able to
> > >> rely on a built-in function. Assuming I'm successful in revisting a
> > >> one-off solution, I'll post the results (code).
> >
> > >> The exploration start/stop is a little tougher. One way to do it is
> > >> to invoke AA through _vbscript_, and do your own pre- and post-
> > >> processing. Another might be to create ficticious symbols 
> > guaranteed
> > >> to be the first and last symbols visited by the exploration code 
> > and
> > >> use the name() function to test for them.
> >
> > >> Regards,
> >
> > >> Gordon
> >
> > >> --- In amibroker@xxxxxxxxxxxxxxx, "sidhartha70" sidhartha70@
> > >> wrote:> >
> > >>> Gordon,
> >
> > >>> I'm pretty sure you can code for this type of stuff already in 
> > AFL.
> > >>> You can simply set up your on checks to see if an event has
> > >>> occurred, and if it has, execute any code you want...
> >
> > >>> For example, OnBar() that you are talking about could be achieved
> > >>> by looking for a change in DateTime() of the most recent bar...
> >
> > >>> --- In amibroker@xxxxxxxxxxxxxxx, "Gordon" <gordon@> wrote:
> >
> > >>>> Hi All,
> >
> > >>>> I just posted a new suggestion at www.Amibroker.com/feedback. It
> > >>>> occurred to me that most AB users don't know about or use the
> > >>>> feedback area. So, I wanted to take a second to highlight the
> > >>>> value of using the site to add suggestions and provide feedback
> > >>>> for existing ones. If you haven't gone there (you need to be a
> > >>>> registered AB user), there are tons of neat suggestions.
> >
> > >>>> My second reason for posting is, I'm curious to know how many
> > >>>> would find the addition event-based AFL coding useful -- e.g.
> > >>>> functions you write that would be executed automatically upon the
> > >>>> occurrence of specific events, such as the current bar jused
> > >>>> completed (geared toward tick and other intra-day charts),
> > >>>> backtester started, exploration finished, etc.
> >
> > >>>> Regards,
> >
> > >>>> Gordon
> >
> >
> >
> >
> >
> &g t;
> > >> ------------------------------------
> >
> > >> **** 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
> > >> (submissions sent via other channels won't be considered)
> >
> > >> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> >
> > >> Yahoo! Groups Links
> >
> >
> >
> >
> >
> >
> > > ------------------------------------
> >
&g t; > > **** 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
> > > (submissions sent via other channels won't be considered)
> >
> > > For NEW RELEASE ANNOUNCEMENTS and other news always check 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/





Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___