desic-okx-agent 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/dist/cli/index.js +0 -0
- package/dist/strategy/schema.d.ts +7 -5
- package/dist/strategy/schema.js +7 -4
- package/dist/strategy/schema.js.map +1 -1
- package/dist/strategy/series-codec.d.ts +50 -0
- package/dist/strategy/series-codec.js +103 -0
- package/dist/strategy/series-codec.js.map +1 -0
- package/dist/strategy/store.js +35 -33
- package/dist/strategy/store.js.map +1 -1
- package/docs/strategy-research.md +11 -0
- package/package.json +1 -1
- package/python/desic_strategy/context.py +18 -11
- package/skills/okx-strategy-research/references/python-api.md +4 -0
package/README.en.md
CHANGED
|
@@ -348,6 +348,6 @@ Trading software can cause financial loss. This project provides no investment a
|
|
|
348
348
|
|
|
349
349
|
## Status and license
|
|
350
350
|
|
|
351
|
-
This is pre-release software at version `0.3.
|
|
351
|
+
This is pre-release software at version `0.3.1`. OKX Demo trading should be validated in the target network environment before a `1.0.0` release. Strategy research and live execution have been verified end to end on the OKX demo venue; **live execution has not yet run against real money over any length of time**.
|
|
352
352
|
|
|
353
353
|
MIT License. See `LICENSE`. OKX and related marks belong to their respective owners.
|
package/README.md
CHANGED
|
@@ -334,6 +334,6 @@ npm link
|
|
|
334
334
|
|
|
335
335
|
## 状态与许可
|
|
336
336
|
|
|
337
|
-
当前为 `0.3.
|
|
337
|
+
当前为 `0.3.1` 预发布版本。正式发布 `1.0.0` 前,应在目标网络环境中完成 OKX Demo 交易验证。策略研究与实盘执行已在 OKX 模拟盘上端到端验证过,**实盘执行尚未经过长期真钱运行**。
|
|
338
338
|
|
|
339
339
|
MIT License,详见 `LICENSE`。OKX 及相关商标归其各自权利人所有。
|
package/dist/cli/index.js
CHANGED
|
File without changes
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Storage for queued and completed strategy runs.
|
|
3
3
|
*
|
|
4
|
-
* The equity curve is stored as
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The equity curve is stored as chunked binary float64 blocks rather than JSON rows.
|
|
5
|
+
* Every value round-trips bit-for-bit, which decimal JSON text does not guarantee, and
|
|
6
|
+
* a measured 344k-point curve is 2.4 MB here against roughly 40 MB as JSON objects.
|
|
7
|
+
*
|
|
8
|
+
* `codec` names the layout of each chunk's payload. It is read rather than inferred so
|
|
9
|
+
* that chunks written by an earlier build keep decoding correctly — see `series-codec.ts`.
|
|
8
10
|
*/
|
|
9
|
-
export declare const STRATEGY_SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS strategy_runs (\n id TEXT PRIMARY KEY,\n kind TEXT NOT NULL,\n status TEXT NOT NULL,\n strategy_name TEXT NOT NULL,\n strategy_hash TEXT NOT NULL,\n strategy_source TEXT NOT NULL,\n inst_id TEXT NOT NULL,\n request_json TEXT NOT NULL,\n data_snapshot_id TEXT,\n bar_count INTEGER NOT NULL DEFAULT 0,\n preload_bars INTEGER NOT NULL DEFAULT 0,\n progress_pct REAL NOT NULL DEFAULT 0,\n eta_ms INTEGER,\n metrics_json TEXT,\n -- The assumptions the run actually used. Stored per run because settings can\n -- change between runs, and a report that cannot say what it assumed is not\n -- comparable to any other report.\n assumptions_json TEXT,\n error TEXT,\n created_at INTEGER NOT NULL,\n started_at INTEGER,\n finished_at INTEGER\n);\n\nCREATE INDEX IF NOT EXISTS idx_strategy_runs_created\n ON strategy_runs(created_at DESC);\nCREATE INDEX IF NOT EXISTS idx_strategy_runs_status\n ON strategy_runs(status, created_at DESC);\n\nCREATE TABLE IF NOT EXISTS strategy_run_series (\n run_id TEXT NOT NULL,\n chunk_index INTEGER NOT NULL,\n from_point INTEGER NOT NULL,\n to_point INTEGER NOT NULL,\n start_ms INTEGER NOT NULL,\n step_ms INTEGER NOT NULL,\n payload BLOB NOT NULL,\n PRIMARY KEY(run_id, chunk_index)\n) WITHOUT ROWID;\n\nCREATE TABLE IF NOT EXISTS strategy_run_trades (\n run_id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n trade_json TEXT NOT NULL,\n PRIMARY KEY(run_id, seq)\n) WITHOUT ROWID;\n\nCREATE TABLE IF NOT EXISTS strategy_run_actions (\n run_id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n action_json TEXT NOT NULL,\n PRIMARY KEY(run_id, seq)\n) WITHOUT ROWID;\n\n-- One row per evaluated parameter combination of an optimize run.\n--\n-- Training and validation metrics are stored separately rather than merged into\n-- one figure. The gap between them is the finding: a candidate that earned its\n-- ranking and one that memorized the training segment are indistinguishable from\n-- a single number.\nCREATE TABLE IF NOT EXISTS strategy_optimization_candidates (\n run_id TEXT NOT NULL,\n candidate_index INTEGER NOT NULL,\n params_json TEXT NOT NULL,\n status TEXT NOT NULL,\n train_metrics_json TEXT,\n validation_metrics_json TEXT,\n -- Validation-segment score. Null while queued, and for a candidate that failed.\n rank_score REAL,\n -- Which formula produced rank_score, because it is not always Calmar.\n rank_basis TEXT,\n verdict TEXT,\n error TEXT,\n PRIMARY KEY(run_id, candidate_index)\n) WITHOUT ROWID;\n\n-- Ranking reads this in score order, so it is indexed rather than sorted per read.\nCREATE INDEX IF NOT EXISTS idx_optimization_rank\n ON strategy_optimization_candidates(run_id, rank_score DESC);\n";
|
|
11
|
+
export declare const STRATEGY_SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS strategy_runs (\n id TEXT PRIMARY KEY,\n kind TEXT NOT NULL,\n status TEXT NOT NULL,\n strategy_name TEXT NOT NULL,\n strategy_hash TEXT NOT NULL,\n strategy_source TEXT NOT NULL,\n inst_id TEXT NOT NULL,\n request_json TEXT NOT NULL,\n data_snapshot_id TEXT,\n bar_count INTEGER NOT NULL DEFAULT 0,\n preload_bars INTEGER NOT NULL DEFAULT 0,\n progress_pct REAL NOT NULL DEFAULT 0,\n eta_ms INTEGER,\n metrics_json TEXT,\n -- The assumptions the run actually used. Stored per run because settings can\n -- change between runs, and a report that cannot say what it assumed is not\n -- comparable to any other report.\n assumptions_json TEXT,\n error TEXT,\n created_at INTEGER NOT NULL,\n started_at INTEGER,\n finished_at INTEGER\n);\n\nCREATE INDEX IF NOT EXISTS idx_strategy_runs_created\n ON strategy_runs(created_at DESC);\nCREATE INDEX IF NOT EXISTS idx_strategy_runs_status\n ON strategy_runs(status, created_at DESC);\n\nCREATE TABLE IF NOT EXISTS strategy_run_series (\n run_id TEXT NOT NULL,\n chunk_index INTEGER NOT NULL,\n from_point INTEGER NOT NULL,\n to_point INTEGER NOT NULL,\n start_ms INTEGER NOT NULL,\n step_ms INTEGER NOT NULL,\n payload BLOB NOT NULL,\n codec TEXT NOT NULL DEFAULT 'f64x4',\n PRIMARY KEY(run_id, chunk_index)\n) WITHOUT ROWID;\n\nCREATE TABLE IF NOT EXISTS strategy_run_trades (\n run_id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n trade_json TEXT NOT NULL,\n PRIMARY KEY(run_id, seq)\n) WITHOUT ROWID;\n\nCREATE TABLE IF NOT EXISTS strategy_run_actions (\n run_id TEXT NOT NULL,\n seq INTEGER NOT NULL,\n action_json TEXT NOT NULL,\n PRIMARY KEY(run_id, seq)\n) WITHOUT ROWID;\n\n-- One row per evaluated parameter combination of an optimize run.\n--\n-- Training and validation metrics are stored separately rather than merged into\n-- one figure. The gap between them is the finding: a candidate that earned its\n-- ranking and one that memorized the training segment are indistinguishable from\n-- a single number.\nCREATE TABLE IF NOT EXISTS strategy_optimization_candidates (\n run_id TEXT NOT NULL,\n candidate_index INTEGER NOT NULL,\n params_json TEXT NOT NULL,\n status TEXT NOT NULL,\n train_metrics_json TEXT,\n validation_metrics_json TEXT,\n -- Validation-segment score. Null while queued, and for a candidate that failed.\n rank_score REAL,\n -- Which formula produced rank_score, because it is not always Calmar.\n rank_basis TEXT,\n verdict TEXT,\n error TEXT,\n PRIMARY KEY(run_id, candidate_index)\n) WITHOUT ROWID;\n\n-- Ranking reads this in score order, so it is indexed rather than sorted per read.\nCREATE INDEX IF NOT EXISTS idx_optimization_rank\n ON strategy_optimization_candidates(run_id, rank_score DESC);\n";
|
package/dist/strategy/schema.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Storage for queued and completed strategy runs.
|
|
3
3
|
*
|
|
4
|
-
* The equity curve is stored as
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* The equity curve is stored as chunked binary float64 blocks rather than JSON rows.
|
|
5
|
+
* Every value round-trips bit-for-bit, which decimal JSON text does not guarantee, and
|
|
6
|
+
* a measured 344k-point curve is 2.4 MB here against roughly 40 MB as JSON objects.
|
|
7
|
+
*
|
|
8
|
+
* `codec` names the layout of each chunk's payload. It is read rather than inferred so
|
|
9
|
+
* that chunks written by an earlier build keep decoding correctly — see `series-codec.ts`.
|
|
8
10
|
*/
|
|
9
11
|
export const STRATEGY_SCHEMA_SQL = `
|
|
10
12
|
CREATE TABLE IF NOT EXISTS strategy_runs (
|
|
@@ -45,6 +47,7 @@ CREATE TABLE IF NOT EXISTS strategy_run_series (
|
|
|
45
47
|
start_ms INTEGER NOT NULL,
|
|
46
48
|
step_ms INTEGER NOT NULL,
|
|
47
49
|
payload BLOB NOT NULL,
|
|
50
|
+
codec TEXT NOT NULL DEFAULT 'f64x4',
|
|
48
51
|
PRIMARY KEY(run_id, chunk_index)
|
|
49
52
|
) WITHOUT ROWID;
|
|
50
53
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/strategy/schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/strategy/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFlC,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { EquityPoint } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* How one equity chunk's bytes are laid out.
|
|
4
|
+
*
|
|
5
|
+
* The name is stored beside the payload rather than inferred from its length, so a
|
|
6
|
+
* chunk written by an older build keeps being read the way it was written. A codec is
|
|
7
|
+
* append-only: once a name has been persisted its decoder stays.
|
|
8
|
+
*/
|
|
9
|
+
export type SeriesCodec = "f64x4" | "f64x3z";
|
|
10
|
+
/** What every codec written before the column existed must be read as. */
|
|
11
|
+
export declare const LEGACY_CODEC: SeriesCodec;
|
|
12
|
+
/** What new chunks are written with. */
|
|
13
|
+
export declare const CURRENT_CODEC: SeriesCodec;
|
|
14
|
+
export interface ChunkPlan {
|
|
15
|
+
codec: SeriesCodec;
|
|
16
|
+
/** First point's timestamp, in epoch ms. */
|
|
17
|
+
startMs: number;
|
|
18
|
+
/** Spacing between consecutive points, in ms. Zero for a single-point chunk. */
|
|
19
|
+
stepMs: number;
|
|
20
|
+
payload: Buffer;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Encodes one chunk of the equity curve.
|
|
24
|
+
*
|
|
25
|
+
* Two things shrink it. The time column is dropped, because a backtest evaluates one
|
|
26
|
+
* closed bar at a time and those timestamps are an arithmetic sequence — `startMs +
|
|
27
|
+
* stepMs * i` reproduces them exactly, and this is verified rather than assumed.
|
|
28
|
+
* The remaining three f64 columns compress well because consecutive equity values
|
|
29
|
+
* share most of their bytes.
|
|
30
|
+
*
|
|
31
|
+
* When the spacing is not uniform the chunk falls back to `f64x4`, which stores every
|
|
32
|
+
* timestamp. A gap in the curve is a fact about the run, not something to smooth over.
|
|
33
|
+
*/
|
|
34
|
+
export declare function encodeChunk(points: readonly EquityPoint[]): ChunkPlan;
|
|
35
|
+
/**
|
|
36
|
+
* Reads points `[fromIndex, toIndex)` of a chunk, where the indexes are relative to
|
|
37
|
+
* the chunk's own first point.
|
|
38
|
+
*
|
|
39
|
+
* A compressed chunk has to be inflated whole before any point can be addressed, so
|
|
40
|
+
* the range only narrows what is materialized, not what is decompressed. That is why
|
|
41
|
+
* chunks are bounded in size: the cost of reading one point is the cost of one chunk.
|
|
42
|
+
*/
|
|
43
|
+
export declare function decodeChunk(chunk: {
|
|
44
|
+
codec: SeriesCodec;
|
|
45
|
+
startMs: number;
|
|
46
|
+
stepMs: number;
|
|
47
|
+
payload: Buffer;
|
|
48
|
+
}, fromIndex: number, toIndex: number): EquityPoint[];
|
|
49
|
+
/** Names a stored codec, treating anything written before the column existed as legacy. */
|
|
50
|
+
export declare function codecFrom(value: unknown): SeriesCodec;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import zlib from "node:zlib";
|
|
2
|
+
/** What every codec written before the column existed must be read as. */
|
|
3
|
+
export const LEGACY_CODEC = "f64x4";
|
|
4
|
+
/** What new chunks are written with. */
|
|
5
|
+
export const CURRENT_CODEC = "f64x3z";
|
|
6
|
+
/** Bytes per point in the uncompressed four-column layout. */
|
|
7
|
+
const F64X4_STRIDE = 32;
|
|
8
|
+
/** Bytes per point once the time column is dropped. */
|
|
9
|
+
const F64X3_STRIDE = 24;
|
|
10
|
+
/**
|
|
11
|
+
* Encodes one chunk of the equity curve.
|
|
12
|
+
*
|
|
13
|
+
* Two things shrink it. The time column is dropped, because a backtest evaluates one
|
|
14
|
+
* closed bar at a time and those timestamps are an arithmetic sequence — `startMs +
|
|
15
|
+
* stepMs * i` reproduces them exactly, and this is verified rather than assumed.
|
|
16
|
+
* The remaining three f64 columns compress well because consecutive equity values
|
|
17
|
+
* share most of their bytes.
|
|
18
|
+
*
|
|
19
|
+
* When the spacing is not uniform the chunk falls back to `f64x4`, which stores every
|
|
20
|
+
* timestamp. A gap in the curve is a fact about the run, not something to smooth over.
|
|
21
|
+
*/
|
|
22
|
+
export function encodeChunk(points) {
|
|
23
|
+
if (points.length === 0) {
|
|
24
|
+
throw new Error("An equity chunk needs at least one point");
|
|
25
|
+
}
|
|
26
|
+
const first = points[0];
|
|
27
|
+
const stepMs = points.length > 1 ? points[1].timeMs - first.timeMs : 0;
|
|
28
|
+
if (!isUniform(points, first.timeMs, stepMs)) {
|
|
29
|
+
return { codec: "f64x4", startMs: first.timeMs, stepMs, payload: encodeF64x4(points) };
|
|
30
|
+
}
|
|
31
|
+
const raw = Buffer.allocUnsafe(points.length * F64X3_STRIDE);
|
|
32
|
+
points.forEach((point, index) => {
|
|
33
|
+
const base = index * F64X3_STRIDE;
|
|
34
|
+
raw.writeDoubleLE(point.equityUsdt, base);
|
|
35
|
+
raw.writeDoubleLE(point.realizedCashUsdt, base + 8);
|
|
36
|
+
raw.writeDoubleLE(point.unrealizedPnlUsdt, base + 16);
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
codec: "f64x3z",
|
|
40
|
+
startMs: first.timeMs,
|
|
41
|
+
stepMs,
|
|
42
|
+
payload: zlib.deflateSync(raw)
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Reads points `[fromIndex, toIndex)` of a chunk, where the indexes are relative to
|
|
47
|
+
* the chunk's own first point.
|
|
48
|
+
*
|
|
49
|
+
* A compressed chunk has to be inflated whole before any point can be addressed, so
|
|
50
|
+
* the range only narrows what is materialized, not what is decompressed. That is why
|
|
51
|
+
* chunks are bounded in size: the cost of reading one point is the cost of one chunk.
|
|
52
|
+
*/
|
|
53
|
+
export function decodeChunk(chunk, fromIndex, toIndex) {
|
|
54
|
+
const rows = [];
|
|
55
|
+
if (chunk.codec === "f64x4") {
|
|
56
|
+
for (let index = fromIndex; index < toIndex; index += 1) {
|
|
57
|
+
const base = index * F64X4_STRIDE;
|
|
58
|
+
rows.push({
|
|
59
|
+
timeMs: chunk.payload.readDoubleLE(base),
|
|
60
|
+
equityUsdt: chunk.payload.readDoubleLE(base + 8),
|
|
61
|
+
realizedCashUsdt: chunk.payload.readDoubleLE(base + 16),
|
|
62
|
+
unrealizedPnlUsdt: chunk.payload.readDoubleLE(base + 24)
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return rows;
|
|
66
|
+
}
|
|
67
|
+
const raw = zlib.inflateSync(chunk.payload);
|
|
68
|
+
for (let index = fromIndex; index < toIndex; index += 1) {
|
|
69
|
+
const base = index * F64X3_STRIDE;
|
|
70
|
+
rows.push({
|
|
71
|
+
timeMs: chunk.startMs + chunk.stepMs * index,
|
|
72
|
+
equityUsdt: raw.readDoubleLE(base),
|
|
73
|
+
realizedCashUsdt: raw.readDoubleLE(base + 8),
|
|
74
|
+
unrealizedPnlUsdt: raw.readDoubleLE(base + 16)
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return rows;
|
|
78
|
+
}
|
|
79
|
+
/** Names a stored codec, treating anything written before the column existed as legacy. */
|
|
80
|
+
export function codecFrom(value) {
|
|
81
|
+
return value === "f64x3z" ? "f64x3z" : LEGACY_CODEC;
|
|
82
|
+
}
|
|
83
|
+
function isUniform(points, startMs, stepMs) {
|
|
84
|
+
// Checked rather than trusted: the decoder reconstructs every timestamp from this
|
|
85
|
+
// arithmetic, so one irregular bar would silently move the whole tail of the chunk.
|
|
86
|
+
for (let index = 0; index < points.length; index += 1) {
|
|
87
|
+
if (points[index].timeMs !== startMs + stepMs * index)
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
function encodeF64x4(points) {
|
|
93
|
+
const payload = Buffer.allocUnsafe(points.length * F64X4_STRIDE);
|
|
94
|
+
points.forEach((point, index) => {
|
|
95
|
+
const base = index * F64X4_STRIDE;
|
|
96
|
+
payload.writeDoubleLE(point.timeMs, base);
|
|
97
|
+
payload.writeDoubleLE(point.equityUsdt, base + 8);
|
|
98
|
+
payload.writeDoubleLE(point.realizedCashUsdt, base + 16);
|
|
99
|
+
payload.writeDoubleLE(point.unrealizedPnlUsdt, base + 24);
|
|
100
|
+
});
|
|
101
|
+
return payload;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=series-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"series-codec.js","sourceRoot":"","sources":["../../src/strategy/series-codec.ts"],"names":[],"mappings":"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"}
|
package/dist/strategy/store.js
CHANGED
|
@@ -2,9 +2,14 @@ import crypto from "node:crypto";
|
|
|
2
2
|
import { RuntimeError } from "../core/errors.js";
|
|
3
3
|
import { MAX_PAGE_ROWS } from "./constants.js";
|
|
4
4
|
import { STRATEGY_SCHEMA_SQL } from "./schema.js";
|
|
5
|
-
|
|
5
|
+
import { codecFrom, decodeChunk, encodeChunk } from "./series-codec.js";
|
|
6
|
+
/**
|
|
7
|
+
* Points per stored blob.
|
|
8
|
+
*
|
|
9
|
+
* A compressed chunk is inflated in full to reach any point inside it, so this bounds
|
|
10
|
+
* the cost of a single-point read. Measured at 8,192: 0.47 ms to inflate one chunk.
|
|
11
|
+
*/
|
|
6
12
|
const CHUNK_POINTS = 8_192;
|
|
7
|
-
const BYTES_PER_POINT = 32;
|
|
8
13
|
export class StrategyStore {
|
|
9
14
|
db;
|
|
10
15
|
now;
|
|
@@ -22,12 +27,17 @@ export class StrategyStore {
|
|
|
22
27
|
* such column" until the file is deleted.
|
|
23
28
|
*/
|
|
24
29
|
migrate() {
|
|
25
|
-
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
// Additive only: each entry must be nullable or carry a default, so rows written
|
|
31
|
+
// before the column existed stay valid. `codec` defaults to the layout those rows
|
|
32
|
+
// are actually in, which is what makes an old curve keep decoding correctly.
|
|
33
|
+
const additions = [
|
|
34
|
+
["strategy_runs", "assumptions_json", "TEXT"],
|
|
35
|
+
["strategy_run_series", "codec", "TEXT NOT NULL DEFAULT 'f64x4'"]
|
|
36
|
+
];
|
|
37
|
+
for (const [table, name, type] of additions) {
|
|
38
|
+
const columns = new Set(this.db.prepare(`PRAGMA table_info(${table})`).all().map((row) => row.name));
|
|
29
39
|
if (!columns.has(name))
|
|
30
|
-
this.db.exec(`ALTER TABLE
|
|
40
|
+
this.db.exec(`ALTER TABLE ${table} ADD COLUMN ${name} ${type}`);
|
|
31
41
|
}
|
|
32
42
|
}
|
|
33
43
|
/**
|
|
@@ -176,23 +186,24 @@ export class StrategyStore {
|
|
|
176
186
|
return { rows, offset: start, limit: bounded, total };
|
|
177
187
|
const end = Math.min(total, start + bounded);
|
|
178
188
|
const chunks = this.db
|
|
179
|
-
.prepare(`SELECT chunk_index,from_point,to_point,start_ms,step_ms,payload FROM strategy_run_series
|
|
189
|
+
.prepare(`SELECT chunk_index,from_point,to_point,start_ms,step_ms,payload,codec FROM strategy_run_series
|
|
180
190
|
WHERE run_id=? AND to_point>=? AND from_point<? ORDER BY chunk_index ASC`)
|
|
181
191
|
.all(id, start, end);
|
|
182
192
|
for (const chunk of chunks) {
|
|
183
193
|
const count = chunk.to_point - chunk.from_point + 1;
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
// Clamped to the chunk before decoding rather than filtered after: a compressed
|
|
195
|
+
// chunk has to be inflated whole, so the only saving available is in how many
|
|
196
|
+
// points get materialized.
|
|
197
|
+
const fromIndex = Math.max(0, start - chunk.from_point);
|
|
198
|
+
const toIndex = Math.min(count, end - chunk.from_point);
|
|
199
|
+
if (toIndex <= fromIndex)
|
|
200
|
+
continue;
|
|
201
|
+
rows.push(...decodeChunk({
|
|
202
|
+
codec: codecFrom(chunk.codec),
|
|
203
|
+
startMs: chunk.start_ms,
|
|
204
|
+
stepMs: chunk.step_ms,
|
|
205
|
+
payload: chunk.payload
|
|
206
|
+
}, fromIndex, toIndex));
|
|
196
207
|
}
|
|
197
208
|
return { rows, offset: start, limit: bounded, total };
|
|
198
209
|
}
|
|
@@ -275,22 +286,13 @@ export class StrategyStore {
|
|
|
275
286
|
writeSeries(id, equity) {
|
|
276
287
|
if (equity.length === 0)
|
|
277
288
|
return;
|
|
278
|
-
const statement = this.db.prepare(`INSERT INTO strategy_run_series(run_id,chunk_index,from_point,to_point,start_ms,step_ms,payload)
|
|
279
|
-
VALUES(
|
|
289
|
+
const statement = this.db.prepare(`INSERT INTO strategy_run_series(run_id,chunk_index,from_point,to_point,start_ms,step_ms,payload,codec)
|
|
290
|
+
VALUES(?,?,?,?,?,?,?,?)`);
|
|
280
291
|
let chunkIndex = 0;
|
|
281
292
|
for (let start = 0; start < equity.length; start += CHUNK_POINTS) {
|
|
282
293
|
const slice = equity.slice(start, start + CHUNK_POINTS);
|
|
283
|
-
const
|
|
284
|
-
|
|
285
|
-
const base = index * BYTES_PER_POINT;
|
|
286
|
-
payload.writeDoubleLE(point.timeMs, base);
|
|
287
|
-
payload.writeDoubleLE(point.equityUsdt, base + 8);
|
|
288
|
-
payload.writeDoubleLE(point.realizedCashUsdt, base + 16);
|
|
289
|
-
payload.writeDoubleLE(point.unrealizedPnlUsdt, base + 24);
|
|
290
|
-
});
|
|
291
|
-
const first = slice[0];
|
|
292
|
-
const step = slice.length > 1 ? slice[1].timeMs - first.timeMs : 0;
|
|
293
|
-
statement.run(id, chunkIndex, start, start + slice.length - 1, first.timeMs, step, payload);
|
|
294
|
+
const plan = encodeChunk(slice);
|
|
295
|
+
statement.run(id, chunkIndex, start, start + slice.length - 1, plan.startMs, plan.stepMs, plan.payload, plan.codec);
|
|
294
296
|
chunkIndex += 1;
|
|
295
297
|
}
|
|
296
298
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/strategy/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/strategy/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -211,6 +211,17 @@ if not buckets[-1].confirmed:
|
|
|
211
211
|
|
|
212
212
|
注意:`ctx.indicators` 只接受 `1m`。高周期的当前桶在确认前还可能被修正,用它做增量指标状态,缓存值会悄悄依赖于"第一次算的时间点"。
|
|
213
213
|
|
|
214
|
+
### 只要尾部就一定传 `lookback`
|
|
215
|
+
|
|
216
|
+
`ctx.market.bars()` 的开销取决于你要多少根,**传了 `lookback` 就只付那么多**。省略它会返回至今全部可见 K 线,而这个方法每根收线都会被调一次 —— 长窗口下这是"几秒"和"几分钟"的差别。
|
|
217
|
+
|
|
218
|
+
```python
|
|
219
|
+
bars = ctx.market.bars(ctx.instrument_id, "1m", lookback=period + 3) # 只付 period+3
|
|
220
|
+
bars = ctx.market.bars(ctx.instrument_id, "1m") # 26 万根全拿
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
只用 `ctx.indicators.*` 的策略完全不碰这条路径 —— 指标是增量维护的。
|
|
224
|
+
|
|
214
225
|
### 看不到未来
|
|
215
226
|
|
|
216
227
|
`ctx.market.bars()` 只暴露到当前可见长度,物理上取不到之后的 K 线。任何可见 K 线的 `closeTime ≤ ctx.as_of_ms`。测试里专门构造了"能看到未来就会盈利"的策略,断言它无法盈利。
|
package/package.json
CHANGED
|
@@ -44,18 +44,25 @@ class MarketView:
|
|
|
44
44
|
f"Market data is available for {self._instrument_id}, not {instrument_id}"
|
|
45
45
|
)
|
|
46
46
|
interval_ms(interval)
|
|
47
|
-
if
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
found = self._aggregates.get(interval)
|
|
51
|
-
if found is None:
|
|
52
|
-
raise ContextError(f"Series '{interval}' is not available in this run")
|
|
53
|
-
series = found
|
|
54
|
-
if lookback is None:
|
|
55
|
-
return series
|
|
56
|
-
if not isinstance(lookback, int) or isinstance(lookback, bool) or lookback <= 0:
|
|
47
|
+
if lookback is not None and (
|
|
48
|
+
not isinstance(lookback, int) or isinstance(lookback, bool) or lookback <= 0
|
|
49
|
+
):
|
|
57
50
|
raise ValueError("lookback must be a positive integer")
|
|
58
|
-
|
|
51
|
+
if interval == "1m":
|
|
52
|
+
# Sliced before the copy, not after. `_minutes` holds the whole run, so
|
|
53
|
+
# copying the visible prefix and then discarding all but the tail costs one
|
|
54
|
+
# copy of everything seen so far, on every bar — quadratic in the window
|
|
55
|
+
# length. Measured on a 260k-bar run: a strategy asking for 17 bars here
|
|
56
|
+
# took 576 us/bar, against 16 us/bar for one that never called this method.
|
|
57
|
+
stop = self._visible
|
|
58
|
+
start = 0 if lookback is None else max(0, stop - lookback)
|
|
59
|
+
return tuple(self._minutes[start:stop])
|
|
60
|
+
found = self._aggregates.get(interval)
|
|
61
|
+
if found is None:
|
|
62
|
+
raise ContextError(f"Series '{interval}' is not available in this run")
|
|
63
|
+
# Aggregates are already immutable tuples ending at the cutoff, so slicing one
|
|
64
|
+
# copies only what was asked for.
|
|
65
|
+
return found if lookback is None else found[-lookback:]
|
|
59
66
|
|
|
60
67
|
|
|
61
68
|
class StrategyContext:
|
|
@@ -37,6 +37,10 @@ bars = ctx.market.bars(ctx.instrument_id, "1m", lookback=240)
|
|
|
37
37
|
intervals are `1m`, `3m`, `5m`, `15m`, `30m`, `1H`, `2H`, `4H`, `6H`, `12H`, and
|
|
38
38
|
`1D`, but a higher timeframe must be requested for the run before it is readable.
|
|
39
39
|
|
|
40
|
+
Always pass `lookback` when only a tail is needed. It costs the size of the window
|
|
41
|
+
asked for, whereas omitting it copies every bar seen so far on every call — on a
|
|
42
|
+
long run that is the difference between a few seconds and a few minutes.
|
|
43
|
+
|
|
40
44
|
`Bar` fields: `openTimeMs`, `closeTimeMs`, `open`, `high`, `low`, `close`,
|
|
41
45
|
`volume`, `confirmed`.
|
|
42
46
|
|