Published: 08 May 2026 › Updated: 08 May 2026
Hive Engine Trading Bot - Part 3 - rc_intelligence.py
- Part - 1 - @strangedad/hive-engine-trading-bot-unified
- Part - 2 - @strangedad/hive-engine-trading-bot-cycle
Whats does rc_intelligence.py do?
- Checks a Hive account’s Resource Credits.
- Calculates the RC percentage.
- Labels RC status as
critical,low,guarded,healthy,high, orunknown. - Decides whether the bot can act or should wait.
- Sets safe wait times based on RC level.
- Limits how many new orders the bot should place.
- Tracks account RC history in a local state file.
- Estimates RC recharge speed over time.
- Adds cooldowns after failed transactions.
- Gives bots a safer recommended delay.
- Can run in the terminal as an RC monitor.
rc_intelligence.py
import os
import time
import json
import requests
from typing import Dict, Optional
STATE_FILE = os.path.join(os.path.dirname(__file__), ".rc_intelligence_state.json")
RC_API_URL = "https://api.hive.blog"
# RC operating bands
RC_CRITICAL = 6.0
RC_LOW = 10.0
RC_GUARDED = 20.0
RC_HEALTHY = 40.0
def _load_state() -> Dict:
try:
if os.path.exists(STATE_FILE):
with open(STATE_FILE, "r") as f:
data = json.load(f)
if isinstance(data, dict):
return data
except Exception:
pass
return {"accounts": {}}
def _save_state(state: Dict) -> None:
try:
with open(STATE_FILE, "w") as f:
json.dump(state, f, indent=2)
except Exception:
pass
def _ensure_account(state: Dict, account_name: str) -> Dict:
accounts = state.setdefault("accounts", {})
acc = accounts.get(account_name)
if not isinstance(acc, dict):
acc = {
"last_rc_percent": None,
"last_rc_ts": 0,
"recharge_ema_per_sec": 0.0,
"attempts": 0,
"successes": 0,
"failures": 0,
"failure_streak": 0,
"cooldown_until": 0,
"last_mode": "unknown",
"last_reason": "",
}
accounts[account_name] = acc
return acc
def get_rc_snapshot(account_name: str, timeout: int = 8) -> Optional[Dict]:
payload = {
"jsonrpc": "2.0",
"method": "rc_api.find_rc_accounts",
"params": {"accounts": [account_name]},
"id": 1,
}
try:
resp = requests.post(RC_API_URL, json=payload, timeout=timeout)
if resp.status_code != 200:
return None
data = resp.json()
rc = data.get("result", {}).get("rc_accounts", [{}])[0]
if not rc or "rc_manabar" not in rc or "max_rc" not in rc:
return None
current = int(rc["rc_manabar"]["current_mana"])
max_rc = int(rc["max_rc"])
if max_rc <= 0:
return None
percent = round((current / max_rc) * 100, 4)
return {
"percent": percent,
"current_mana": current,
"max_rc": max_rc,
"timestamp": int(time.time()),
}
except Exception:
return None
def _estimate_seconds_to_target(current_rc: float, target_rc: float, recharge_per_sec: float) -> int:
if current_rc >= target_rc:
return 0
if recharge_per_sec <= 0:
return 120
needed = target_rc - current_rc
return max(1, int(needed / recharge_per_sec))
def _mode_from_rc(rc_percent: Optional[float]) -> str:
if rc_percent is None:
return "unknown"
if rc_percent < RC_CRITICAL:
return "critical"
if rc_percent < RC_LOW:
return "low"
if rc_percent < RC_GUARDED:
return "guarded"
if rc_percent < RC_HEALTHY:
return "healthy"
return "high"
def evaluate_tx_window(
account_name: str,
action: str = "order",
desired_open_orders: int = 150,
current_open_orders: Optional[int] = None,
) -> Dict:
"""Return an intelligent RC policy decision for the next tx attempt.
action: buy | sell | cancel | order
"""
now = int(time.time())
state = _load_state()
acc = _ensure_account(state, account_name)
snapshot = get_rc_snapshot(account_name)
rc_percent = snapshot.get("percent") if snapshot else acc.get("last_rc_percent")
# Update recharge EMA when we have a fresh reading.
if snapshot:
prev_rc = acc.get("last_rc_percent")
prev_ts = int(acc.get("last_rc_ts", 0) or 0)
if prev_rc is not None and prev_ts > 0 and snapshot["timestamp"] > prev_ts:
delta_rc = float(snapshot["percent"]) - float(prev_rc)
delta_t = max(1, snapshot["timestamp"] - prev_ts)
instant_rate = delta_rc / delta_t
old_ema = float(acc.get("recharge_ema_per_sec", 0.0) or 0.0)
alpha = 0.25
new_ema = (alpha * instant_rate) + ((1 - alpha) * old_ema)
acc["recharge_ema_per_sec"] = max(0.0, new_ema)
acc["last_rc_percent"] = snapshot["percent"]
acc["last_rc_ts"] = snapshot["timestamp"]
cooldown_until = int(acc.get("cooldown_until", 0) or 0)
if now < cooldown_until:
wait_seconds = cooldown_until - now
decision = {
"allow": False,
"mode": "cooldown",
"rc_percent": rc_percent,
"wait_seconds": wait_seconds,
"reason": f"cooldown active for {wait_seconds}s",
"max_new_orders": 0,
}
acc["last_mode"] = decision["mode"]
acc["last_reason"] = decision["reason"]
_save_state(state)
return decision
mode = _mode_from_rc(rc_percent)
allow = True
wait_seconds = 0
max_new_orders = 1
reason = ""
is_cancel = str(action).lower() == "cancel"
needs_open_order_recovery = (
current_open_orders is not None and current_open_orders < desired_open_orders
)
if mode == "critical":
allow = is_cancel and (rc_percent is not None and rc_percent >= 4.0)
max_new_orders = 0
target = 8.0 if not is_cancel else 6.0
eta = _estimate_seconds_to_target(
float(rc_percent or 0.0),
target,
float(acc.get("recharge_ema_per_sec", 0.0) or 0.0),
)
wait_seconds = max(20, min(240, eta))
reason = "rc critical; preserve mana"
elif mode == "low":
# Allow recovery buys when book is under target, otherwise block new orders.
allow = is_cancel or needs_open_order_recovery
max_new_orders = 1 if allow and not is_cancel else 0
target = 12.0
eta = _estimate_seconds_to_target(
float(rc_percent or 0.0),
target,
float(acc.get("recharge_ema_per_sec", 0.0) or 0.0),
)
wait_seconds = max(10, min(120, eta))
reason = "rc low; maintenance mode"
elif mode == "guarded":
allow = True
max_new_orders = 2
wait_seconds = 5
reason = "rc guarded; reduced throughput"
elif mode == "healthy":
allow = True
max_new_orders = 4
wait_seconds = 1
reason = "rc healthy"
elif mode == "high":
allow = True
max_new_orders = 8
wait_seconds = 0
reason = "rc high"
else:
allow = True
max_new_orders = 2
wait_seconds = 2
reason = "rc unknown; conservative"
decision = {
"allow": allow,
"mode": mode,
"rc_percent": rc_percent,
"wait_seconds": wait_seconds,
"reason": reason,
"max_new_orders": max_new_orders,
}
acc["last_mode"] = mode
acc["last_reason"] = reason
_save_state(state)
return decision
def record_tx_outcome(account_name: str, success: bool) -> None:
now = int(time.time())
state = _load_state()
acc = _ensure_account(state, account_name)
acc["attempts"] = int(acc.get("attempts", 0) or 0) + 1
if success:
acc["successes"] = int(acc.get("successes", 0) or 0) + 1
acc["failure_streak"] = 0
acc["cooldown_until"] = 0
else:
acc["failures"] = int(acc.get("failures", 0) or 0) + 1
streak = int(acc.get("failure_streak", 0) or 0) + 1
acc["failure_streak"] = streak
rc_percent = acc.get("last_rc_percent")
if rc_percent is not None and float(rc_percent) < RC_LOW:
cooldown = min(300, 15 * (2 ** min(streak, 5)))
else:
cooldown = min(60, 5 * streak)
acc["cooldown_until"] = now + cooldown
_save_state(state)
def recommended_delay_seconds(account_name: str, base_delay: int) -> int:
decision = evaluate_tx_window(account_name, action="order")
return max(int(base_delay), int(decision.get("wait_seconds", 0) or 0))
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="RC intelligence monitor")
parser.add_argument("--accounts", nargs="+", required=True, help="Hive accounts to monitor")
parser.add_argument("--interval", type=int, default=30, help="Polling interval in seconds")
args = parser.parse_args()
while True:
for acc in args.accounts:
decision = evaluate_tx_window(acc, action="order")
rc = decision.get("rc_percent")
rc_str = "n/a" if rc is None else f"{rc:.2f}%"
print(
f"[RC] account={acc} rc={rc_str} mode={decision.get('mode')} "
f"allow={decision.get('allow')} wait={decision.get('wait_seconds')}s "
f"reason={decision.get('reason')}"
)
time.sleep(max(5, args.interval))
🤖 PeakeBot — Autonomous Trading System (RC-AWARE)
Independent multi-token trading bot featuring:
RC-aware execution, adaptive delay logic, and self-regulating trade cycles.
📊 Trading bot details:
👉 https://geocities.ws/p/e/peakecoin/trading-bot/peakebot_v0_01.html
💻 Open-source repositories:
👉 https://github.com/paulmoon410
🙏 Acknowledgements
For their continued support, guidance, and help expanding the PeakeCoin ecosystem.
Leave Hive Engine Trading Bot - Part 3 - rc_intelligence.py to:
Read more #hive-167922 posts
Best Posts From Peake_Dad
We have not curated any of strangedad's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From Peake_Dad
- Stolen Funds
- PeakeCoin Bots: Automated Trading Dashboard
- Peake RPG - MMO - Beta Version
- Peake RPG — Current Project Rundown
- Poor Man’s AI — Building While the Servers Are Down
- Hive Trading Bot - strategy.py - Part 4
- Hive Engine Trading Bot - Part 3 - rc_intelligence.py
- Hive Engine Trading Bot - Cycle Control - Part 2
- Hive Engine Trading Bot - Unified Logic - Part 1
- Arbiter Bot - Part 4 - place_order.py
- Arbiter Bot - Part 3 - fetch_market.py
- Arbiter Bot Part 2 - Cancel Logic
- Arbiter Bot - For All Hive Engine Tokens
- Turning Old Cell Phones Into CPU Miners
- Electrical Masters Exam... Passed.
- PeakeCoinBot.exe - Update
- Hive / Cronos - Hive Engine to CRO
- FPS - main.py - python
- PekAblo - Move Mechanics Problems
- Pekario - Now Mobile Friendly