sclass TradingSignal extends Meta {
  settable S coin;
  settable bool isLong;
  settable Timestamp timestamp;
  settable TradingRun afterRun;
  
  toString {
    S text = (isLong ? "Long" : "Short") + " signal "
      + (empty(coin) ? "" : "for " + coin + " ") + "at "
      + timestamp;
    if (afterRun != null)
      text += " after " + formatDouble2X(afterRun.changePercent()) + "% run";
    ret text;
  }
  
  // last candle before signal
  TradingCandle candle() { ret afterRun == null ?: last(afterRun.candles); }
  
  // Price at signal
  double price() {
    var candle = candle();
    ret candle == null ? Double.NaN : candle.end();
  }
}