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

RE: [amibroker] Re: Image Copy Problem even when copied to Word.



PureBytes Links

Trading Reference Links




It 
looks correct on my system Tomasz
 

 
Regards, 
Jayson 
<FONT face=Tahoma 
size=2>-----Original Message-----From: Tomasz Janeczko 
[mailto:amibroker@xxxxxx]Sent: Thursday, May 22, 2003 2:48 
PMTo: amibroker@xxxxxxxxxxxxxxxSubject: Re: [amibroker] 
Re: Image Copy Problem even when copied to Word.
Salil,
 
Thank you for posting the image. Indeed it should look 
different.
The bottom bar should be in the background color (in your 
setup grey)
and show "created with Amibroker.." text.
Will check this out.
 
Best regards,Tomasz Janeczkoamibroker.com
<BLOCKQUOTE dir=ltr 
>
  ----- Original Message ----- 
  <DIV 
  >From: 
  Salil V 
  Gangal 
  To: <A 
  href="" 
  title=amibroker@xxxxxxxxxxxxxxx>amibroker@xxxxxxxxxxxxxxx 
  Sent: Thursday, May 22, 2003 7:21 
PM
  Subject: RE: [amibroker] Re: Image Copy 
  Problem even when copied to Word.
  
  
  Ken and Ara,
   
  I re-installed AmiBroker over the existing installation and applied the 
  latest Beta patch. I'll attach what I get as copied image.  Still the 
  black-bar at the bottom of the image is visible. I used XnView to copy the 
  image.
   
  Regards,
  - Salil V GangalKen Close <<A 
  href="">closeks@xxxxxxxx> wrote:
  <BLOCKQUOTE 
  >Salil: 
    no problems with my setup, copying with both bitmap and metafile.I see 
    that TJ put in a message along the bottom "Created with Amibroker... " 
    so perhaps this added text message is somehow causing your bitmapto show 
    a black border.  My graph background is black and the message isin 
    white text along the bottom.Ken-----Original 
    Message-----From: salil_gangal [mailto:salil_gangal@xxxxxxxxx] Sent: 
    Thursday, May 22, 2003 12:01 PMTo: amibroker@xxxxxxxxxxxxxxxSubject: 
    [amibroker] Re: Image Copy Problem even when copied to 
    Word.Friends,Similar problem comes-up if the copied image is 
    pasted into Microsoft WORD.  So I guess there is a bug in 
    AmiBroker.  Are there any others who have noticed that there is a 
    bar at the bottom of the copied image copied using 'Edit->Image Copy' 
    ?Regards,- Salil V Gangal--- In 
    amibroker@xxxxxxxxxxxxxxx, Salil V Gangal <salil_gangal@xxxx> 
    wrote:> Tomasz,> > I am copying chart image using 
    'Edit->Copy As Image'.> > But I noticed that copied image 
    gets a black-band at the bottom.  Have you noticed> anything 
    like this ?  Is this a bug ?  BTW, I import the image into 
    XnView, and I'm> not sure if this is AmiBroker issue or XnView 
    issue.> > Regards,> > - Salil V Gangal> 
    > > --- Tomasz Janeczko <amibroker@xxxx> wrote:> 
    > Hello,> > > > A new beta version (4.38.0) of 
    AmiBroker has just been released.> > > > It is available 
    for registered users only from the members area at:> > <A 
    href="">http://www.amibroker.com/members/bin/ab4380beta.exe> 
    > > > If you forgot your user name / password to the members 
    area> > you can use automatic reminder service at: <A 
    href="">http://www.amibroker.com/login.html> 
    > > > Short list of changes in this beta (read change log in 
    the "read me" below for the> > details)> > > 
    > a.. send e-mails with charts directly from AmiBroker: 
    Edit->Image->Send by email> > and File->Send chart 
    via e-mail > > a.. added export chart image to PNG (portable 
    network graphics) file:> > Edit->Image->Export to PNG 
    file > > > > a.. new setting for candlestick appearance: 
    Tools->Preferences->Charting, "Use> > distinct color 
    for" : "None, up candle hollow" - it plots entire candle with 
    one> > color but leaves interior of UP candle body hollow.> 
    > > > a.. fixed positioning of arrows in image copies 
    (Edit->Image->Copy)> > > > a.. fixed crash 
    occurring when printer device context did not support bit blit> 
    > copies. added very simple arrow line drawing for that case (will be 
    improved in> > future releases)> > > > a.. 
    fixed bug in handling Null with new constructs: if, while and 
    for.> > > > a.. numbers (floats) are now 
    automatically 'upsized' to arrays on first use of> > l-value 
    array subscript operator without causing error. > > .> > 
    > > Best regards,> > Tomasz Janeczko> > 
    amibroker.com> > > > AmiBroker 4.38.0 Beta Read 
    Me> > May 20, 2003 1:11 > > > > 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.38.0 beta" written in the About> > box.> 
    > > > See CHANGE LOG below for detailed list of 
    changes.> > > > 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 depends 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.> > 
    > > This default behaviour can be however overriden using global 
    and local keywords> > (introduced in 4.36) - see example 
    2.> > > > 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 );> > > 
    > > > Example 2: Using local and global keywords to override 
    default visibility rules:> > > > VariableA = 5; // 
    implict global variable> > > > function Test()> 
    > {> >  local VariableA;  // explicit local variable 
    with the same identifier as global > >  global VariableB; 
    // explicit global variable not defined earlier> 
    >                    
    // may be used to return more than one value from the function> 
    > > >  VariableA = 99;> >  VariableB = 
    333;> > } > > > > VariableB = 1; // global 
    variable> > > > "Before function call";> > 
    "VariableA = " + VariableA;> > "VariableB = " + VariableB;> 
    > > > Test(); > > > > "After function 
    call";> > "VariableA = " + VariableA + " (not affected by function 
    call )";> > "VariableB = " + VariableB + " (affected by the 
    function call )"> > > > 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)> > > > do-while Statement> > > 
    > The do-while statement lets you repeat a statement or compound 
    statement until a> > specified expression becomes false. 
    > > > > Syntax> > > > do statement 
    while ( expression ) ;> > > > The expression in a 
    do-while statement is evaluated after the body of the loop is> 
    > executed. Therefore, the body of the loop is always executed at 
    least once. > > > > The expression must have numeric 
    or boolean type. Execution proceeds as follows: > > > 
    >   1.. The statement body is executed.> > > 
    > > >   2.. Next, expression is evaluated. If 
    expression is false, the do-while> > statement terminates and 
    control passes to the next statement in the program. If> > 
    expression is true (nonzero), the process is repeated, beginning with 
    step 1. > > This is an example of the do-while statement:> 
    > > > x=100;> > do > > {> 
    >     y = sin( x );> 
    >     x--;> > } while ( x > 0 );> 
    > In this do-while statement, the two statements y = sin( x ); and 
    x--; are> > executed, regardless of the initial value of x. 
    Then x > 0 is evaluated. If x is> > greater than 0, the 
    statement body is executed again and x > 0 is reevaluated. 
    The> > statement body is executed repeatedly as long as x remains 
    greater than 0.> > Execution of the do-while statement 
    terminates when x becomes 0 or negative. The> > body of the 
    loop is executed at least once. > > > > > > 
    while Statement> > The while statement lets you repeat a statement 
    until a specified expression> > becomes false. > > 
    > > Syntax> > > > while ( expression ) 
    statement> > > > The expression must have arithmetic 
    (numeric/boolean) type. Execution proceeds as> > follows: 
    > > > >   1.. The expression is 
    evaluated.> > > > > >   2.. If 
    expression is initially false, the body of the while statement is 
    never> > executed, and control passes from the while statement to 
    the next statement in the> > program. > 
    >   If expression is true (nonzero), the body of the statement 
    is executed and the> > process is repeated beginning at step 
    1.> > > > This is an example of the while statement: 
    > > > > i = 10;while( i < 20 ){  Plot( MA( 
    Close, i ), "MA" + WriteVal( i, 0 ), colorBlack> > + i 
    );  i = i + 1;}The example plots 10, 11, 12, 13, 14, 15, 16, 17, 
    18, 19 - bar> > moving averages.> > > 
    >   > > for Statement> > > > The 
    for statement lets you repeat a statement or compound statement a 
    specified> > number of times. The body of a for statement is 
    executed zero or more times until> > an optional condition 
    becomes false.  > > > > Syntax> > 
    > > for ( init-expression ; cond-expression ; loop-expression ) 
    statement > > > > Execution of a for statement 
    proceeds as follows: > > > >   1.. The 
    init-expression, is evaluated. This specifies the initialization for 
    the> > loop. There is no restriction on the type of 
    init-expression.> > > > > >   2.. 
    The cond-expression,  is evaluated. This expression must have 
    arithmetic> > type. It is evaluated before each iteration. Three 
    results are possible: > >     a.. If 
    cond-expression is true (nonzero), statement is executed; then> 
    > loop-expression, if any, is evaluated. The loop-expression is 
    evaluated after each> > iteration. There is no restriction on 
    its type. Side effects will execute in> > order. The process 
    then begins again with the evaluation of cond-expression.> > 
    > > > >     b.. If cond-expression 
    is false (0), execution of the for statement terminates> > and 
    control passes to the next statement in the program. > > This 
    example illustrates the for statement: > > > >  
    myema[ 0 ] = Close[ 0 ];for( i = 1; i < BarCount; i++ ){   
    myema[ i ] = 0.1 *> > Close[ i ] + 0.9 * myema[ i - 1 ];}This 
    example iterates all bars of close array> > to calculate 
    exponential moving averageif, else Statements> > if( expression 
    )> > statement1 > > [else > > 
    statement2]> > > > The if keyword executes statement1 if 
    expression is true (nonzero); if else is> > present and 
    expression is false (zero), it executes statement2. After 
    executing> > statement1 or statement2, control passes to the next 
    statement.> > > > Example 1> > > > 
    if ( i > 0 )> >     y = x / i;> > 
    else > > {> >     x = i;> 
    >     y = abs( x );> > }In this example, 
    the statement y = x/i; is executed if i is greater than 0. If i> 
    > is less than or equal to 0, i is assigned to x and abs( x ) is 
    assigned to y. Note> > that the statement forming the if 
    clause ends with a semicolon.> > > > When nesting if 
    statements and else clauses, use braces to group the statements> 
    > and clauses into compound statements that clarify your intent. If 
    no braces are> > present, the compiler resolves ambiguities by 
    associating each else with the> > closest if that lacks an 
    else. > > > > Example 2> > > > if ( 
    i > 0 )           /* 
    Without braces */> >     if ( j > i 
    )> >         x = 
    j;> >     else> 
    >         x = i;The else clause 
    is associated with the inner if statement in this> > example. 
    If i is less than or equal to 0, no value is assigned to x.> > 
    > > Example 3> > > > if ( i > 0 ) > 
    > 
    {                      
    /* With braces */> >     if ( j > i 
    )> >         x = 
    j;> > }> > else> >     x = 
    i;The braces surrounding the inner if statement in this example make 
    the> > else clause part of the outer if statement. If i is less 
    than or equal to 0, i is> > assigned to x. > > 
    > > CHANGE LOG> > CHANGES FOR VERSION 4.38.0 (as 
    compared to 4.37.0)> > > >   a.. new setting 
    for candlestick appearance:> >   
    Tools->Preferences->Charting> >   "Use distinct 
    color for" : "None, up candle hollow" - > >   it plots 
    entire candle with one color but leaves interior of UP candle 
    body> > hollow.> > > > > 
    >   b.. added export chart image to PNG (portable network 
    graphics) file> >   Edit->Image->Export to PNG 
    file > >   (Please don't ask me to add GIF support. GIF 
    is patented and requires $3500> > license fee for Unisys. PNG 
    is free, supported by all browsers, smaller and better> > 
    )> > > > > >   c.. added 'send chart 
    by e-mail' feature > >   Edit->Image->Send by 
    email> >   and> >   File->Send 
    chart via e-mail > > > > > >   d.. 
    fixed positioning of arrows in image copies 
    (Edit->Image->Copy)> > > >   e.. 
    fixed crash occurring when printer device context did not support bit 
    blit> > copies. added very simple arrow line drawing for that case 
    (will be improved in> > future releases)> > > 
    >   f.. fixed bug in handling Null with new constructs: if, 
    while and for.> >   In pre-4.38 versions Null used 
    in if, while for was treated as True, which was> > 
    wrong> >   if( Null ) _TRACE("WRONG");> 
    >   else _TRACE("CORRECT");> >   Now Null 
    in if, while, for is treated as False. > >   g.. numbers 
    (floats) are now automatically 'upsized' to arrays on first use 
    of> > l-value array subscript operator without causing error. 
    > >   Also r-value subscript can be applied to numbers 
    and return the number itself> > without causing error, but the 
    underlying variable remains just a single number.> > > 
    >   This allows to easily intialize arrays to any value without 
    need to write loops.> > > >   Example 
    1:> >   in previous versions you would need to 
    write:> > > >   for( i = 0; i < BarCount; 
    i++ ) myarray[ i ] = 0 ; // fill with zeros> >   
    myarray[ 5 ] = 6; // write value to 5th element of the array> > 
    > >   now you can write simply:> > > 
    >   myarray = 3; // initialize, at this moment myarray is just 
    a number> >   myarray[ 5 ] = 6; // write value to 
    5th element of the array, the variable is> > 
    automatically> >   // upsized to array and all elements 
    are filled with a numeric value > >   // that was 
    originally placed in myarray variable> > > >   
    /* myarray is holds now the array filled with values of 3 except element 
    5 that> > has value of 6 */> > > >   
    mynumber = 5;> >   test = mynumber[ 7 ]; // previous 
    versions would give an error message here> >   // 
    now subscript operator for r-value numeric variable > 
    >   // is allowed and returns just the number > 
    >   // and variable is not upsized to array unless appears on 
    left side> >   // of assignment (l-value)> 
    >   /* mynumber variable here is still a number */> 
    >   WriteVal( test );> > > > CHANGES FOR 
    VERSION 4.37.0 (as compared to 4.36.0)> > > 
    >   a.. printing improved, now all open indicator panes are 
    printed and resolution> > is increased > 
    >   b.. Edit->Copy As Image and Edit->Copy As Metafile 
    now generate an image> > consisting of all indicator panes 
    (not just one) > >   c.. fixed problem with 
    non-resetting sort arrows in AA window > >   d.. fixed 
    sometimes occuring crash Signal() function > >   e.. 
    increased size of error message text buffer to prevent overflow 
    when> > reporting syntax errors in formulas having long unwrapped 
    lines. > >   f.. grid lines are drawn with fine dots 
    instead of small dashes (screen output> > only) > 
    >   g.. new AFL functions:> >   
    GetCategorySymbols( category, index ) > >   - retrieves 
    comma-separated list of symbols belonging to given category> > 
    > >   supported categories:> >   
    categoryMarket categoryGroup categorySector categoryIndustry 
    categoryWatchlist> >   categoryFavorite 
    categoryIndex > > > >   index = 
    (market/group/industry/sector/watchlist number)> >   
    0..255 for categoryMarket, categoryGroup, categoryIndustry> 
    >   0..63 for categorySector, categoryWatchlist> 
    >   ignored for categoryFavorite, categoryIndex> > 
    > >   StrExtract( list, item )> >   
    - extracts given item (zero-based) from comma-separated string.> > 
    > >   Example:> >   StrExtract( 
    "MSFT,AAPL,AMD,INTC", 2 ) > >   will return AMD > 
    > > >   StrExtract( "MSFT,AAPL,AMD,INTC", 0 )> 
    >   will return MSFT> > > >   
    StrExtract( "MSFT,AAPL,AMD,INTC", 200 ) > >   will 
    return empty string ""> > > >   + other minor 
    fixes> > > >   Example code for 
    GetCategorySymbols and StrExtract:> > > >   /* 
    note: if given watch list contains lots of symbols > >   
    ** performance may be poor > >   */> 
    >   function CreateAverageForWatchList( listnum )> 
    >   {> >    // retrive comma-separated 
    list of symbols in watch list> >    list = 
    GetCategorySymbols( categoryWatchlist, listnum );> > > 
    >    Average = 0; // just in case there are no watch list 
    members> > > >    for( i = 0; ( sym = 
    StrExtract( list, i ) ) != ""; i++ )> >    
    {> >      f = Foreign( sym, "C" 
    );> >      if( i == 0 ) Average = 
    f;> >      else Average = Average + 
    f;> >    }> > > 
    >    return Average / i; // divide by number of 
    components> >   }> > > >   
    Plot( CreateAverageForWatchList( 1 ), "Avg of WL 1", colorGreen ); 
    > > > > CHANGES FOR VERSION 4.36.0 (as compared to 
    4.35.0)> > > >   a.. fixed problem with 
    affecting 2 or more identifiers referencing the same> > array 
    when using l-value subscript operator []. Thanks Herman for pointing 
    this> > out> >   b.. global and local keywords 
    - for explicit visibility/scope declarations > >   
    Allow to override default scope rules that assume that variables defined 
    outside> > function are global, while those identifiers that 
    appear for the first time inside> > functions are 
    local.> > > >   Syntax:> > > 
    >   local var1 [, var2, ... ] ;> >   global 
    var1 [, var2, ... ] ;> > > >   (as you can see 
    you can declare more than one variable in one line.> > 
    > >   Note: using these keywords outside function 
    definition has no meaning> >   (global scope is 
    used).> > > >   Example:> > > 
    >   VariableA = 5; // implict global variable> > 
    > >   function Test()> >   {> 
    >    local VariableA;  // explicit local variable 
    with the same identifier as global> > > 
    >    global VariableB; // explicit global variable not 
    defined earlier> 
    >                      
    // may be used to return more than one value from the> > 
    function> > > >    VariableA = 
    99;> >    VariableB = 333;> >   
    } > > > >   VariableB = 1; // global 
    variable> > > >   "Before function 
    call";> >   "VariableA = " + VariableA;> 
    >   "VariableB = " + VariableB;> > > 
    >   Test(); > > > >   "After 
    function call";> >   "VariableA = " + VariableA + " (not 
    affected by function call )";> >   "VariableB = " + 
    VariableB + " (affected by the function call )";> > > 
    >   c.. syntax highligting modified so keywords: #include, if, 
    else, while, do,> > function, procedure, global, local, return 
    are colorised differently than built-in> > constants or 
    functions. Corresponding color/style setting added to> > 
    Preferences->Editor> > > > > >   
    d.. #pragma nocache > >   pre-processor command added to 
    switch off #include file caching mechanism.> >   
    Note: between '#pragma' and 'nocache' there must be exactly SINGLE 
    space> >   Note 2: disabling caching may slow down 
    execution of the formula (especially> >   in 
    indicators)> >   Note 3: #pragma nocache must be placed 
    before #includes> > > >   Example: > 
    >   #pragma nocache> >   #include 
    <myfile.afl>> > > >   a.. single line 
    comments now work with #includes (and #pragma too) so you can> 
    > comment out include in regular way:> >   //#include 
    <something> - will not include> > > > > 
    >   b.. changed error message from "unknown identifier" to 
    "Variable 'name' used> > without having been initialized." which 
    better decribes the problem. > > > >   For 
    example:> > > >   function Test( )> 
    >   {> >    global x;> 
    >    x = 3;> >   }> > 
    > >   WriteVal( x ); // variable used without having 
    been initialized,> >   // although declared inside 
    Test() function body> > > > > >   
    Test( ); // during function call the value of 3 is assigned to variable 
    x> > > >   WriteVal( x ); // and now no error 
    is reported> > > >   a.. implemented shortcut 
    evaluation of logical operators > >   The operands of 
    logical-AND and logical-OR expressions are evaluated from left> 
    > to right. Now if the value of the first operand is sufficient to 
    determine the> > result of the operation, the second operand 
    is not evaluated. This is called> > "short-circuit 
    evaluation." > > > >   The left operand of the 
    logical-AND operator is completely evaluated and all> > side 
    effects complete before continuing. If the left operand evaluates to 
    false> > (0), the other operand is not evaluated.> > 
    > >   The left operand of the logical-OR operator is 
    completely evaluated > >   and all side effects 
    complete before continuing. > >   If the left operand 
    evaluates to true (nonzero), the other operand is not> > 
    evaluated. > > > >   (The above description 
    applies to operands that evaluate to single boolean> > value, 
    > >   it does not apply to arrays. Operands that 
    evaluate to arrays are evaluated> > always )> > 
    > >   Example:> >   for( i = -3; i 
    < BarCount; i++ )> >   {> 
    >    // using old versions of AMiBroker you would get 
    subscipt out of range> >    // but now> 
    >    // the second operand (C[ i ] > C[ i - 1 ]) is 
    evaluated > >    // ONLY if first operand ( i >= 
    1 ) evaluates to TRUE> > > >     if( 
    i >= 1 && C[ i ] > C[ i - 1 ] )> 
    >     {> 
    >         _TRACE("TEST " + i); 
    > >     }> >   }> 
    > > > > > > > CHANGES FOR VERSION 4.35.0 
    (as compared to 4.34.2)> > > >   a.. do-while 
    loop implemented:> >   Syntax:> > > 
    >   do statement while ( expression ) ;> > > 
    >   The expression in a do-while statement is evaluated after 
    the body of the loop> > is executed. > >   
    Therefore, the body of the loop is always executed at least once. 
    > > > >   Example:> > > 
    >   i=0;> >   do> >   
    {> >      i++;> >   
    }> >   while( i < 100 );> >   
    WriteVal( i );> > > > > >   b.. it 
    is now allowed to 'add' (or rather concatenate) string to a number 
    /> > array. This saves quite a bit of typing. This works as in 
    JScript. The left-hand> > operand of '+' has to be a string. 
    The right-hand operand may be string, number or> > array. 
    Numbers are coerced to strings using %g sprintf formatting (prints 
    out> > decimal point only when necessary) and then concatenated. 
    In case of arrays> > SELECTED VALUE is coerced to string and 
    then concatenated.> > > >   So now instead of 
    > > > >   i = 100;> >   
    "Value is " + WriteVal( i );> >   "Close : " + WriteVal( 
    Close ) + ", Open : " + WriteVal( Open ) + ", High : " +> > 
    WriteVal( High );> > > >   you can 
    write:> > > >   i = 100;> 
    >   "Value is " + i;> >   "Close : " + 
    Close + ", Open : " + Open + ", High : " + High;> > > 
    >   Note that> > > >   "Test " + 
    100 + 1;> > > >   will give you "Test 1001" 
    because statements are parsed from left to right.> 
    >   "Test " is added first to "100" giving "Test 100" and then 
    to "1" giving> >   "Test 1001". If you want to 
    perform numeric adding first please use braces:> > > 
    >   "Test " + ( 100 + 1 );> >   - this will 
    give you "Test 101"> > > > > >   c.. 
    additional tweaks in AFL engine & garbage collection, futher speed 
    up of> > execution of very long loops > > > 
    >   d.. more error checking in AFL engine - will report using 
    uninitialized> > variables that were accepted silently in 
    4.31.x - 4.34.x > >   e.. #include now accepts new way 
    of specifying file names to include:> > > 
    >   #include <filename.afl>> > > 
    >   (note < > braces instead of " " ) if you specify the 
    file name this way> > AmiBroker will look for> 
    >   the file in "standard include path" that is definable using 
    new prefs setting in> > Tools->Preferences->AFL> 
    >   It makes much shorter to write includes and you can move 
    include folder now> > without changing all AFL codes using 
    #includes.> > > >   For example if you have 
    set standard include path to "C:\AFL\MyIncludes" and> > write 
    in your formula:> > > >   #include 
    <common.afl>> > > >   AmiBroker will 
    look for C:\AFL\MyIncludes\common.afl file> > > 
    >   Also now #include reports file(s) not found in regular 
    error message box.> > > > > >   
    f.. IIf/Min/Max are now overloaded functions (have two variants 
    each)> >   IIF( Condition_ARRAY, True_Array, 
    False_Array ) (old one)> >   IIF( BoolValue, TrueValue, 
    FalseValue )> > > >   Min( array1, array2 ) 
    (old one)> >   Min( number1, number2 ) > > 
    > >   Max( array1, array2 ) (old one)> 
    >   Max( number1, number2 ) > > > 
    >   The second one is choosen when all arguments are numbers 
    and it is much much> > faster and returns number so 
    LastValue() call is not neccessary anymore.> > > 
    >   Example:> > > >   // much 
    faster and does not require LastValue()> >   period = 
    IIF( name() == "MSFT", 5, 10 );> >   result = Min( 7, 3 
    ); > >   // (result is still a number not array as in 
    previous versions)> > > > > >   g.. 
    added 'endless loop detection threshold' setting to Preferences "AFL" 
    tab.> > Recommended value 100000 or higher.> > > 
    >   h.. fixed parameter counting in CallFunction plugin 
    callback in case of> > overloaded functions > 
    >   i.. fixed problem with premature freeing of arrays passed 
    in default parameters> > fields (causing for example problem 
    with color exploration output - introduced in> > 4.32) 
    > > > > CHANGES FOR VERSION 4.34.2 (as compared to 
    4.34.0)> > > >   a.. improved crash recovery 
    dialog to include AFL engine state information and> > (in some 
    cases) the source line of the formula that causes an exception > 
    >   b.. added ability to catch all exceptions in indicators and 
    commentaries> > (switchabel via Tools->Preferences->AFL, 
    "catch system exceptions...", ON by> > default) - allows you 
    to continue to work even in case of serious problem > 
    >   c.. loop break by Shift+BREAK is now more sensitive 
    > >   d.. now you can control how often Shift+BREAK key 
    is checked during formula> > execution 
    (Tools->Preferences->AFL, "check SHIFT+Break every" (1..100, 
    default => > 50) (note that specifying low values may degrade 
    performance slightly) > >   e.. tweaked AFL memory 
    allocator hash tables to get more speed for large looping> > 
    formulas > >   f.. although I never reproduced this 
    problem I made some changes so 'TAB' key> > should not wipe 
    the contents of AFL editor anymore > > CHANGES FOR VERSION 4.34.0 
    (as compared to 4.33.0)> > > >   a.. 
    user-definable functions and procedures with parameters and local 
    variables > > > >   b.. 'A' is NO LONGER 
    predefined symbol. I decided to remove it because people> > 
    tend to use A as user-variable forgetting the fact that it was build-in 
    array> > holding typical price (H+L+C)/3. Use 'Avg' 
    instead.> > > >   c.. indicator list column 
    width increased in Indicator Builder > >   d.. DayOfYear 
    - returns the calendar day number counting from beginning of the> 
    > year January 1st is 1. Maximum number returned is 366 > > 
    CHANGES FOR VERSION 4.33.0 (as compared to 4.32.2)> > > 
    >   a.. Database purify tool implemented (available via 
    Tools->Database Purify)> >   allows to detect 
    missing/extra quotes, possible splits, invalid OHLC> > 
    relationship> > > >   Apply to/range settings 
    similar to AA window. You can also right click over> > result 
    list to add symbols to watch list and copy the list to the clipboard 
    (and> > paste it later to any other program for futher 
    use)> > > > > >   b.. further 
    improvements to AFL garbage collector, now looping regardless of> 
    > loop count requires the same amount of memory as just single pass 
    of the code (no> > growing allocated memory during 
    loops).> >   This enormously lowered memory consumption 
    for some formulas and increased the> > speed of some loops 
    3..4 times.> > > > > >   c.. added 
    variable period support to the following functions:> >   
    LinRegSlope,> >   LinearReg,> >   
    LinRegIntercept,> >   StdErr,> >   
    TSF > >   Sample code:> > > 
    >   Plot( Close, "Test", colorBlack );> > > 
    >   range = 15 * MA( ATR( 15 ), 50 ) / ATR( 15 ); > > 
    > >   //Plot( range, "range", colorBlue, styleOwnScale 
    );> >   Plot( LinearReg( Close, range ), "Test", 
    colorRed );> > > >   d.. fixed sometimes 
    incorrect output of variable-period version of LLV/HHV> > 
    > >   e.. fixed crash occuring when bad arguments were 
    passed to the function (bug> > introduced in 4.32.x).> 
    > > > CHANGES FOR VERSION 4.32.2 (as compared to 
    4.32.1)> > > >   a.. second bug in 
    experimental garbage collector fixed. > > CHANGES FOR VERSION 
    4.32.1 (as compared to 4.32.0)> > > >   a.. 
    garbage collector was releasing memory too soon in some cases, now 
    fixed. > > CHANGES FOR VERSION 4.32.0 (as compared to 
    4.31.1)> > > >   a.. added type check in 
    IF/ELSE statements > >   b.. added type check in array 
    element assignment > >   c.. error messages now numbered 
    and display changed slightly > >   d.. you can break 
    running loop by pressing Shift+BREAK (Pause) key combination > 
    >   e.. calling COM objects works again (was broken in 4.31.x) 
    > >   f.. changed slightly the way TAB works in editor, 
    if TAB is pressed any> > selection is deselected to avoid 
    accidential deletion of text > >   g.. experimental: 
    added 'agressive garbage collector' that extremely decreases> 
    > the amount> >   of memory required to run AFL 
    formula by releasing the memory> >   used for temporary 
    variables as soon as possible (previously> >   temporary 
    memory was released at the end of formula execution).> 
    >   A side-effect of new garbage collector is some speed up in 
    formula execution. > >   h.. new tab in preferences 
    for AFL engine settings > >   i.. experimental feature, 
    NOT for beginners, may be removed/modified in future> > 
    releases: > >   new _TRACE( "string" ) AFL function 
    added> >   that allows to write debug messages from AFL 
    code to system debug viewer.> >   (it calls 
    internally OutputDebugString Win API function).> >   To 
    view debug messages you have to run DebugView freeware program > 
    >   from <A 
    href="">http://www.sysinternals.com/ 
    > > CHANGES FOR VERSION 4.31.1 (as compared to 4.31.0)> 
    > > >   a.. fixed bug introduced in 4.31.0 causing no 
    text output in> > commentary/interpretation > > CHANGES 
    FOR VERSION 4.31.0 (as compared to 4.30.0)> > > 
    >   a.. Workspace window uses "icon font" set in the Windows 
    settings instead of> > hard coded Tahoma 8 > 
    >   b.. for better readability and ClearType(tm) compatibility 
    on WinXP, all dialog> > windows use now 'MS Shell Dlg' face 
    name that maps to standard MS Sans Serif on> > Win 9x/Me/NT 
    and Tahoma on Win 2K and XP. > >   c.. rewritten AFL 
    parser, now formula is parsed and coverted to syntax tree and> 
    > then interpreted. This would allow further improvements including 
    compilation.> > This allowed also to add loops/if-else 
    statements. > >   d.. implemented IF/ELSE statement, 
    WHILE and FOR loops:> >   The same basic 'for' loop in 
    AFL is 2..3 times faster than in JScript> >   Syntax 
    follows C++/JScript style: > >   while( 
    conditional_expression ) statement;> > > >   
    for( initializer_part; conditional_expression; iterator_part ) 
    statement;> > > >   if( 
    conditional_expression ) statement;> > > >   
    if( conditional_expression ) > >   statement;> 
    >   else> >   statement;> > 
    > >   e.. implemented compound statements: these are 
    blocks of statements enclosed> >   in opening and 
    closing curly brace > > > >   {> 
    >   statement1;> >   statement2;> 
    >   ...> >   statementN;> 
    >   }> > > >   compound statement 
    can appear anywhere when simple statement can.> > > 
    >   For example:> > > >   i = 
    10;> >   while( i < 20 )> >   
    {> >   Plot( MA( Close, i ), "MA" + WriteVal( i, 0 ), 
    colorBlack + i );> >   i = i + 1;> 
    >   }> > > >   f.. implemented 
    C-style postfix and prefix increment/decrement operators> > 
    > >   i = 10;> >   WriteIf( i++ 
    );> >   WriteIf( ++i );> >   
    WriteIf( i );> > > >   g.. implemented array 
    element access (subscript) operator []:> > > 
    >   WriteVal( Close[ 0 ] ); // prints the first bar of close 
    array> > > >   /* a sample low-level 
    implementation of exponential moving average in AFL */> > 
    > >   myema[ 0 ] = Close[ 0 ];> > > 
    >   for( i = 1; i < BarCount; i++ )> >   
    {> >   myema[ i ] = 0.1 * Close[ i ] + 0.9 * myema[ i - 
    1 ];> >   }> > > > > > 
    > >   h.. added built-in constant 'BarCount' that 
    returns number of bars available in> > arrays (the number of 
    elements of array)> >   When QuickAFL is turned on it 
    may be less than true number of bars because> > QuickAFL 
    feature attempts to use only visible bars (and few before). You 
    can> > control how many bars the formula requires using 
    SetBarsRequired() function> > > >   i.. 
    implemented infinite-loop protection. Nice if you forgot to 
    increment> > counter variable in 'for' loop :-)> > 
    > >   j.. tab key now works without need to press 
    ALT/CTRL in AFL editors> > > >   k.. added 
    C-like synonyms for logical ADD/OR/NOT: &&, ||, ! > > 
    > > > >   /* a sample low-level implementation 
    of Profit-target stop in AFL: */> > > >   
    Buy = Cross( MACD(), Signal() );> > > >   
    priceatbuy=0;> > > >   for( i = 0; i < 
    BarCount; i++ )> >   {> 
    >        if( priceatbuy == 0 
    && Buy[ i ] ) > 
    >        priceatbuy = BuyPrice[ i 
    ];> > > >        if( 
    priceatbuy > 0 && SellPrice[ i ] > 1.1 * priceatbuy )> 
    >        {> 
    >          Sell[ i ] = 
    1;> >          
    SellPrice[ i ] = 1.1 * priceatbuy;> 
    >          priceatbuy = 
    0;> >        }> 
    >        else> 
    >          Sell[ i ] = 
    0;> >   }> > > >   /* 
    sample EMA rainbow */> > > >   Plot( Close, 
    "Price", colorBlack, styleCandle );> >   for( Range = 
    15; Range < 100; Range++ )> >      
    Plot( EMA( Close, Range ), "MA"+WriteVal(Range,0), colorRose + Range % 
    8,> > styleNoLabel );> > > > > > HOW 
    TO REPORT BUGS> > > > If you experience any problem with 
    this beta version please send detailed> > description of the 
    problem (especially the steps needed to reproduce it) to> > 
    bugs@xxxx > > > > > 
    __________________________________> Do you Yahoo!?> The New 
    Yahoo! Search - Faster. Easier. Bingo.> <A 
    href="">http://search.yahoo.comSend 
    BUG REPORTS to bugs@xxxxxxxxxxxxxSend SUGGESTIONS to 
    suggest@xxxxxxxxxxxxx-----------------------------------------Post 
    AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: 
    <A 
    href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
    group FAQ at:<A 
    href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
    Your use of Yahoo! Groups is subject to<A 
    href="">http://docs.yahoo.com/info/terms/ 
    Send BUG REPORTS to 
    bugs@xxxxxxxxxxxxxSend SUGGESTIONS to 
    suggest@xxxxxxxxxxxxx-----------------------------------------Post 
    AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: 
    <A 
    href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
    group FAQ at: <A 
    href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
    Your use of Yahoo! Groups is subject to the <A 
    href="">Yahoo! Terms of Service. 
    
  
  
  Do you Yahoo!?<A 
  href="">The New 
  Yahoo! Search - Faster. Easier. Bingo. Send BUG REPORTS to 
  bugs@xxxxxxxxxxxxxSend SUGGESTIONS to 
  suggest@xxxxxxxxxxxxx-----------------------------------------Post 
  AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A 
  href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
  group FAQ at: <A 
  href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
  Your use of Yahoo! Groups is subject to the <A 
  href="">Yahoo! Terms of Service. 

  
  

  
  
  <IMG 
  src="">Send 
BUG REPORTS to bugs@xxxxxxxxxxxxxSend SUGGESTIONS to 
suggest@xxxxxxxxxxxxx-----------------------------------------Post 
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A 
href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
group FAQ at: <A 
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
Your use of Yahoo! Groups is subject to the <A 
href="">Yahoo! Terms of Service. 







Yahoo! Groups Sponsor


  ADVERTISEMENT 









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 the Yahoo! Terms of Service.


Attachment: Description: ""