# .github/workflow/scheduler.yml
on:
workflow_dispatch:
schedule:
- cron: '*/5 * * * *' # 每 5 分钟执行,是 actions 最低间隔
不同于 https://github.com/2nthony/okex-auto-trade-script 需要依靠 WS 响应来持续运行,每执行一次就是一个完整的生命周期。
strategy.json
购买策略,会根据此策略文件来决定如何购买或卖出。
{
"symbols": [
{
"type": "BTC/USDT",
"amounts": [0.0001, 0.0002, 0.0003],
"maxStage": 10,
"change": 0.02,
"safeChange": 0.06
},
{
"type": "ETH/USDT",
"amounts": [0.001, 0.002, 0.003],
...
}
]
}
state.json
用于记录当前交易状态,运行时生成,并在每次交易完成后修改。无此文件时视为刚运行并生成,存在时视为参照。
{
"symbols": [
{
"type": "BTC/USDT",
"price": 55555,
"nextBuyPrice": 55424,
"nextSellPrice": 55892,
"currentStage": 1,
},
{...}
]
}
在执行交易后,根据实际情况发送通知到 Telegram 。如果有 BTC/USDT
操作则有相关内容,以此类推。
----------
BTC/USDT
💵 买入
价格 `55555`
数量 `0.002`
----------
ETH/USDT
买入
----------
LTC/USDT
💰 卖出
----------
适当参考 https://github.com/2nthony/okex-auto-trade-script ,插件化是必然的。
// notifyTelegram.ts
export function notifyTelegramPlugin() {
return {
name: 'notify-telegram',
when?: (api) => boolean, // 根据条件是否启用插件
apply: (api) => {
// ...
}
}
}
# src
plugins/
index.ts // expose `readPlugins() => Plugin[]`
setProxy.ts // 设置代理
tickers.ts // 策略文件获取 tickers
ensureStateJson.ts // 确保 state.json,包括文件初始化和根据策略文件补充缺少的货币
analyzeTickersWithStateJson.ts// 分析当前 state.json 并收集需要买卖的货币
createOrder.ts // 根据收集下单买卖
analyzeSafeChange.ts // 分析stage=0的货币是否暴涨
updateStateJson.ts // 更新 state.json
notifyTelegram.ts // 通知tg机器人
utils/ // 函数
main.ts
types.ts
store.ts
// 未实际应用,目前是手动将插件排序(参考vite,或许在以后扩展有用
pre // 应用准备
post // 应用结束前
每次执行时,都会以最新获取的价格进行对比和买卖并基于此价格作下次买卖价格,不考虑下单时实际价格波动,有可能挂单或吃单。
由于交易所买卖有手续费(矿工费,因此需要准备足够的货币以抵消手续费。