This commit is contained in:
2026-08-26 12:25:21 +08:00
commit a431c4bcb6
10 changed files with 606 additions and 0 deletions
+92
View File
@@ -0,0 +1,92 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
STX 模拟操作 (DRY-RUN, 绝不下真实单)
- 用 OKX 实时行情驱动一套简单趋势+支撑压力策略
- 模拟开仓/止损/止盈, 输出虚拟盈亏与信号
- 默认杠杆 5x (仅模拟计算, 不影响真实账户)
"""
import subprocess, json, datetime, sys, os
HERE = os.path.dirname(os.path.abspath(__file__))
# ===== 策略参数 (基于之前分析) =====
INST = "STX-USDT-SWAP"
LEVER = 5 # 模拟杠杆
SUPPORT = 0.23 # 第一支撑(突破回踩买点)
STRONG_SUPPORT = 0.19 # 强支撑(止损参考)
PRESSURE = 0.2895 # 压力(前高, 止盈区)
STOP_LOSS = 0.205 # 模拟止损价(跌破强支撑上方一点)
TAKE_PROFIT = 0.285 # 模拟止盈价(接近前高)
SIM_QTY = 1000 # 模拟持仓张数(对应约 260 USDT 保证金 @5x)
_state_file = os.path.join(HERE, "stx_sim_state.json")
def get_ticker():
out = subprocess.run(
["curl", "-s", "--max-time", "10",
f"https://www.okx.com/api/v5/market/ticker?instId={INST}"],
capture_output=True, text=True, timeout=15).stdout
return json.loads(out)["data"][0]
def load_state():
try:
with open(_state_file) as f:
return json.load(f)
except Exception:
return {"position": "flat", "entry": 0.0, "side": ""}
def save_state(s):
with open(_state_file, "w") as f:
json.dump(s, f, indent=2)
def pnl(entry, last, qty, lever):
# 永续合约 U 本位, 多单盈亏 = (last-entry)/entry * 保证金 * lever
margin = (last * qty) / lever
return (last - entry) / entry * margin
def main():
tk = get_ticker()
last = float(tk["last"])
ts = datetime.datetime.now().strftime("%H:%M:%S")
st = load_state()
print(f"[{ts}] STX 现价 {last:.4f} | 状态: {st['position']}")
if st["position"] == "flat":
# 策略: 价格回踩第一支撑(0.23)附近且未破 -> 模拟开多
# 简化: 现价 <= 支撑*1.03 且 >= 强支撑 -> 开多
if STRONG_SUPPORT <= last <= SUPPORT * 1.03:
st = {"position": "long", "entry": last, "side": "long",
"time": ts, "qty": SIM_QTY, "lever": LEVER}
save_state(st)
print(f" >> 模拟开多 @ {last:.4f} 杠杆{LEVER}x 量{SIM_QTY} (虚拟)")
else:
print(f" -- 观望 (现价 {last:.4f} 未到买区 {STRONG_SUPPORT}~{SUPPORT*1.03:.4f})")
elif st["position"] == "long":
entry = st["entry"]
# 止损
if last <= STOP_LOSS:
p = pnl(entry, last, SIM_QTY, LEVER)
print(f" >> 模拟止损 @ {last:.4f} 虚拟盈亏 {p:+.2f} USDT")
save_state({"position": "flat", "entry": 0.0, "side": ""})
# 止盈
elif last >= TAKE_PROFIT:
p = pnl(entry, last, SIM_QTY, LEVER)
print(f" >> 模拟止盈 @ {last:.4f} 虚拟盈亏 {p:+.2f} USDT")
save_state({"position": "flat", "entry": 0.0, "side": ""})
else:
p = pnl(entry, last, SIM_QTY, LEVER)
print(f" -- 持仓中 开仓{entry:.4f} 虚拟浮动 {p:+.2f} USDT")
print(f" 关键位: 支撑{SUPPORT} 强支撑{STRONG_SUPPORT} 压力{PRESSURE} 止损{STOP_LOSS} 止盈{TAKE_PROFIT}")
if __name__ == "__main__":
main()