Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

98
LINES

< > BotCompany Repo | #1036115 // TradingCandle - a candle in a trading view

JavaX fragment (include) [tags: use-pretranspiled]

Libraryless. Click here for Pure Java version (10759L/60K).

sclass TradingCandle {
  // min, max, start and end prices
  settable double min = infinity();
  settable double max;
  settable double start;
  settable double end;
  
  settable Timestamp startTime;
  settable Timestamp endTime;
  settable long projectedEndTime;
  settable bool ongoing;
  
  settable S coin;
  
  double openingPrice aka startingPrice aka open() { ret start; }
  double closingPrice aka endPrice aka close() { ret end; }
  
  selfType open(double x) { ret start(x); }
  selfType close(double x) { ret end(x); }
  selfType high(double x) { ret max(x); }
  selfType low(double x) { ret min(x); }
  
  bool isGreen() {
    ret end > start;
  }
  
  bool isRed() {
    ret end < start;
  }
  
  bool isWhite() {
    ret end == start;
  }
  
  S colorText() {
    ret isGreen() ? "green"
      : isRed() ? "red"
      : "white";
  }
  
  double durationInSeconds() {
    ret toSeconds(endTime.minus(startTime));
  }
  
  void addValue(double price, Timestamp timestamp) {
    if (price < min) min = price;
    if (price > max) max = price;
    end = price;
    endTime = timestamp;
    if (startTime == null) {
      startTime = timestamp;
      start = price;
    }
  }
  
  S myType() { ret "candle"; }
  
  toString {
    S text = firstToUpper(colorText()) + " " + myType();
    if (startTime != null) {
      text += " starting " + startTime + ", duration " +
        iround(toSeconds(endTime.minus(startTime))) + "s";
      text += ", starting price " + formatPrice(start) + ", end price " + formatPrice(end);
      text += ", min " + formatPrice(min) + ", max " + formatPrice(max);
    }
    ret text;
  }
  
  double changeRatio() {
    ret doubleRatio(end, start);
  }
  
  public TradingCandle clone() {
    ret shallowClone(this);
  }
  
  Color color() {
    ret directionToCandleColor(end-start);
  }
  
  double hl2 aka mid() { ret avg(min, max); }
  double delta aka move() { ret end-start; }
  double high() { ret max; }
  double low() { ret min; }
  
  selfType startTime(long startTime) { ret startTime(toTimestamp(startTime)); }
  selfType endTime(long endTime) { ret endTime(toTimestamp(endTime)); }
  
  Timestamp openingTime() { ret startTime; }
  Timestamp closingTime() { ret endTime; }
  
  Timestamp middleTime() { ret new Timestamp((startTime.toLong()+endTime.toLong())/2); }
  
  // whichever one is later
  long endOrProjectedEndTime() {
    ret main max(endTime().unixDate(), projectedEndTime);
  }
}

download  show line numbers  debug dex  old transpilations   

Travelled to 2 computer(s): elmgxqgtpvxh, mqqgnosmbjvj

No comments. add comment

Snippet ID: #1036115
Snippet name: TradingCandle - a candle in a trading view
Eternal ID of this version: #1036115/31
Text MD5: 52ff03c3d354664bdc9469fa38b49ec8
Transpilation MD5: c34b04b317bde129fa4b63382f0c3662
Author: stefan
Category: javax
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2023-03-20 21:42:36
Source code size: 2541 bytes / 98 lines
Pitched / IR pitched: No / No
Views / Downloads: 252 / 449
Version history: 30 change(s)
Referenced in: #1003674 - Standard Classes + Interfaces (LIVE continued in #1034167)
#1036117 - TradingRun - a list of successive TradingCandles