[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




I see 
a black area if my picture viewer window is sized slightly larger than your 
chart, but this is true of all picture files. It is just the viewer's background 
color.
 
Rik RasmussenStock Analyzer mailing list moderator<A 
href="" 
target=_blank>http://groups.yahoo.com/group/stockanalyzer/ 
<BLOCKQUOTE 
>
  <FONT face=Tahoma 
  size=2>-----Original Message-----From: Salil V Gangal 
  [mailto:salil_gangal@xxxxxxxxx]Sent: Thursday, May 22, 2003 1:21 
  PMTo: amibroker@xxxxxxxxxxxxxxxSubject: 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 
  <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> & gt; 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!&! gt; > > > 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++ )> >   
    {> >&n! bsp;    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 Variabl! eA;  // explicit local 
    variable with the same identifier as g lobal > >  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 curre! ntly 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 conj! unction with function keyword. So it is advised 
    to> > us e 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: > > &! 
    gt; >   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 a! s 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 n o 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: > > > >  
    myem! a[ 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 val! ue 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 l eaves 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 ve! ry 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.> > 
    > > &nbs p; 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 win! 
    dow > >   d.. fixed sometimes occuring crash Signa l() 
    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 categorySecto! r, 
    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 > >   */> >&n! 
    bsp;  function CreateAverageForWatchList( listnum )> >& 
    nbsp;  {> >    // 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> >&nbs! p;  (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> > & nbsp; 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 <!
 BR>evaluates to false> > (0), the other operand is not evalu 
    ated.> > > >   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 > 
    >  &n! bsp; // 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;> >&nbs! p;  do> 
    >   {> >   & nbsp;  
    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&g! t;> > 
    > >   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.> > > >   Examp! 
    le:> > > >   // 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 anym ore > > 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,&! gt; 
    >   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 memo! ry 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 
    va! riables as soon as possible (previously> >   tempo 
    rary 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> >&nb! sp;  
    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:> > > >&nb! sp;  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: &&, ||, ! > > 
    > > > > &! nbsp; /* 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;> >    !     }> 
    >      & nbsp; 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.c! 
    omSend 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. 







Yahoo! Groups Sponsor












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.