<stdin> |

My Thoughts, Trials and Adventures

Getting Started With Algoticks

Posted at — Jul 2, 2020

Updated: 10-Mar-2021

  • Updated things that are changed in algoticks v2.0

Introduction

This is a quick “Getting Started” Guide to algoticks trading simulator program. Algorticks is an algorithmic trading simulator written in C with Speed and modularity as design objectives. It’s easy to write your own algorithms, all you need to know is how to write a for loop in C. (learn here)

Algoticks is built to handle many types of OHLC data, most of the data found online can be directly fed into the program without any additional filtering.

Getting Started

Get latest algoticks release from github repository!

to build from source, please refer to README.md

Preprocessing

Additional preprocessing is necessary to remove any oddities in your data like Missing data, ununiform formatting, etc.

Algoticks accepts upto 3 technical indicator columns namely as ti1, ti2, ti3. these values must be of type int or float. any additional technical indicators can be included using ti_others column name. these values are exposed as:

Row -> technical_indicators -> ti1 (float)
Row -> technical_indicators -> ti2 (float)
Row -> technical_indicators -> ti3 (float)
Row -> technical_indicators -> ti_others (char [2084])

Simulation

Example config file(s) can be found in the assets folder of the project. these are copied into bin folder on the invocation of make

example config.json

{
    "algo": "algorithms/3Reds.so",
    "datasource": "example.csv",
    "symbol": "SUNPHARMA",
    "candles": 3,
    "interval": 0,

    "quantity": 100,
    "target": 5,
    "stoploss": 7,
    "is_training_sl": false,
    "trailing_sl_val": 1,
    
    "sliding": false,
    "intraday": true,
    "skip_header": true

}

algo - This is the name of the algorithm.

datasource - This is the datasource which is expected to contain OHLC data.

symbol - Symbol corresponding to datasource.

candles - N candles to be sent to algo

interval - n rows to skip. Assuming your data is 1min interval, skipping 5 rows effectively makes it 5min interval data.

quantity - Quantity

target - Desired target (Absolute Value)

Stoploss - Desired Stoploss (Absolute Value)

is_training_sl - Enable/Disable Trailing SL.

trailing_sl_val - Value to adjust on Target hit if trailing SL enabled.

sliding - If enabled, the data on I(Iteration)+1 will be in the form of N(Candles)+1. Otherwise only new rows are processed on every iteration.

intraday - Position is closed if time is over intraday. (intraday_hour and intraday_min is to be set in settings.json)

skip_header - Skips headers (Must be set to true for header order detection)

if sliding: true

$$\ [r1, r2, r3]r4,r5,r6 $$ $$\ r1, [r2, r3,r4],r5,r6 $$

if sliding: false

$$\ [r1, r2, r3]r4,r5,r6 $$ $$\ r1, r2, r3,[r4,r5,r6] $$


Example

Data: NIFTY50 1min Interval OHLC

config.json


{
    "algo": "algorithms/3Reds.so",
    "datasource": "NIFTY50_1min.csv",
    "symbol": "NIFTY50",
    "candles": 3,
    "interval": 0,

    "quantity": 100,
    "target": 50,
    "stoploss": 75,
    "is_trailing_sl": true,
    "trailing_sl_val": 25,
    
    "sliding": false,
    "intraday": false,
    "skip_header": true

}

run algoticks from the command line:

./algoticks

to enable debug (this shows Target Hits, SL hits, TSL Adjustments, etc..)

./algoticks -D

On completion of the simulation, a result.csv is generated with results pertaining to completed simulation.

algo,pnl,datasource,symbol,candles,interval,target,stoploss,is_trailing_sl,trailing_sl_val,quantity,sliding,intraday,buy_signals,sell_signals,neutral_signals,trgt_hits,sl_hits,b_trgt_hits,s_trgt_hits,b_sl_hits,s_sl_hits,peak,bottom
algorithms/3Reds.so,-319344.750000,NIFTY50_1min.csv,NIFTY50,3,0,50.000000,75.000000,1,25.000000,100,0,0,0,380,1119,89,253,0,89,0,253,127930.085938,-346939.656250

Benchmark

Algoticks has the ability to perform hundreds of simulation to choose the best one.

benchmark mode can be enabled using command line arg -B

benchmark.json


{
    "algo": ["algorithms/3Greens.so", "algorithms/3Reds.so"],
    "datasource": ["example.csv"],
    "symbol": "SUNPHARMA",
    "candles": [4,6,8],
    "interval": [5,10,15],

    "quantity": [10],
    "target": [1.5,2,2.5],
    "stoploss": [2,2.5,3,3.5],
    "is_trailing_sl": [true,false],
    "trailing_sl_val": [1,2,3],
    
    "sliding": [true, false],
    "intraday": [true,false],
    "skip_header": true
}

A results.csv is generated with all the simulation results.

LiveMode

Alogticks can detect and work with live updated datasource(s).

This gives the ability to monitor and test real-time market data.

this feature can be enabled using -L command line arg.

example:

./algoticks -l

What this essentially does is that, on hitting EOF, the program will repeatedly check for file modification in datasource, if it detects any modification, it reloads the file and continues execution.

Conclusion

Algoticks is a result of almost a month of programming, tweaking and debugging. The idea was first implemented in python but the speed is not great, thus it will never see the light of the public. This is made with a vision to be very fast, compact, and robust compared to the initial python mock project.

Good day. 😊