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

[amibroker] Re: AFL 101



PureBytes Links

Trading Reference Links

Tomasz,

Thankyou very much.

This was a very good answer for me, especially the explanation at the end (I am interested in those concepts).



--- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> wrote:
>
> > How could I use VarSet to create an array of arrays?
> 
> As I wrote before multi-dimensional array in linear computer memory is represented
> in all languages as array (or set) of array(s). Having that in mind it is easy to implement
> multi-dim via VarSet/VarGet
> 
> I explained it here
> http://finance.groups.yahoo.com/group/amibroker/message/86446
> 
> Quote:
> 
> "Desired access to tablename[x][y] can be implemented as follows
> using VarSet / VarGet (note that this is only ONE OF MANY possible ways)
> 
> function Set2DimTable( tablename, x, y, value )
> {
> VarSet( tablename + StrFormat("%05.0f%05.0f", x, y ), value );
> }
> 
> function Get2DimTable( tablename, x, y )
> {
> return VarGet( tablename + StrFormat("%05.0f%05.0f", x, y ) );
> }
> 
> 
> Example use:
> 
> Set2DimTable( "blabla", 2, 3, High[ 0 ] );
> "
> 
> 
> You can of course instead of storing single values you can store entire arrays.
> 
> Like this:
> 
> function Set2DimTableRow( tablename, row, array )
> {
> VarSet( tablename + StrFormat("%05.0f", row), array );
> }
> 
> function Get2DimTableRow( tablename, row)
> {
> return VarGet( tablename + StrFormat("%05.0f", column ) );
> }
> 
> In this second example, single row represents "normal" AFL array,
> but you can store a number of rows (arrays) in a set of rows making
> it array of the array.
> 
> Multi-dimensional arrays by nature are always mapped in one way
> or another into linear (single-dimension) computer memory. Whenever
> this mapping is done by means of multiple dynamic variables explicitely
> like in the example above, or by the pointer manipulation (as in C),
> or by another subscript - is pretty cosmetic issue and does not really matter.
> Dynamic variables (VarGet/VarSet) and arrays are basically orthogonal concepts,
> with only one difference, while arrays allow only NUMERIC subscripts,
> dynamic variables allow free text subscripts (it is form of map or hash table - and internally
> implemented as hash table), which actually is more flexible, not less as some may think.
> 
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message ----- 
> From: "brian_z111" <brian_z111@xxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Tuesday, March 24, 2009 4:38 PM
> Subject: [amibroker] Re: AFL 101
> 
> 
> > Yes, I understand the distinction between array and multi-dimensional arrays and I appreciate ABs' capabilities in the speed with 
> > which it handles arrays.
> >
> >> I can understand your difficulties but the fact that you don't >understand something
> >> or don't know how to use some functionality, does not mean that it >does not exist nor that it is not useful.
> >
> > Yes, that is true (except for the difficulties part ... I am not having any difficulties .... happy to discuss the pros and cons 
> > of AB for the benefit of newcomers though).
> >
> >> I sincerely appreciate your willingness to teach me what array is, >and what can be considered array function and what not.
> >
> > I don't know about that.
> >
> > Really I think it us just an interesting and educational discussion and other 101'ers must have got something out of it (possibly 
> > they found the Wiki link relevant too).
> >
> > Once again I thank you for a very good educational post.
> >
> >
> > Re VarSet/VarGet:
> >
> > You have mentioned using them to produce dynamic arrays before (in this forum I think) BUT the help manual doesn't say anything 
> > about the possibility in using them that way .... it indicates that the function only accepts a value (singular) for the argument 
> > and the example uses only a single value ....  unless you changed something in the beta (I don't use beta releases ... I wait for 
> > the new version upgrade + manual).
> >
> > How could I use VarSet to create an array of arrays?
> >
> >
> > VARSET
> > - sets the value of dynamic variable Miscellaneous functions
> > (AFL 2.60)
> >
> >
> > SYNTAX  VarSet( ''varname'', value )
> > RETURNS NUMBER
> > FUNCTION  Sets the value of dynamic variable. Returns 1 on success, 0 on failure.
> > Dynamic variables are variables that are named dynamically, typically by creating a variable name from a static part and a 
> > variable part. The following example dynamically constructs the variable name from a variable prefix and a static suffix.
> >
> > EXAMPLE for( i = 1; i < 10; i++ )
> > {
> > VarSet( "C"+i, Ref( C, -i ) );
> > }
> >
> > // creates variables C1, C2, C3, C4, ...., C10 equal to Ref( C, -1 ), Ref( C, -2 ),   ..., Ref( C, -10 )
> > // respectively
> >
> >
> >
> >
> >
> >
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@> wrote:
> >>
> >> Hello,
> >>
> >> Sorry, but it is complete waste of time to discuss basics and wikipedia refs.
> >> You are mixing terms and you don't really understand what I am saying.
> >>
> >> FWIW: matrix is not the same array, at least not in the meaning I used in the post.
> >> When I speak about array - I mean one dimensional array (vector) the only one that is
> >> directly representable in computer (linear) memory.
> >> And array are of course natively supported in AFL (unlike other languages that DO NOT feature
> >> array operations (you can not use simply operator + to add arrays (element by element) in other general purpose languages).
> >> Matrix is 2 and higher dimension - the "array of the array(s)"
> >>
> >> (FWIW: MATLAB, IDL, S-lang are NOT general purpose languages. General purpose languages
> >> are those in which actual applications are written, i.e. C, C++, Java, Basic, Pascal, etc).
> >>
> >> Your response clearly shows that you don't even know what you want
> >> (see  "very good for developers/instutions and the handful of traders who want to write their own trading program [...]
> >> hardly what the average trader wants to have to do before they can start trading" in the response
> >> to me pointing out direct database read/write interface that you claimed does not exist ).
> >>
> >>
> >> I can understand your difficulties but the fact that you don't understand something
> >> or don't know how to use some functionality, does not mean that it does not exist nor that it is not useful.
> >> Some things simply require learning and time to "sink in". Take your time and you will see enourmous
> >> possibilities existing in AFL and will understand that the limit is only your imagination.
> >>
> >> I sincerely appreciate your willingness to teach me what array is, and what can be considered array function and what not,
> >> what is native function or not, but as far as I remember I wrote AmiBroker myself so probably, I know a little about all that
> >> already.
> >>
> >> Best regards,
> >> Tomasz Janeczko
> >> amibroker.com
> >> ----- Original Message ----- 
> >> From: "brian_z111" <brian_z111@>
> >> To: <amibroker@xxxxxxxxxxxxxxx>
> >> Sent: Tuesday, March 24, 2009 2:27 PM
> >> Subject: [amibroker] Re: AFL 101
> >>
> >>
> >> > Hello Tomasz,
> >> >
> >> > Thanks for your educational post, I thoroughly enjoyed it.
> >> >
> >> > Quirky != bad;
> >> >
> >> > (some people like quirkiness ... like Bob Dylan in his song "Simple Twist of Fate")
> >> >
> >> > Of course I am just giving an opinion from my perspective (personal).
> >> >
> >> > Re your points:
> >> >
> >> > C language - I was just quoting from one of your posts .... I should have given the link because you did include some context
> >> >
> >> > http://finance.groups.yahoo.com/group/amibroker/message/135059
> >> >
> >> >> As for "matrix" operations - that this does not belong to the >definition of any general purpose language.
> >> >
> >> > I did a little bit of reading on 'languages that have array functions' when we had a short discussion on array programming 
> >> > before
> >> > and found this link:
> >> >
> >> > http://en.wikipedia.org/wiki/Comparison_of_programming_languages_(array)
> >> >
> >> > (it comes from the Wikipedia array page)
> >> >
> >> > http://en.wikipedia.org/wiki/Array
> >> >
> >> > As I said, there is no point in comparing AFL to a GP language .... it is quirky to me that AFL is an array language and 
> >> > doesn't
> >> > have a full suite of array functions .... perhaps other languages that are intended to handle price arrays etc would be a 
> >> > better
> >> > comparison.
> >> >
> >> >> Having said that, for anyone needing multiple dimensional arrays in AFL there are several options:
> >> >
> >> >> a) use VarGet/VarSet (the 2-dim array is simply array of the array, so for N:M 2-dim array you need N AFL arrays)
> >> >> b) using embedded JScript parts with AFL
> >> >> c) using free open source Osaka plugin (you can extend it to your needs since all sources are available)
> >> >> d) using any external COM object (written in VB for example if you need that)
> >> >
> >> > Except for a) none of these meet the criteria of "Native" to the language (AFL)
> >> >
> >> > VarGet/VarSet can hardly be described as a suite of array functions.
> >> >
> >> >
> >> > Neither a, b, c or d achieve your own stated objective:
> >> >
> >> >> SIMPLICITY OF USE plus compactness of code is the paramount design >decision.
> >> >
> >> >> The database is exposed in two ways:
> >> >> First (more general)
> >> >> full OLE read/write direct access to the database - see Stocks/Stock/Quotations/Quotation objects:
> >> >> http://www.amibroker.com/guide/objects.html
> >> >> - and this OLE interface is DIRECTLY available from AFL level.
> >> >
> >> >
> >> > That is very good for developers/instutions and the handful of traders who want to write their own trading program built around
> >> > AB.
> >> >
> >> >
> >> .
> >> >
> >> > Anyway, all of this could be done much easier from within AFL using AFL functions .... there is no need at all to use OLE for 
> >> > this
> >> > type of thing .... it seems like overkill to me for a simple array processing language.
> >> >
> >> >
> >> >
> >> >> Second (easier)
> >> >> AddToComposite/Foreign - gives you easy to use way to STORE and >READ from the AmiBroker database.
> >> >
> >> > ATC is time dependent ... when timeframe compression is used it starts to become quirky and that is just the beginning.
> >> >
> >> > Once again hardly a substitute for a full suite of native database functions.
> >> >
> >> >
> >> > --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@> wrote:
> >> >>
> >> >> Hello,
> >> >>
> >> >> There are several misconceptions in what was written here.
> >> >> AFL is specifically designed to protect the newbie and people without coding experience
> >> >> from programming stuff like memory allocation/deallocation, pointer manipulation,
> >> >> declarations, type casting, etc.
> >> >>
> >> >> So although it looks like C it is way more easy than C.
> >> >>
> >> >> What is single operator in AFL (like array addition) involves many line of code in C
> >> >> plus memory allocation/deallocation (and keeping track on all that).
> >> >>
> >> >> SIMPLICITY OF USE plus compactness of code is the paramount design decision.
> >> >> That's why arrays in AFL are automatically managed, have size that automatically
> >> >> refers to "visible" area, so you can simply add arrays with single + operator.
> >> >>
> >> >> With general purpose C language with "normal" arrays you would need to manage memory for arrays by yourself,
> >> >> alignment (if size differs which elements to add), looping (you need to perform calculations
> >> >> on individual elements of array).
> >> >> (maybe you don't know but in C and there are no built-in dynamic arrays, only fixed compile-time size is supported,
> >> >> and dynamic array is implemented via pointers and explicit memory allocation malloc/free)
> >> >>
> >> >> As for "matrix" operations - that this does not belong to the definition of any general purpose language.
> >> >>
> >> >> There are no "matrix" operations in any popular general purpose language C/C++/Java/JScript/Basic/Pascal.
> >> >>
> >> >> In C/C++ even scalar trigonometric operations like sin( x) or string concatenation are NOT part of the language.
> >> >>
> >> >> The language itself defines:
> >> >> a) syntax
> >> >> b) basic arithmetic operators + precedence working on primitive types only (scalar integer and/or float)
> >> >> c) flow control (conditional execution, loops)
> >> >> d) structural concepts (variables/functions/procedures/structures/objects)
> >> >> e) some miscellaneous stuff like run-time type info, exception handling etc.
> >> >>
> >> >> And that's it.
> >> >>
> >> >> Anything more is supplied by LIBRARIES. In C there is a library for basic string manipulation (such as concatenation
> >> >> - strcat) or floating point. The same with any high-level stuff like matrices - this is the area which
> >> >> is implemented by EXTERNAL libraries (not part of the language).
> >> >> Libraries in AFL can be provided by:
> >> >> a) #include - the AFL code implementing features via functions
> >> >> b) AmiBroker Development Kit - allowing to write extensions (functions) as a DLL in any compiled language.
> >> >> c) JScript/VBScript
> >> >> d) any external COM object http://www.amibroker.com/guide/a_aflcom.html
> >> >>
> >> >> This covers any imaginable application and any imaginable need you may have.
> >> >>
> >> >> Having said that, for anyone needing multiple dimensional arrays in AFL there are several options:
> >> >> a) use VarGet/VarSet (the 2-dim array is simply array of the array, so for N:M 2-dim array you need N AFL arrays)
> >> >> b) using embedded JScript parts with AFL
> >> >> c) using free open source Osaka plugin (you can extend it to your needs since all sources are available)
> >> >> d) using any external COM object (written in VB for example if you need that)
> >> >>
> >> >> If anyone is "advanced enough" to need multiple dimensional arrays, it is also "advanced enough" to use these options
> >> >> without any trouble.
> >> >>
> >> >>
> >> >> Also with regards to:
> >> >> > - some of the architecture of AB is quirky also e.g. essentially it is a database, at the binary level, but you can't write
> >> >> > directly to the native database
> >> >> That is entirely not true.
> >> >> The database is exposed in two ways:
> >> >> First (more general)
> >> >> full OLE read/write direct access to the database - see Stocks/Stock/Quotations/Quotation objects:
> >> >> http://www.amibroker.com/guide/objects.html
> >> >> - and this OLE interface is DIRECTLY available from AFL level.
> >> >>
> >> >> Second (easier)
> >> >> AddToComposite/Foreign - gives you easy to use way to STORE and READ from the AmiBroker database.
> >> >>
> >> >> Best regards,
> >> >> Tomasz Janeczko
> >> >> amibroker.com
> >> >> ----- Original Message ----- 
> >> >> From: "brian_z111" <brian_z111@>
> >> >> To: <amibroker@xxxxxxxxxxxxxxx>
> >> >> Sent: Tuesday, March 24, 2009 1:46 AM
> >> >> Subject: [amibroker] Re: AFL 101
> >> >>
> >> >>
> >> >> > My perspective as a newcomer to programming when I started into AB/AFL around 2-3 years ago:
> >> >> >
> >> >> > - Tomasz says that AB is most like C
> >> >> > - primarily one has to learn AFL fullstop
> >> >> > - experienced programmers sometimes have to unlearn somethings and find this hard to do for a while
> >> >> > - in some ways programming naivity paid off for me as I am at home with array programming
> >> >> > - in other places I am lost because nothing can fill the missing link of not being familiar with syntax that is common to 
> >> >> > other
> >> >> > languages (called experience)
> >> >> > - AFL is quirky ..... some things that intuitively and logically seem needed are 'missing' and then you have to work around
> >> >> > that
> >> >> > e.g. IMO it is bizarre that AFL has been around for many years but doesn't have dynamic arrays or matrix functions ... the
> >> >> > quirky
> >> >> > aspects of AFL make it extremely difficult for lay people ... every time you get on a roll you find an exception
> >> >> > - some of the architecture of AB is quirky also e.g. essentially it is a database, at the binary level, but you can't write
> >> >> > directly to the native database
> >> >> > - to save you future distress....many in the past have asked for an AFL book...the logic seems compelling to me
> >> >> > - everyone starts from a different place so some need an 'Intro to AB', book
> >> >> > - I like Howards contributions overall but IMO it is rather old world to publish in hard copy ... an ebook would be much 
> >> >> > better
> >> >> > ... we have to consider that AB/AFL is way beyond the 500 pages allocated to it ib Howard's 2 books.
> >> >> > - the AFL library is not the place to learn code ... good for sharing code between experienced AFL'ers
> >> >> > - this forum is a book and contains at least 1000* the code, help, code and trading tips available anywhere else .....
> >> >> > unfortunately it lacks sections, an index and topics etc .... once again the logic for a better forum (from an educational
> >> >> > perspective) seems compelling.
> >> >> >
> >> >> > (Sorry Rik but Google searching Yahoo doesn't reference threads does it?)
> >> >> >
> >> >> > - AB/AFL is huge ... I don't think any layperson will ever cover it all without a big effort to become a programming expert,
> >> >> > albeit one who specialises in AFL
> >> >> >
> >> >> > - AB is not a democracy or an open project
> >> >> >
> >> >> > BTW all of the advice given in this thread so far is spot on.
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> > --- In amibroker@xxxxxxxxxxxxxxx, "louies88" <Louies88@> wrote:
> >> >> >>
> >> >> >> I think Amibroker is great, especially its AFL. Although I don't know enough about it to claim that it's superior than most
> >> >> >> other
> >> >> >> scripting languages out there, I know for a fact that this is one of the best. That also begs the question of how a person 
> >> >> >> w/
> >> >> >> virtually no programming background can get started w/ AFL. I followed this forum long enough to note that some of you in 
> >> >> >> here
> >> >> >> are excellent coders. The codes that I often see are flawless and eloquent, which then makes me think how long does it take 
> >> >> >> a
> >> >> >> coding newbie such as myself to attain that coding level.
> >> >> >>
> >> >> >> I look at it this way. Coding a computer language is pretty similar to learning a foreign language. I remember how my first
> >> >> >> English class went. I started out by learning a few basic vocabulary words, then use some of it in the form of a noun, then 
> >> >> >> a
> >> >> >> verb, finally an object. Sentence structures, or in computer language better known as syntax, govern if a sentence is
> >> >> >> grammatically correct or if it's not. With that in mind, I also started out by looking at the AFL Library in Amibroker. I
> >> >> >> downloaded all of the functions in the hope of building myself an Amibroker vocabulary and started to put some of the basic
> >> >> >> vocabulary words together to make a "sentence."
> >> >> >>
> >> >> >> However, since there isn't any kind of document FORMALLY teaching the ABC of coding in Amibroker, I'm left w/ a question 
> >> >> >> how
> >> >> >> does
> >> >> >> Amibroker syntax work? Some of the experienced coders here often compare AFL syntax to that of C++. But for a person w/
> >> >> >> neither
> >> >> >> background in AFL or C++ or any other computer langugae, the question remains: How do I get start? Where's the square one?
> >> >> >>
> >> >> >> Anybody w/ such experience is highly appreciated if he/she's willing to shed a light on this.
> >> >> >>
> >> >> >>
> >> >> >> Thanks
> >> >> >>
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >> > ------------------------------------
> >> >> >
> >> >> > **** 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/