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

Re: [amibroker] Re: Trading platform + AB



PureBytes Links

Trading Reference Links

Hello,

I appreciate your feedback. Yes I fully agree about code examples.
Thank you for your kind words about AB.

As to last paragraph - with current inflation I guess it would not be very
wise move to sell profitable and expanding company as $$$ offered today
will be dilluted pretty fast. I belive that on the long run a good business is
the most safe, profitable and enjoyable way to grow your wealth. 
I would paraphase "you don't sell the goose that lays the olden eggs".

Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message ----- 
From: "scourt2000" <stevehite@xxxxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Thursday, January 31, 2008 3:05 AM
Subject: [amibroker] Re: Trading platform + AB


> 
> Thanks for the clarification Tomasz.  
> 
> You would get a lot of new business with direct chart trading 
> capabilities.
> 
> I think once all of the pieces are finally in place, you just need to 
> put something together that's one level of abstraction up so common 
> users aren't left with a bunch of basic parts and don't know exactly 
> what to do with them.   Formalize some templates that have some meat 
> to them and you'll get all kinds of interest in this idea that 
> equates to more subscriptions.
> 
> The suggestions by Dennis were excellent too.  People would want to 
> use modifier keys in addition to mouse clicks so they could change 
> the the type of order being placed.
> 
> Tomasz, the one thing I love about your product is that you aren't 
> extracting a pound of flesh from me on a monthly basis.  Think of all 
> of your competitors out there who are doing just that.  You've been 
> more than fair with your upgrade policies and you would certainly get 
> more market share taken away from them by getting Amibroker into the 
> chart-trading-with-multiple-brokerages world. 
> 
> Our only problem at that point would be a big company who would want 
> to buy you out and you couldn't say 'no' to all of that money being 
> thrown at you.
> 
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> 
> wrote:
>>
>> Hello,
>> 
>> The point is that you don't understand execution model of AB.
>> If you click on ANY place chart pane, all panes belonging to given 
> chart are
>> refreshed. This is so because the SELECTED date/time changed for 
> all panes
>> and you want your custom Title, chart values,
>> and indicators recalculated. There are many formulas that use 
> SelectedValue()
>> to display things that depend on the selected date.
>> 
>> AFL execution is ALREADY _event_ driven. It is NOT polled. It 
> executes ONLY when there is an event
>> (mouse click, real-time refresh, zoom in/out, change of current 
> symbol, user-defined timer (RequestTimedRefresh) etc).
>> 
>> The callback idea on the surface looks attractive, but once 
> implemented you wil
>> see yourself repeating lots of code or calling the same global 
> functions over and over
>> again and this would inefficient.
>> 
>> For example, let's say that your indicator that you use for trading 
> takes 0.5 second
>> to execute.
>> 
>> With current design, when mouse click occurs your indicator is 
> calculated ONCE
>> and you can use its values stored in a variable for anything (draw 
> chart, handle mouse clicks,
>> auto-trade, display alarms, perform more calculations) - all with 
> ONE calculation
>> of your time-consuming indicator.
>> 
>> If your call-back driven model was implemented after mouse click 
> the following call back
>> functions would be called:
>>  
>> OnLButtondDown
>> OnChartRefresh
>> OnNewDateTimeSelected
>> 
>> And you would need to calculate your indicator THREE times in each 
> function 
>> if you want its values. This is because the callback approach 
> assumes that
>> there is NO "global" code executed always. And this would be three 
> times slower.
>> 
>> Actually the whole distinction about this call-back thing is 
> rather "philosophical"
>> because in practice in Windows the application has SINGLE 
> application message loop (per thread)
>> and messages from ALL sources land in ONE queue that is handled
>> by one simple loop (see PeekMessage/GetMessage/DispatchMessage)
>> The message is pumped to active window.
>> All those call-backs and what you see in higher-level languages are
>> just functions called from big switch and/or message map (which is 
> also switch / if-like construct)
>> that is inside WindowProc function that receives all messages.
>> 
>> http://msdn2.microsoft.com/en-us/library/aa452701.aspx
>> 
>> This has NOTHING to do with interrupts.  Interrupts exist on PC 
> platform on HARDWARE level
>> and are used by operating system only. Interrupts are asynchronous 
> and one interrupt can
>> actually stop the execution of other code to handle the interrupt.
>> Message processing (what software applications do) is fully 
> sequential and message processing is
>> NOT interrupted (i.e. one message must be fully processed before 
> processing next one).
>> I am of course speaking what happens on single thread level (not 
> couting that your app may be switched out by pre-emptive OS)
>> 
>> For this reason, you can implement your "callback" approach by 
> yourself, just write a switch
>> 
>> Store code below in "myCallbackHandler.afl" file in the Include 
> folder so you can use it whenever you want
>> 
>> function EventHandler() 
>> { 
>> local b, x, y; 
>> b = GetCursorMouseButtons(); 
>> x = GetCursorXPosition(); 
>> y = GetCursorYPosition(); 
>> 
>> if( b & 1 ) OnLMouseButton( x, y ); 
>> if( b & 2 ) OnRMouseButton( x, y ); 
>> if( b & 4 ) OnMMouseButton( x, y ); 
>> } 
>> 
>> 
>> EventHandler(); 
>> 
>> Then in your formula put #include <mycallbackhandler.afl> at the 
> END of the formula:
>> 
>> function OnLMouseButton(x, y) 
>> { 
>>    _TRACE("LButton x = " + DateTimeToStr( x ) + " y = " + y ); 
>> } 
>> 
>> function OnRMouseButton(x, y) 
>> { 
>>    _TRACE("RButton x = " + DateTimeToStr( x ) + " y = " + y ); 
>> } 
>> 
>> function OnMMouseButton(x, y) 
>> { 
>>    _TRACE("MButton x = " + DateTimeToStr( x ) + " y = " + y ); 
>> } 
>> 
>> Graph0=C; 
>> 
>> #include <mycallbackhandler.afl>
>> 
>> 
>> And Herman is CORRECT in his response. The only thing needed to 
> actually know to make it work
>> perfectly is window handle that received the mouse click (chartID 
> is not enough as there can be
>> two panes shareing the same). The ability to know window handle 
> that received mouse click will be added.
>> 
>> Best regards,
>> Tomasz Janeczko
>> amibroker.com
>> ----- Original Message ----- 
>> From: "scourt2000" <stevehite@xxx>
>> To: <amibroker@xxxxxxxxxxxxxxx>
>> Sent: Wednesday, January 30, 2008 2:51 AM
>> Subject: [amibroker] Re: Trading platform + AB
>> 
>> 
>> > 
>> > "This can be done now using GetCursorMouseButtons(), 
>> > GetCursorXPosition() and GetCursorYPosition() . HOWEVER there is 
> no 
>> > function that returns the ChartID for the chartpane over which 
> the 
>> > mouse is clicked"
>> > 
>> > Hi Herman,
>> > 
>> > All of that chartID stuff would not be necessary if you tied the 
>> > mouse button clicks to well-known event routines (like that ones 
> I 
>> > mentioned as an example) which get called specifically from the 
> AFL 
>> > code behind a chart pane.
>> > 
>> > You want this type of facility event-driven, not polled.  Polling 
>> > puts more work on the user's side and brings up other unpleasant 
> side-
>> > effects like what you just described.  
>> > 
>> > Which would you rather do?  
>> > 
>> > 1) Code a rats nest of polling inline with your other AFL code
>> > 
>> > -or-
>> > 
>> > 2) Have a well-known function called on a mouse click with all of 
> the 
>> > information you need provided as the function parameters directed 
> to 
>> > the script already bound to a particular chart pane?
>> > 
>> > Anyone who chooses #1 last seriously programmed a computer more 
> than 
>> > 20 years ago.
>> > 
>> > "That's available now - check the list of functions, duude."
>> > 
>> > No it's not...duude [sic]
>> > 
>> > 
>> > 
>> > Please note that this group is for discussion between users only.
>> > 
>> > To get support from AmiBroker please send an e-mail directly to 
>> > SUPPORT {at} amibroker.com
>> > 
>> > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
>> > http://www.amibroker.com/devlog/
>> > 
>> > For other support material please check also:
>> > http://www.amibroker.com/support.html
>> > 
>> > Yahoo! Groups Links
>> > 
>> > 
>> >
>>
> 
> 
> 
> 
> Please note that this group is for discussion between users only.
> 
> To get support from AmiBroker please send an e-mail directly to 
> SUPPORT {at} amibroker.com
> 
> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> http://www.amibroker.com/devlog/
> 
> For other support material please check also:
> http://www.amibroker.com/support.html
> 
> Yahoo! Groups Links
> 
> 
> 


Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

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

For other support material please check also:
http://www.amibroker.com/support.html
 
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/