# API Reference

Backtest endpoint: https://api.orats.io/backtest

Examples shown use curl (opens new window).

You can download the latest version of curl here (opens new window) and see instructions of how to use curl here (opens new window).

Please use the latest version of curl (opens new window) in order for all the request examples to work.

# Submit a Backtest

  • This endpoint submits a backtest to be added to a job queue.
  • The backtest engine will be alerted to run the backtest in the queue.
  • After the backtest has finished, it will change the status of the backtest as completed and call any callback url that has been set to alert that the backtest has completed.

POST | https://api.orats.io/backtest/submit

# Basic JSON postdata payload (IBM Long Call)

{
	"general": {
		"startDate": "2007-01-03",
		"endDate": "2019-04-16",
		"symbols": [{
			"symbol": "IBM",
			"weight": null,
			"signals": null
		}]
	},
	"entry": {
		"options": [{
			"ratio": 1,
			"optionType": "call",
			"leg": 1,
			"opening": {
				"dte": {
					"target": 40,
					"min": 30,
					"max": 50
				},
				"strikeSelection": {
					"type": "absDelta",
					"value": {
						"target": 0.35,
						"min": 0.25,
						"max": 0.45
					}
				}
			}
		}]
	}
}

# Example request using curl

curl -d "@IBM_LongCallBasic.json" -H "Authorization: your-private-token" -X POST "https://api.orats.io/backtest/submit"

# JSON Response

{ 
	"backtestId" : "hxo70n0kz9v2p0sg", 
	"status": "success"
}

TIP

For more details on JSON payload, see parameters

# Get Input Payload

To get the input json payload of your backtest.

GET | https://api.orats.io/backtest/input

# Example request using curl

curl -H "Authorization: your-private-token" -X GET "https://api.orats.io/backtest/input?backtestId=1DX2dr3m9yFeftF6ADYiyStjFHrPa2nv9q"

# JSON Response

{
    "general": {
        "exitAtSignal": null,
        "returnType": {
            "perTrade": "notional",
            "daily": "average"
        },
        "commission": {
            "option": 1,
            "stock": 0.01
        },
        "backtestName": null,
        "strategyName": null,
        "startDate": "2007-01-03",
        "endDate": "2018-10-05",
        "expirationType": "all",
        "stockPosition": {
            "type": null,
            "ratio": 0
        },
        "symbols": [
            {
                "weight": null,
                "signals": null,
                "symbol": "IBM"
            }
        ],
        "standardExpiration": null
    },
    "entry": {
        "options": [
            {
                "ratio": 1,
                "optionType": "call",
                "leg": 1,
                "opening": {
                    "dte": {
                        "target": 40,
                        "min": 30,
                        "max": 50
                    },
                    "strikeSelection": {
                        "type": "absDelta",
                        "value": {
                            "target": 0.35,
                            "min": 0.25,
                            "max": 0.45
                        }
                    }
                },
                "reEnter": null,
                "iBidVol": {
                    "min": null,
                    "max": null
                },
                "iAskVol": {
                    "min": null,
                    "max": null
                },
                "optionBid": {
                    "min": null,
                    "max": null
                },
                "optionAsk": {
                    "min": null,
                    "max": null
                },
                "adjustment": null
            }
        ],
        "spread": {
            "price": {
                "target": null,
                "min": null,
                "max": null
            },
            "delta": {
                "target": null,
                "min": null,
                "max": null
            },
            "yieldPct": {
                "min": null,
                "max": null
            }
        },
        "entryDays": null,
        "contractSize": 1,
        "legRelation": {
            "deltaTotal": {
                "leg1Leg2": {
                    "min": null,
                    "max": null
                },
                "leg2Leg3": {
                    "min": null,
                    "max": null
                },
                "leg3Leg4": {
                    "min": null,
                    "max": null
                }
            },
            "dteDiff": {
                "leg1Leg2": {
                    "min": null,
                    "max": null
                },
                "leg2Leg3": {
                    "min": null,
                    "max": null
                },
                "leg3Leg4": {
                    "min": null,
                    "max": null
                }
            },
            "strikeWidth": {
                "leg1Leg2": {
                    "min": null,
                    "max": null
                },
                "leg2Leg3": {
                    "min": null,
                    "max": null
                },
                "leg3Leg4": {
                    "min": null,
                    "max": null
                }
            }
        },
        "mktWidthPct": {
            "min": null,
            "max": null
        },
        "absCpDiffStkPxRatioMax": null,
        "stock": {
            "iVRank": {
                "min": null,
                "max": null
            },
            "entryDaysToEarn": {
                "min": null,
                "max": null
            }
        }
    },
    "exit": {
        "dteDays": "expire",
        "holdDays": null,
        "options": null,
        "spread": {
            "profitLossPct": {
                "min": null,
                "max": null
            },
            "strikeTrigger": {
                "type": "absDelta",
                "value": {
                    "min": null,
                    "max": null
                }
            },
            "price": {
                "min": null,
                "max": null
            },
            "strikeDiffPctValue": {
                "min": null,
                "max": null
            }
        },
        "bizDaysEarn": null
    },
    "hedge": {
        "days": null,
        "deltaTolerance": {
            "min": null,
            "max": null
        }
    }
}

# Setting a CallBack URL

A callback url is used so that you don't have to keep polling to get the status of the backtest using the status endpoint. The backtester will call a POST request to your callback url after the backtest has completed.

Example setting callback url:

{
	"general": {
		"startDate": "2007-01-03",
		"endDate": "2019-04-15",
		"symbols": [{
			"symbol": "IBM",
			"weight": null,
			"signals": null
		}],
		"callBackUrl": "https://yourCallBackUrl.com"
	},
	"entry": {
		"options": [{
			"ratio": 1,
			"optionType": "call",
			"leg": 1,
			"opening": {
				"dte": {
					"target": 40,
					"min": 30,
					"max": 50
				},
				"strikeSelection": {
					"type": "absDelta",
					"value": {
						"target": 0.35,
						"min": 0.25,
						"max": 0.45
					}
				}
			}
		}]
	}
}

After the backtester completes your test, it will attempt a post request to your callback url.

You should expect a JSON post payload in the format below:

{
	"backtestId":"hxo70n0kz9v2p0sg",
	"status":"completed",
	"executionTime":1.49,
	"totalWaitTime":9.92
}

# Backtest Status

Request status of a backtest.

GET | https://api.orats.io/backtest/status

# Get Status Example

curl -H "Authorization: your-private-token" -X GET "https://api.orats.io/backtest/status?backtestId=hxo70n0kz9v2p0sg"

Example Response

{
	"backtestId":"hxo70n0kz9v2p0sg",
	"status":"completed",
	"executionTime":1.49,
	"totalWaitTime":9.92
}

# Get multiple backtest status

POST | https://api.orats.io/backtest/status

# Get multiple status example

curl -H "Authorization: your-private-token" -X POST -d '["olhr49cdudx7m4w3","d9tcjv3l27kynvoo","k2wrar3fje52byvv"]' "https://api.orats.io/backtest/status"

Example Response

[{
	"backtestId": "olhr49cdudx7m4w3",
	"status": "completed",
	"executionTime": 40.68,
	"totalWaitTime": 46.74
}, {
	"backtestId": "d9tcjv3l27kynvoo",
	"status": "completed",
	"executionTime": 80.67,
	"totalWaitTime": 93.65
}, {
	"backtestId": "k2wrar3fje52byvv",
	"status": "completed",
	"executionTime": 86.98,
	"totalWaitTime": 97.73
}]

# Backtest Results

Request results of the backtest.

GET | https://api.orats.io/backtest/results

# Get Zip Formatted Results Example

curl -H "Authorization: your-private-token" -L "https://api.orats.io/backtest/results?backtestId=hxo70n0kz9v2p0sg" --output "LongCallBasicResults.zip"

In the zip file you will find a CSV version of the backtest results that includes StrategyStats.csv, StrategyTrades.csv, StrategyReturns.csv, StrategySummary.csv, StockStats.csv, StockReturns.csv, and StockSummary.csv.

We will go over the details of the results in the Results Definitions section.

# Get JSON Formatted Results Example

curl -H "Authorization: your-private-token" -L "https://api.orats.io/backtest/results?backtestId=hxo70n0kz9v2p0sg&format=json"

Example Response

{
	"strategy": {
		"trades": [{
			"date": "2007-01-09",
			"ticker": "IBM",
			"leg": 1,
			"ratio": 1,
			"optionType": "call",
			"year": 2007,
			"month": 2,
			"strike": 105,
			"dTE": 40,
			"tradeOptPx": 0.938,
			"delta": 0.25,
			"entryStockPx": 100.07,
			"ivr": "",
			"exitDate": "2007-02-16",
			"exitStockPx": 98.99,
			"exitOptionPx": 0,
			"expirDate": "2007-02-16",
			"expirPx": 98.99,
			"profit": -94.8,
			"tradeType": "opening"
		}, {
			"date": "2007-02-16",
			"ticker": "IBM",
			"leg": 1,
			"ratio": 1,
			"optionType": "call",
			"year": 2007,
			"month": 3,
			"strike": 100,
			"dTE": 30,
			"tradeOptPx": 1.188,
			"delta": 0.44,
			"entryStockPx": 98.99,
			"ivr": "",
			"exitDate": "2007-03-16",
			"exitStockPx": 93.25,
			"exitOptionPx": 0,
			"expirDate": "2007-03-16",
			"expirPx": 93.25,
			"profit": -119.8,
			"tradeType": "opening"
		}, 
		...
		],
		"returns": [{
			"date": "2007-01-09",
			"return": -9.9930048965724e-5,
			"delta": 0.25,
			"stockPx": 75.18776,
			"totalOptionProfit": 0,
			"totalTrades": 1
		}, {
			"date": "2007-01-10",
			"return": -0.002748076346557409,
			"delta": 0.202636,
			"stockPx": 74.30116,
			"totalOptionProfit": -27.499999999999993,
			"totalTrades": 1
		}, {
			"date": "2007-01-11",
			"return": -0.0013790346757269914,
			"delta": 0.168502,
			"stockPx": 74.12084,
			"totalOptionProfit": -13.8,
			"totalTrades": 1
		}, 
		...
		],
		"stats": {
			"summary": {
				"annReturn": -2.78,
				"annSharpe": -0.67,
				"maxDrawDownPct": 33.05,
				"drawDownDays": 3795,
				"pnlDollarPerTradeAvg": -39.72,
				"pnlDollarPerDayAvg": -1.08,
				"pnlPctPerTradeAvg": -0.19,
				"pnlPctPerDayAvg": -0.52,
				"strategyWinRate": 26.55,
				"daysInTradeAvg": 37,
				"totalTrades": 113,
				"totalDollarProfits": -4488.5,
				"totalPctProfits": -18.991305083670056,
				"avgCreditReceived": 209.15,
				"percentOfTimeInMarket": 96.93396226415094
			},
			"monthly": [{
				"year": 2007,
				"Jan": -0.92,
				"Feb": -1.17,
				"Mar": -0.09,
				"Apr": -1.71,
				"May": 1.15,
				"Jun": -2.87,
				"Jul": 4.15,
				"Aug": -0.47,
				"Sep": -0.62,
				"Oct": -0.98,
				"Nov": -3.11,
				"Dec": -0.94,
				"annReturn": -7.57,
				"annSharpe": -1.31
			}, {
				"year": 2008,
				"Jan": 0.36,
				"Feb": 0.76,
				"Mar": 1.37,
				"Apr": 2.63,
				"May": 2.47,
				"Jun": -5.94,
				"Jul": 3.18,
				"Aug": -2.06,
				"Sep": -1,
				"Oct": -2.51,
				"Nov": 0.45,
				"Dec": -3,
				"annReturn": -3.27,
				"annSharpe": -0.53
			},
			...
			]
		}
	},
	"stock": {
		"returns": [{
			"date": "2007-01-03",
			"return": 0,
			"stockPx": 73.08397
		}, {
			"date": "2007-01-04",
			"return": "0.0105551",
			"stockPx": 73.86538
		}, {
			"date": "2007-01-05",
			"return": "-0.0090530",
			"stockPx": 73.19668
		}, 
		...
		],
		"stats": {
			"summary": {
				"annReturn": 7.23,
				"annSharpe": 0.33,
				"maxDrawDownPct": 40.64,
				"drawDownDays": 119
			},
			"monthly": [{
				"year": 2007,
				"Jan": 2.03,
				"Feb": -6.08,
				"Mar": 1.49,
				"Apr": 8.28,
				"May": 4.7,
				"Jun": -1.16,
				"Jul": 5.23,
				"Aug": 5.84,
				"Sep": 1.01,
				"Oct": -1.26,
				"Nov": -8.96,
				"Dec": 2.92,
				"annReturn": 14.03,
				"annSharpe": 0.76
			}, {
				"year": 2008,
				"Jan": -0.37,
				"Feb": 6.8,
				"Mar": 1.26,
				"Apr": 4.89,
				"May": 7.53,
				"Jun": -8.61,
				"Jul": 7.89,
				"Aug": -4.49,
				"Sep": -3.39,
				"Oct": -21.07,
				"Nov": -11.17,
				"Dec": 3.93,
				"annReturn": -16.8,
				"annSharpe": -0.71
			},
			...
			]
		}
	}
}