TSLab
TSLab.proSupportTSLab LiveTSVerse
Eng
Eng
  • TSLab trading platform
  • For newbies
    • A beginner's guide
      • Purchasing a license key for a data provider
      • An example of connecting text quotes
      • Example of connecting a data provider to a broker / exchange
      • An example of creating a script in TSLab
      • An example of creating a trading algorithm in TSLab
  • Installing TSLab
    • TSLab Installation Guide
      • System requirements
      • TSLab Installation manual
    • Update TSLab
      • Preparing for update
      • Release build
      • Nightly build
    • Restarting the TSLab program
    • TSLab Changelog
      • TSLab 2.1 Changelog
      • TSLab 2.2 Changelog
        • 2.2.26.0 - 2024/01/31
        • 2.2.25.0 - 2024/01/17
        • 2.2.24.0 - 2024/12/04
        • 2.2.23.0 - 2024/09/19
        • 2.2.22.0 - 2024/08/30
        • 2.2.21.0 - 2024/05/17
        • 2.2.20.0 - 2024/05/15
        • 2.2.19.0 - 2024/02/21
        • 2.2.18.0 - 2024/02/09
        • 2.2.17.0 - 2023/11/16
        • 2.2.16.0 - 2023/10/20
        • 2.2.15.0 - 2023/10/13
        • 2.2.14.0 - 2023/08/11
        • 2.2.13.0 - 2023/05/12
        • 2.2.12.0 - 2023/02/28
        • 2.2.11.0 - 2022/12/15
        • 2.2.10.0 - 2022/10/27
        • 2.2.9.0 - 2022/09/16
        • 2.2.7.0 - 2022/06/23
        • 2.2.5.0 - 2022/04/29
        • 2.2.3.0 - 2022/04/01
        • 2.2.2.0 - 2021/12/29
  • Data providers
    • Cryptocurrency exchanges
      • Binance Cryptocurrency Exchange
        • Registration on Binance
          • Registration on Binance Exchange website
          • Configure Binance Wallet
          • Creating a Binance API Key for TSLab
          • Binance. Transferring USDT from wallet to wallet without commission
        • Registration on TSLab [Binance]
          • Account registration on the TSLab website [Binance]
          • Creating a free Binance Data Provider for TSLab
        • Setting up a Binance Data Provider in TSLab
        • TSLab Binance Edition
          • Starting the program
          • Configuring the Binance Data provider
      • Bitget Cryptocurrency Exchange
        • Registration on the Bitget official website
        • Creating a Free Bitget Data Provider
        • Configuring the Bitget Data Provider in TSLab
      • ByBit Cryptocurrency Exchange
        • Registration on the ByBit website
        • Creating a free ByBit data provider
        • Configuring the ByBit Data Provider in TSLab
      • Deribit Cryptocurrency Exchange
        • Deribit data provider settings
        • Deribit. Frequently asked questions and useful information
        • Deribit. Possible problems and solutions
        • Deribit Margin Requirements Calculation
        • An example of a ready-made script for Deribit
      • Kucoin Cryptocurrency Exchange
        • Registration on the KuCoin official website
        • Creating an API key on the KuCoin website
        • Issuing a free license for KuCoin Data Provider
        • Setting up the KuCoin data provider in TSLab
      • OKX Cryptocurrency Exchange
        • Setting up an OKX account
          • Registration on the OKX website
          • OKX API Key creation
          • Issuing a free license for OKX Data Provider
          • Setting up the OKX data provider in TSLab
          • OKX demo account
        • TSLab OKX Edition
          • First launch of TSLab OKEx Edition
          • Configuring the OKEx data provider
          • Trading in TSLab [OKEx]
          • OKEx Demo
    • Historical Data
      • YahooFinance
      • Offline data provider in CSV format
      • An example of connecting text quotes
      • Text files with historical data
    • Interactive Brokers
      • Getting Started with Interactive Brokers Data Provider
        • Installing and configuring the Trader Workstation (TWS) terminal
        • Installing and configuring the IB Gateway terminal
      • Features of working with Interactive Brokers data provider
      • Known issues for Interactive Brokers Data Provider
      • Loading instruments in a package
  • Working with the program
    • Main menu
      • File
        • Program Settings
      • View
        • Chart
          • Features of working with the Chart in TSLab
          • Chart Controls
        • Depth of Market
        • Quotes
        • All Trades
      • Data
        • Data Providers window
        • Add online data provider
        • Add offline data provider
      • Lab
        • Scripts window
          • Script Container
      • Trading
        • Accounts window
        • Positions window
        • My trades window
        • My orders window
          • Move orders and deals to an agent
        • Autotrading Control Center window
          • Agent window
          • Agent trading settings
            • Event recalculations
            • Slippage
          • "Forget errors" of the agent
        • Orders manager
          • Linking a manually completed order to an agent
        • Agent Control Center window
      • Tools
        • Data backup and recovery
        • Notifications manager
          • Notifications Manager Filters
          • Reference List of Service Message Numbers
          • Example of setting up notifications for Gmail
        • Export to Excel
    • Common interface
      • Status bar
      • Tab
      • Workspace
      • Spreadsheets
    • Visual editor
      • Toolbar
        • Compress and Decompress Blocks
      • List of visual blocks
        • Service Elements
        • Cycles
        • TSChannel
      • The syntax of the Formula, Boolean expression and String expression blocks.
    • Autotrading Control Center
      • Agent trade settings
        • Agent trade settings - Placing orders
        • Agent trading settings - Script execution
        • Agent trading settings - Events
    • TSLab API
      • API Introduction
        • Visual Studio Installation
        • First script (API)
        • First Indicator (API)
        • Script Debugging
        • Logging
      • Writing scripts on the API
        • Trading Instrument Data
        • Working with positions
        • List of deals
        • The order queue
        • Standard Indicators and Handlers
        • Script parameters
        • Caching
        • Local and global cache
        • Multiple Tools
      • Writing indicators on the API
        • Stream indicator
        • Bar indicator
        • Pre-processed indicator
        • Indicator with multiple calculations
      • Additional features
        • The ability to create your own optimizers *
        • C ++ / CLI script
        • API Control Panel
        • Result from script
        • * Оптимизация. Пул массивов.
      • Examples
        • Get script results
        • Get script parameters
        • Get script and agent settings
        • Get position balance (net worth)
        • An example of a strategy Breakout of the Donchian channel
        • Example of a Moving Average Crossover strategy
        • Indicator example
        • How to speed up the processing of a script on the API
        • Links to examples
      • Question - Answer
        • HandlerParameter Attribute
    • Optimization
      • Insufficient load on a multicore processor
  • Examples of scripts and indicators
    • Examples of algorithms and indicators
    • Examples of implementing strategies in TSLab
      • A trading system based on indicator CCI
      • A trading system based on Standard Deviation
      • A trading system based on Aroon
      • A trading system based on ADX and DI technical indicators
      • A trading system based on the RSI indicator
      • Example of a trading strategy without parameters
  • TSLab website
    • TSLab Support Service
      • Memory dump of TSLab application
      • TSLab program log files
Powered by GitBook
LogoLogo

Мы в соцсетях

  • Группа в Telegram
  • Новости TSLab
  • Vkontakte
  • YouTube канал TSLab Live

Наши веб-сайты

  • TSLab
  • Служба поддержки
On this page
  • Position opening
  • Getting position
  • Position change
  • Closing position

Was this helpful?

Export as PDF
  1. Working with the program
  2. TSLab API
  3. Writing scripts on the API

Working with positions

All script positions are accessed through the ISecurity.Positions property.

For each position, a signal name is assigned. Only one line item with the same name can be active at a time.

For example, if you created a position "LE" and did not close it, then you cannot create a second position with the same name.

Position opening

To open positions, use the methods sec.Positions.BuyXXX (...) for buying and sec.Positions.SellXXX (...) for selling.

Buy:

sec.Positions.BuyAtMarket(i + 1, 2, "LE"); // Buy two market contracts at the next bar.
sec.Positions.BuyAtPrice(i + 1, 2, 65000, "LE"); // Set a limit order for the purchase of two contracts on the next bar at a price of 65,000.
sec.Positions.BuyIfGreater(i + 1, 2, 65000, "LE"); // Place a conditional order to buy two contracts on the next bar if the price is above 65,000.
sec.Positions.BuyIfLess(i + 1, 2, 65000, "LE"); // Place a conditional order to buy two contracts on the next bar if the price is below 65,000.

Sell:

sec.Positions.SellAtMarket(i + 1, 2, "LE"); // Sell two market contracts at the next bar.
sec.Positions.SellAtPrice(i + 1, 2, 65000, "LE"); // Set a limit order for the sale of two contracts at the next bar at a price of 65,000.
sec.Positions.SellIfGreater(i + 1, 2, 65000, "LE"); // Place a conditional order to sell two contracts at the next bar if the price is 65,000.
sec.Positions.SellIfLess(i + 1, 2, 65000, "LE"); // Place a conditional order to sell two contracts on the next bar if the price is below 65,000

Getting position

A commonly used method to get the position of GetLastActiveForSignal (...), example:

var pos = sec.Positions.GetLastActiveForSignal("LE", i); // Get the last active position with the name "LE" for bar number i.

The method searches for an active position with the name "LE" and returns it; if there are no positions, the method will return null.

There are also other methods for getting positions, they are all written like this: sec.Positions.GetXXX (...).

Position change

To change the position size, use the pos.ChangeAtXXX (...) methods, and the size of the new position is transferred.

For example, to increase a long position by 2 market contracts, you need to write pos.ChangeAtMarket (i + 1, pos.Shares + 2, "LX"); Here pos.Shares shows the current number of position contracts, and when we pass pos.Shares + 2, this means that we need to increase the position by 2 contracts.

If you pass a negative value, for example -3, then the position will turn into a short one with three contracts.

Examples:

pos.ChangeAtMarket(i + 1, pos.Shares + 1, "LX"); // Increase the position size by 1 lot on the next bar.
pos.ChangeAtPrice(i + 1, pos.AverageEntryPrice - 100, pos.Shares + 1, "LX"); // Increase the position size by 1 lot with a limit order at the price (average position price - 100).
pos.ChangeAtProfit(i + 1, pos.AverageEntryPrice + 100, pos.Shares + 1, "LX"); // Increase the position size by 1 lot at take profit at the price (average position price + 100).
pos.ChangeAtStop(i + 1, pos.AverageEntryPrice - 100, pos.Shares + 1, "LX"); // Increase the position size by 1 lot at stop loss, at a price (average position price - 100).

Closing position

To close a position, use the pos.CloseAtXXX (...) methods.

Examples:

pos.CloseAtMarket(i + 1, "LX"); // Close the market position on the next bar.
pos.CloseAtPrice(i + 1, longPos.EntryPrice + 100, "LX"); // Set a limit order to close a position at a price (entry price + 100).
pos.CloseAtProfit(i + 1, longPos.EntryPrice + 100, "LX"); // Set take profit to close a position at a price (entry price + 100).
pos.CloseAtStop(i + 1, longPos.EntryPrice - 100, "LX"); // Set a stop loss to close the position at the price (entry price - 100).

It is important to note that methods that close a position by condition (CloseAtPrice, CloseAtProfit, CloseAtStop) must be set on each bar until the position closes, otherwise TSLab will remove the closing order on the exchange.

For example, we’ll write a script that will buy after a growing candle in the market and set a stop of 200 points and a take of 400 points:

using TSLab.Script;
using TSLab.Script.Handlers;

namespace MyLib
{
    public class ExampleBuy : IExternalScript
    {
        public void Execute(IContext ctx, ISecurity sec)
        {
            for (int i = 0; i < ctx.BarsCount; i++)
            {
                var signalBuy = sec.Bars[i].Close > sec.Bars[i].Open; // define a growing candle
                var longPos = sec.Positions.GetLastActiveForSignal("LE", i); // get active position

                if (longPos == null)
                {
                    // if there is no position, then check the signal
                    if (signalBuy)
                    {
                        // if there is a buy signal, then buy by market
                        sec.Positions.BuyAtMarket(i + 1, 1, "LE");
                    }
                }
                else
                {
                    // if there is a position, then we put a stop loss and take profit
                    longPos.CloseAtStop(i + 1, longPos.EntryPrice - 200, "LXS");
                    longPos.CloseAtProfit(i + 1, longPos.EntryPrice + 400, "LXP");
                }
            }
        }
    }
}

Last updated 3 years ago

Was this helpful?