Strategy Examples:

Java
Java
Python
Python
PHP
PHP
C#
C#
C++
C++
TypeScript
TypeScript
▸ Strategy Quick Review

Grow Your Own Hedge Fund

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.

Trading Strategy Interface:

interface TradingStrategy
{
   makeTrades(): void;
}

Our Strategies:

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.");
   }
}

Market Condition Enum:

enum TradeConditions
{
   BearMarket,
   BullMarket, 
   RecoveringMarket
}

The Trading Firm:

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();
   }
   
}

Demo:

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!