[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




Hello,
 
Saving graphics in PNG (even smaller than GIF) is directly 
supported by AmiBroker. Edit->Image->Export to file.
 
 
Best regards,Tomasz Janeczkoamibroker.com
<BLOCKQUOTE 
>
  ----- Original Message ----- 
  <DIV 
  >From: 
  Rik 
  Rasmussen 
  To: <A title=amibroker@xxxxxxxxxxxxxxx 
  href="">amibroker@xxxxxxxxxxxxxxx 
  Sent: Friday, May 23, 2003 2:28 AM
  Subject: RE: [amibroker] Re: Image Copy 
  Problem even when copied to Word.
  
  You 
  can't zip it until it is a file. It isn't a file until you save 
  it.
  <FONT face=Arial color=#0000ff 
  size=2> 
  A 
  much better alternative is using a program like Irfanview to do whole screen 
  or window captures and save them as .png files which are much smaller and do 
  not need to be zipped.
   
  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: mrdavis9 
    [mailto:mrdavis9@xxxxxxxxxx]Sent: Thursday, May 22, 2003 7:58 
    PMTo: amibroker@xxxxxxxxxxxxxxxCc: jeff 
    davisSubject: Re: [amibroker] Re: Image Copy Problem even when 
    copied to Word.
    I have a question at the end of this wordy 
    dialog.  In order to capture a chart image, someone taught me to press 
    Control  and then PRINTSCREEN.  Then I hit the start button, and 
    click on RUN, and PAINTBRUSH always shows up as the default choice the OPEN 
    window. I then click OK.  Paintbrush then presents me with a blank 
    page.  I then click EDIT at the top of the blank page of paintbrush, 
    and then click copy.  The chart image then appears in the blank 
    page.  I  would like to be able to immediately zip the image 
    before I save it.  As it is now, I click save, and then have to go get 
    the saved folder, and then zip it.  Is it possible to zip it while it 
    is still in paintbrush, just before I save it?   Also, is there an 
    easier way to capture and zip images?   Any thoughts will be 
    appreciated.  Ron D
     
     
     
     
    <BLOCKQUOTE 
    >
      ----- Original Message ----- 
      <DIV 
      >From: 
      <A title=salil_gangal@xxxxxxxxx 
      href="">salil_gangal 
      To: <A 
      title=amibroker@xxxxxxxxxxxxxxx 
      href="">amibroker@xxxxxxxxxxxxxxx 
      
      Sent: Thursday, May 22, 2003 11:00 
      AM
      Subject: [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 <A 
      href="">amibroker@xxxxxxxxxxxxxxx, 
      Salil V Gangal <<A 
      href="">salil_gangal@x...> 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 the <A 
      href="">Yahoo! Terms of Service. 
      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. 
    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.