Guest User

Untitled

a guest
Jul 21st, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. package org.doxla.privet.akka.strategy.simple
  2.  
  3. import akka.actor.{Actor, ActorRef, FSM}
  4. import akka.actor.FSM._
  5. import akka.util.duration._
  6. import org.doxla.privet.akka.bet._
  7.  
  8. sealed trait TradingState
  9. case object NoBetsPlaced extends TradingState
  10. case object BackPlaced extends TradingState
  11. case object BackMatched extends TradingState
  12. case object LayPlaced extends TradingState
  13. case object LayMatched extends TradingState
  14.  
  15. case class Trade(lastRate: Odds, back: Option[RunnerPosition])
  16.  
  17. sealed trait TradingMessage
  18. case class RateUpdate(currentOdds: Odds, change: Int) extends TradingMessage
  19. case class PlaceBack(amount: BigDecimal) extends TradingMessage
  20. case class Matched(price: BigDecimal)
  21.  
  22. trait TradingStrategy extends Actor with FSM[TradingState, Trade] {
  23.  
  24. val betPlacer: ActorRef
  25.  
  26. startWith(NoBetsPlaced, Trade(Odds(0), None), 1 second)
  27.  
  28. when(NoBetsPlaced)(receivePriceUpdate orElse placeBackWithBetPlacer)
  29.  
  30. when(BackPlaced)(receivePriceUpdate)
  31.  
  32. when(BackMatched)(receivePriceUpdate)
  33.  
  34. when(LayPlaced)(receivePriceUpdate)
  35.  
  36. when(LayMatched)(receivePriceUpdate)
  37.  
  38. val receivePriceUpdate: StateFunction = {
  39. case Event(RateUpdate(rate, change), currentTrade) =>
  40. stay using Trade(rate, currentTrade.back)
  41. }
  42.  
  43. val logReceive: StateFunction = {
  44. case Event(message, trade) =>
  45. log.debug("Received %s at trade %s", message, trade)
  46. stay
  47. }
  48.  
  49. val placeBackWithBetPlacer: StateFunction = {
  50. case Event(PlaceBack(amount), Trade(lastRate, _)) =>
  51. betPlacer ! PlaceBack(amount)
  52. goto(BackPlaced) using Trade(lastRate, Some(Back(amount, lastRate, UnMatched)))
  53. }
  54.  
  55. initialize
  56. }
Add Comment
Please, Sign In to add comment