static Keyword

The static keyword allows to declare


static identifier;

static identifier1, identifier2, identifier3, ...;

The static keyword declares identifier as static variable

Declared static variables can and should be used as 'regular' variables, no need to call functions (Static*).

IMPORTANT: The static keyword is only available when you use

#pragma enable_static_decl(prefix)

at the top of your formula. The prefix is added automatically to actual static variable name to avoid name clashes/conflicts. Prefix should be constant string literal (as in Example 1).

You can also have declared static variable with unique prefix that includes current chartID, interval or symbol. To do so use {chartid}, {interval} or {symbol} runtime tokens in the prefix string. They will get replaced in runtime by corresponding values (see Example 2).

Example 1.

// the pragma below is required to enable support for static declarations
// it also defines the prefix which is added to variables declared with static keyword
// it is one prefix per formula.
#pragma enable_static_decl(prefix)

// it is really good idea to consequently use naming convention that
// distinguishes declared static variables from the others
// we highly recommend using UNDERSCORE '_' before all declared static variables
// so they can be easily spotted in the code
// The other choice could be s_ prefix

static _myvar; // this var is also accessible by "prefix_myvar"

printf( "This variable is really static %g", _myvar++ );

// keep in mind that for speed static variable is read only once at the declaration
// and saved only once - when formula execution is completed
// This way declared static variables offer same speed as regular variables (no speed penalty)

Example 2.

// Example 2 - if you want per-chartID declared static variables
#pragma enable_static_decl "myprefx{chartid}"
static x; // this static will really have name of myprefixIDx where ID is a current chartID

More information on static keyword is included on the forum: