Strategy Examples:
When you're investing in the stock market, you might want to consider changing your trading approach based on the current economic climate; in upward-trending economies, known as bull markets, you might consider making riskier trades than you would in a downward-trending bear market. We're looking to create an automated trading system that can automatically change its strategies based on the current market conditions. While we won't be going into how to detect the current market conditions, we can use the Strategy Pattern to create a basic representation of how we might achieve the dynamic approach to trading strategies.
interface TradingStrategy
{
makeTrades(): void;
}
class RiskyTradingStrategy implements TradingStrategy
{
public makeTrades()
{
console.log("Making risky trades!");
}
}
class ModerateTradingStrategy implements TradingStrategy
{
public makeTrades()
{
console.log("Making moderate trades.");
}
}
class ConservativeTradingStrategy implements TradingStrategy
{
public makeTrades()
{
console.log("Making safe trades.");
}
}
enum TradeConditions
{
BearMarket,
BullMarket,
RecoveringMarket
}
class TradingFirm
{
private riskyStrategy: TradingStrategy;
private moderateStrategy: TradingStrategy;
private safeStrategy: TradingStrategy;
private currentStrategy: TradingStrategy;
constructor()
{
this.riskyStrategy = new RiskyTradingStrategy();
this.moderateStrategy = new ModerateTradingStrategy();
this.safeStrategy = new ConservativeTradingStrategy();
this.currentStrategy = this.moderateStrategy;
}
public marketUpdate(marketCondition: TradeConditions)
{
switch(marketCondition)
{
case TradeConditions.BearMarket:
this.currentStrategy = this.safeStrategy;
break;
case TradeConditions.BullMarket:
this.currentStrategy = this.riskyStrategy;
break;
case TradeConditions.RecoveringMarket:
this.currentStrategy = this.moderateStrategy;
break;
}
this.currentStrategy.makeTrades();
}
}
class StrategyDemo
{
public execute()
{
let firm = new TradingFirm();
firm.marketUpdate(TradeConditions.BullMarket); // "Making risky trades!"
firm.marketUpdate(TradeConditions.BearMarket); // "Making safe trades."
firm.marketUpdate(TradeConditions.RecoveringMarket); // "Making moderate trades."
}
}
Find any bugs in the code? let us know!