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

Re: [amibroker] AmiBroker 4.34.0 BETA released - now with user-definable functions with arguments and local variables



PureBytes Links

Trading Reference Links

Tomaz,
	At last, functions!!

Thankyou thankyou thankyou.


On Wed, 30 Apr 2003 09:50 pm, Tomasz Janeczko wrote:
> Hello,
>
> A new beta version (4.34.0) of AmiBroker has just been released.
>
> It is available for registered users only from the members area at:
> http://www.amibroker.com/members/bin/ab4340beta.exe
>
> If you forgot your user name / password to the members area
> you can use automatic reminder service at:
> http://www.amibroker.com/login.html
>
> The highlight of this release are user definable functions / procedures
> allowing passing parameters and supporting local variables.
>
> Please read "HELP ON NEW FEATURES" section below for the details.
> The description of remaining additions is included in the CHANGE LOG
> later in this document.
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
>
> AmiBroker 4.34.0 Beta Read Me
> April 30, 2003 13:42
>
> THIS IS AN EARLY BETA VERSION OF THE SOFTWARE. EXPECT BUGS !!!
>
> AGAIN: THIS IS AN EARLY BETA VERSION OF THE SOFTWARE. EXPECT BUGS !!!
>
>
> Backup your data files and entire AmiBroker folder first!
>
> INSTALLATION INSTRUCTIONS
>
> IMPORTANT: This archive is update-only. You have to install full version
> 4.30 first.
>
> Just run the installer and follow the instructions.
>
> Then run AmiBroker. You should see "AmiBroker 4.34.0 beta" written in the
> About box.
>
> HELP ON NEW FEATURES
> USER-DEFINABLE FUNCTIONS, PROCEDURES, LOCAL/GLOBAL VARIABLES (4.34 or
> higher)
>
> Here is a sample code showing user-defined function:
>
> // the following function is 2nd order smoother
>
> function IIR2( input, f0, f1, f2 )
> {
>   result[ 0 ] = input[ 0 ];
>   result[ 1 ] = input[ 1 ];
>
>   for( i = 2; i < BarCount; i++ )
>   {
>     result[ i ] = f0 * input[ i ] +
>     f1 * result[ i - 1 ] +
>     f2 * result[ i - 2 ];
>   }
>
>   return result;
> }
>
> Plot( Close, "Price", colorBlack, styleCandle );
> Plot( IIR2( Close, 0.2, 1.4, -0.6 ), "function example", colorRed );
>
>
> In this code IIR2 is a user-defined function. input, f0, f1, f2 are formal
> parameters of the functions. At the time of function call the values of
> arguments are passed in these variables. Formal parameters behave like
> local variables. Later we have result and i which are local variables.
> Local variables are visible inside function only. If any other function
> uses the same variable name they won't interfere between each other.
>
> Due to the fact that AFL does not require to declare variables the decision
> whenever given variable is treated as local or global is taken depending on
> where it is FIRST USED.
>
> If given identifier appears first INSIDE function definition - then it is
> treated as LOCAL variable. If given identifier appears first OUTSIDE
> function definition - then it is treated as GLOBAL variable.
>
> Example (commentary):
>
> k = 4; // this is GLOBAL variable
>
> function f( x )
> {
>   z = 3; // this is LOCAL variable
>   return z * x * k; // 'k' here references global variable k (first used
> above outside function) }
>
> z = 5; // this is GLOBAL variable with the same name as local variable in
> function f
>
> "The value of z before function call :" + WriteVal( z );
>
> // Now even if we call function
> // the value of our global variable z
> // is not affected by function call because
> // global variable z and local variable z are separate and
> // arguments are passed by value (not by reference)
>
> "The result of f( z ) = " + WriteVal( f( z ) );
>
> "The value of z after function call is unchanged : " + WriteVal( z );
>
>
> At the end of the function we can see 'return' statement that is used to
> return the result to the caller. Note that currently return statement must
> be placed at the very end of the function.
>
> It is also possible to write a procedure (a function that returns nothing
> (void))
>
> procedure SinePlotter( Freq, ColorIndex )
> {
>   pname = "Line"+WriteVal(ColorIndex,1.0);
>   array = sin( Cum( Freq * 0.01 ) );
>   Plot( array, pname , colorRed + ColorIndex, styleThick );
> }
>
> for( n = 1; n < 10; n++ )
> {
>   SinePlotter( n/2+Cum(0.01), n );
> }
>
> Note that although there are two separate keywords 'function' and
> 'procedure' AmiBroker currently treats them the same (they both accept
> return values but not require them), but in the future the rules maight get
> enforced to use return statement ONLY in conjunction with function keyword.
> So it is advised to use function keyword in case when your function returns
> any value and procedure keyword otherwise.
>
> Note also that recursion (having a function call itself from within itself)
> is NOT supported as for now.
>
>
> FLOW CONTROL AND LOOPING (4.31 or higher)


------------------------ Yahoo! Groups Sponsor ---------------------~-->
Get A Free Psychic Reading! Your Online Answer To Life's Important Questions.
http://us.click.yahoo.com/O10svD/Me7FAA/AG3JAA/GHeqlB/TM
---------------------------------------------------------------------~->

Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

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