Skip to content

strategy

METADATA: initial_cash

initial_cash: number

Initial cash.

Default is 100000.

METADATA: pyramiding

pyramiding: number

The maximum number of entries allowed in the same direction. If the value is 0, only one entry order in the same direction can be opened, and additional entry orders are rejected.

Default is 0.

METADATA: allow_entry_in

allow_entry_in: direction

Used to specify in which market direction the strategy.entry function is allowed to open positions. Possible values: direction.long, direction.short, nil.

Default is nil.

METADATA: commission

commission: string

Commission for each transaction.

The format is type=value, where type is one of percent, fixed, cash-per-contract.

You can use multiple commissions by separating them with a comma (e.g., percent=0.1,fixed=10).

Default is ``.

METADATA: initial_margin_long

Margin rate for initial short positions.

Default is 1.0.

METADATA: initial_margin_short

Margin rate for initial short positions.

Default is 1.0.

METADATA: maintenance_margin_long

Margin rate for maintenance long positions.

Default is 1.0.

METADATA: maintenance_margin_short

Margin rate for maintenance short positions.

Default is 1.0.

METADATA: slippage

slippage: number

Slippage for each transaction.

Default is 0.

METADATA: risk_free_rate

risk_free_rate: number

Risk-free rate of return is the annual percentage change in the value of an investment with minimal or zero risk. It is used to calculate the Sharpe and Sortino ratios.

Default is 0.02.

entry

entry(id: string, side: direction, qty: number = nil, qty_percent: number = nil, price: number = nil, remark: string = nil)

Creates a new order to open or add to a position.

If the call does not contain price argument, it creates a market order, otherwise, it creates a limit order.

Orders from this command, unlike those from strategy.order, are affected by the pyramiding parameter. Pyramiding specifies the number of concurrent open entries allowed per position. For example, with pyramiding = 3, the strategy can have up to three open trades, and the command cannot create orders to open additional trades until at least one existing trade closes.

When a strategy executes an order from this command in the opposite direction of the current market position, it reverses that position. For example, if there is an open long position of five shares, an order from this command with a quantity of 5 and a direction of direction.short triggers the sale of 10 shares to close the long position and open a new five-share short position. Users can change this behavior by specifying an allowed direction with the METADATA: allow_entry_in.

order

order(id: string, side: direction, qty: number = nil, qty_percent: number = nil, price: number = nil, remark: string = nil)

Creates a new order to open, add to, or exit from a position.

If the call does not contain price argument, it creates a market order, otherwise, it creates a limit order.

Orders from this command, unlike those from strategy.entry, are not affected by the pyramiding parameter. Strategies can open any number of trades in the same direction with calls to this function.

This command does not automatically reverse open positions because it does not exclusively create entry orders like strategy.entry does. For example, if there is an open long position of five shares, an order from this command with a quantity of 5 and a direction of direction.short triggers the sale of five shares, which closes the position.

close

close(id: string, qty: number = nil, qty_percent: number = nil, remark: string = nil)

Creates an order to exit from the part of a position opened by entry orders with a specific identifier. If multiple entries in the position share the same ID, the orders from this command apply to all those entries, starting from the first open trade, when its calls use that ID as the id argument.

This command always generates market orders.

cancel

cancel(id: string)

Cancels a pending or unfilled order with a specific identifier. If multiple unfilled orders share the same ID, calling this command with that ID as the id argument cancels all of them. If a script calls this command with an id representing the ID of a filled order, it has no effect.

cancel_all

cancel_all()

Cancels all pending or unfilled orders, regardless of their identifiers.

This command is most useful when working with price-based orders (e.g., limit orders).

initial_cash

initial_cash(): number

Returns the amount of initial capital set in the strategy properties.

equity

equity(): number

Returns current equity (strategy.initial_cash + strategy.net_profit + strategy.open_profit).

position_size

position_size(): number

Returns the direction and size of the current market position. If the value is > 0, the market position is long. If the value is < 0, the market position is short.

avg_trade

avg_trade(): number

Returns the average amount of money gained or lost per trade. Calculated as the sum of all profits and losses divided by the number of closed trades.

avg_trade_percent

avg_trade_percent(): number

Returns the average percentage gain or loss per trade. Calculated as the sum of all profit and loss percentages divided by the number of closed trades.

net_profit

net_profit(): number

Returns the total currency value of all completed trades.

net_profit_percent

net_profit_percent(): number

Returns the total value of all completed trades, expressed as a percentage of the initial capital.

gross_profit

gross_profit(): number

Returns the total currency value of all completed winning trades.

gross_profit_percent

gross_profit_percent(): number

Returns the total currency value of all completed winning trades, expressed as a percentage of the initial capital.

gross_loss

gross_loss(): number

Returns the total currency value of all completed losing trades.

gross_loss_percent

gross_loss_percent(): number

Returns the total currency value of all completed losing trades, expressed as a percentage of the initial capital.

open_profit

open_profit(): number

Returns the total currency value of all open trades.

max_runup

max_runup(): number

Returns the maximum equity run-up value for the whole trading interval.

max_runup_percent

max_runup_percent(): number

Returns the maximum equity run-up value for the whole trading interval, expressed as a percentage and calculated by formula: Highest Value During Trade / (Entry Price x Quantity).

max_drawdown

max_drawdown(): number

Returns the maximum equity drawdown value for the whole trading interval.

max_drawdown_percent

max_drawdown_percent(): number

Returns the maximum equity drawdown value for the whole trading interval, expressed as a percentage and calculated by formula: Lowest Value During Trade / (Entry Price x Quantity).

max_held_all

max_held_all(): number

Returns the maximum number of contracts/shares/lots/units in one trade for the whole trading interval.

max_held_long

max_held_long(): number

Returns the maximum number of contracts/shares/lots/units in one long trade for the whole trading interval.

max_held_short

max_held_short(): number

Returns the maximum number of contracts/shares/lots/units in one short trade for the whole trading interval.

position_avg_price

position_avg_price(): number

Returns the average entry price of current market position. If the market position is flat, nil is returned.

win_trades

win_trades(): number

Returns number of profitable trades for the whole trading interval.

loss_trades

loss_trades(): number

Returns number of losing trades for the whole trading interval.

open_trades

open_trades(): [opentrade]

Returns an array of open trades.

closed_trades

closed_trades(): [closedtrade]

Returns an array of closed trades.

margin_liquidation_price

margin_liquidation_price(): number

When margin is used in a strategy, returns the price point where a simulated margin call will occur and liquidate enough of the position to meet the margin requirements.