abstract concept G22TradingStrategy extends ConceptWithChangeListeners { settable bool verbose; gettable S globalID = aGlobalID(); gettable transient Q q = startQ(); // link to market (optional) transient settable IFuturesMarket market; settableWithVar S cryptoCoin; settableWithVar S marginCoin = "USDT"; settableWithVar bool usingLiveData; settableWithVar bool doingRealTrades; settableWithVar bool demoCoin; settableWithVar bool active; // moved to archive (out of main list) settableWithVar bool archived; settableWithVar double adversity = 0.2; settableWithVar new LS log; // increment of crypto we can bet on settableWithVar double cryptoStep = 0.0001; // minimum crypto we need to bet on settableWithVar double minCrypto = 0.0001; settableWithVar double maxInvestment; swappable long currentTime() { ret now(); } // Note from price feeder settableWithVar S feedNote; void log(O o) { if (o != null) { log.add(print(str(o))); change(); } } LS activationStatus() { ret llNempties( active ? "Active" : "Inactive", empty(cryptoCoin) ? null : "coin: " + cryptoCoin + " over " + marginCoin + stringIf(demoCoin, " (demo coin)"), stringIf(market != null, "connected to market"), stringIf(usingLiveData, "using live data"), stringIf(doingRealTrades, "real trades") ); } abstract Cl openPositions(); abstract Cl closedPositions(); }