Qu'est-ce qu'une stratégie ?
Une stratégie est une classe que vous allez écrire et qui va décrire ce que vous voulez faire (acheter, vendre, créer une position) en fonction des actifs dont vous disposez sur votre compte et des données du marché (des tickers qui arrivent) ou de toute autre information que vous irez chercher.
Afin que votre stratégie soit reconnue et exécutée par Cassandre, elle doit avoir l'annotation @CassandreStrategy et hériter de BasicCassandreStrategy .
Vous devez ensuite implémenter les méthodes suivantes :
- getRequestedCurrencyPairs() pour indiquer la liste des paires de devises que vous souhaitez que votre stratégie reçoive.
- getTradeAccount() pour indiquer, parmi la liste des comptes dont vous disposez sur l'exchange, lequel est celui qui sert au trading.
Vous trouverez ci-dessous une stratégie minimale, il s'agit d'une simple classe avec :
- L'Annotation @CassandreStrategy .
- L'héritage de BasicCassandreStrategy .
- Une implémentation de getRequestedCurrencyPairs() qui indique que l'on souhaite que l'on souhaite recevoir les tickers pour la paire de devise
BTC/USDT
. - Une implémentation de getTradeAccount() qui indique que, parmi tous les que l'on a sur l'exchange, celui que l'on utilise pour le trading est celui dont le nom est
trade
.
package com.mycompany.app;
import tech.cassandre.trading.bot.dto.user.AccountDTO;
import tech.cassandre.trading.bot.strategy.BasicCassandreStrategy;
import tech.cassandre.trading.bot.strategy.CassandreStrategy;
import tech.cassandre.trading.bot.util.dto.CurrencyDTO;
import tech.cassandre.trading.bot.util.dto.CurrencyPairDTO;
import java.util.Map;
import java.util.Set;
/**
* Simple strategy.
*/
@CassandreStrategy
public final class SimpleStrategy extends BasicCassandreStrategy {
@Override
public Set<CurrencyPairDTO> getRequestedCurrencyPairs() {
// We only ask for BTC/USDT tickers (Base currency : BTC / Quote currency : USDT).
return Set.of(new CurrencyPairDTO(BTC, USDT));
}
@Override
public Optional<AccountDTO> getTradeAccount(Set<AccountDTO> accounts) {
// From all the accounts we have on the exchange,
// we must return the one we use for trading.
return accounts.stream()
.filter(a -> "trade".equalsIgnoreCase(a.getName()))
.findFirst();
}
}
TIP
Dans un même trading bot, il est possible de faire fonctionner plusieurs stratégies ! Par contre, elles seront toutes connectées au même exchange.