Home - worldexplorer/SquareOne GitHub Wiki

What is SquareOne?

SquareOne is a do-it-yourself thing. Using Tools-CsvImporter, you can add historical candles into the datasources' Symbols, strategies are generating positions, Profit factor is calculated at the end of backtest, you can sequentially increment each strategy parameter in optimizer and receive the report that you can rightClick - DropBackToChartAndShowPositions (in the v1.0-dev branch, not master branch). If you change the source code of a strategy in the Source Code Editor and rightClick-Run - the backtester will re-run and the report will get rebuilt accordingly... Etc...

You can use SquareOne to build your own C# trading strategies like in any other backtesting package, but SquareOne has an open source nature like linux kernel, so if you need to know what happens behind the curtain - you can. If you need to add Sharpe Ratio into backtesting report - you can. If you need to connect to your exchange to trade gold and silver - you can! "Just" develop data feed and order execution providers and run your backtested strategies in real-time through those.

Why did I develop SquareOne?

I started SquareOne 2 years ago because I wasn't satisfied with the trading packages currently available on the market: any time I hit the limitation of a particular backtesting engine, I had to switch to a more expensive license and rewrite my strategies again; after "studying" a few platforms I decided that:

  1. my time is worth better usage/application;

  2. I will develop myself what I was missing in the paid platforms;

  3. I'll make it open source so that a capable algotrader could use SQ1's source code to build the feature he was missing; you may or may not merge back with the implementation; YOU decide if it's worth sharing or it's your own;

  4. my business model won't be based on software sales revenue but on the profitable trading system earnings in real-time (if I will be persistent enough) while I'll be working on the next strategies and implementing the rest of the features I was missing in existing packages;

What was I missing in existing algotrading software packages?

  1. the platform source code open for my modifications; I couldn't improve platforms' performance, charting/graphic abilities, add my own KPI into backtesting report; drag my own optimization criteria across all the backtests as user-defined metric and have it as another column in optimization report, develop my own connector to a Bitcoin exchange;

  2. proprietary (paid or sold with the package) implementations of free broker APIs;

  3. backtesters have not been using all available Cores on my CPU (thank you MT5);

  4. none of trading packages were running under linux and mac as of 2012;

  5. massive GPU parallelism for backtests;

  6. Walk-Forward backtesting mode displaying visually InSample / OutOfSample distribution and highlighting parameters set with least dispersion (AmiBroker's and TradeStation's screenshots weren't convincing enough);

  7. backtesting of options strategies;

  8. readiness of the platform to allow strategy developer to develop triangle arbitrage strategies, options strategies, futures calendar spread, calibrate pair-trading, didn't allow to analyse and trade level2-specific trading patterns;

  9. I was forced to write userland (strategy-space) complex workarounds instead of the platform to implement simple enhancements (closed code didn't allow me to improve the platform);

  10. integration with external languages / libraries (Python, R, Matlab, my own DLL) wasn't implemented "properly";

What do I want to achieve in the nearest future?

  1. have a platform with the source code that is open; so that if I identified a missing feature I could implement it;

  2. develop one profitable trading strategy, that I confirmed is stable during the backtests; sequential incremental parameters scan shouldn't bring a huge dispersion in Profit Factor otherwise real-time losses are guaranteed;

  3. trade live through a trading terminal called QUIK (which provides data feed using DDE and order execution using an instantiated bridging DLL); the other brokers I'm interested in are InteractiveBrokers (my friend wants to autotrade through it) and OpenECry (very well architected API might be super-easy to integrate);