User Guide: Creating New Strategies
Overview
This guide will walk you through the process of creating a new trading strategy in AlgoTrade4j. Strategies in AlgoTrade4j extend the BaseStrategy class, which provides a rich set of utilities and abstractions for common trading operations.
Prerequisites
Before creating a new strategy, ensure you're familiar with:
- Java programming
- Basic concepts of algorithmic trading
- AlgoTrade4j's
BaseStrategyclass and its methods
Step-by-Step Guide
1. Create a New Class
Start by creating a new Java class that extends BaseStrategy:
import dev.jwtly10.core.strategy.BaseStrategy;
public class MyNewStrategy extends BaseStrategy {
public MyNewStrategy() {
super("MyNewStrategyID");
}
}
2. Define Strategy Parameters
Use the @Parameter annotation to define configurable parameters for your strategy:
import dev.jwtly10.core.strategy.Parameter;
@Parameter(name = "stopLossTicks", description = "Tick size of the stop loss", value = "300", group = "Risk")
private int stopLossTicks;
@Parameter(name = "riskRatio", description = "Risk ratio of SL to TP", value = "5", group = "Risk")
private int riskRatio;
@Parameter(name = "shortSMALength", description = "Length of short-term SMA", value = "50", group = "Indicator")
private int shortSMALength;
Parameters can be grouped for better organization. The value field sets the default value.
3. Initialize Indicators
Override the initIndicators() method to create and initialize your strategy's indicators:
@Override
protected void initIndicators() {
shortSMA = createIndicator(iSMA.class, shortSMALength);
atrIndicator = createIndicator(iATRCandle.class, atrLength, atrSensitivity, relativeSize);
}
Use the createIndicator() method provided by BaseStrategy to instantiate indicators.
4. Implement Required Methods
At a minimum, you need to implement the following methods:
@Override
public void onTick(Tick tick, Bar currentBar) {
// React to each new tick
}
@Override
public void onBarClose(Bar bar) {
// Implement your main strategy logic here
}
@Override
public RiskProfileConfig getRiskProfileConfig() {
return riskProfile.getConfig();
}
5. Implement Strategy Logic
In the onBarClose/onTickMethod method, implement your strategy's core logic. This typically involves:
- Checking if indicators are ready
- Evaluating entry conditions
- Opening trades if conditions are met
Or any other custom ideas you may have
Example:
@Override
public void onBarClose(Bar bar) {
if (isReady() && isTimeToTrade(bar)) {
if (entryCheck(bar, true)) {
var id = openLong(createTradeParameters(true));
sendNotification(String.format("Opened long trade %s @ %s", id, Ask()));
} else if (entryCheck(bar, false)) {
var id = openShort(createTradeParameters(false));
sendNotification(String.format("Opened short trade %s @ %s", id, Bid()));
}
}
}
6. Utilize BaseStrategy Methods
Make use of the methods provided byBaseStrategy:
Here are a few main ones:
openLong()andopenShort()for opening tradesAsk()andBid()for current market pricessendNotification()for sending alertsgetStopLossGivenInstrumentPriceDir()for calculating stop loss prices without any manual calcs
Conclusion
By following this guide, you should be able to create a new strategy that leverages the power of AlgoTrade4j's BaseStrategy, and its platform.