geforkt von nique_372/AiDataGenByLeo
163 Zeilen
6,7 KiB
Markdown
163 Zeilen
6,7 KiB
Markdown
|
|
# Schema for the YAML config file used to generate features (FGBLC schema)
|
||
|
|
|
||
|
|
This document describes the format of the configuration file (YAML) used by `AiDataGenByLeo` to know which features to generate and how to arrange them into an output vector or matrix. The formal JSON Schema definition lives in [`Schema.json`](./Schema.json); this README is the plain-language explanation with examples.
|
||
|
|
|
||
|
|
## General structure
|
||
|
|
|
||
|
|
Every configuration file has three main top-level blocks:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
name: MyFeatureGenerator
|
||
|
|
config:
|
||
|
|
cols: 3
|
||
|
|
output:
|
||
|
|
type: AIDATALEO_GEN_VECTOR
|
||
|
|
contexts: [...]
|
||
|
|
```
|
||
|
|
|
||
|
|
- **`name`** (string): identifier for the generator. Used only for logging/debugging, it doesn't affect the calculation.
|
||
|
|
- **`config.cols`** (integer, required): number of output columns. It must match the total amount of features/values you declare under `output.contexts`.
|
||
|
|
- **`output`**: describes the shape and content of the output.
|
||
|
|
|
||
|
|
## `output.type`
|
||
|
|
|
||
|
|
Defines whether the output is a **vector** or a **matrix**:
|
||
|
|
|
||
|
|
- `AIDATALEO_GEN_VECTOR`: each feature contributes a single value per column (even if it internally requests several historical indexes, the final result is a flat vector).
|
||
|
|
- `AIDATALEO_GEN_MATRIX`: each feature contributes one or more rows within a column. Useful when you want, for example, a series of N candles of the same indicator as input to a model.
|
||
|
|
|
||
|
|
If you use `AIDATALEO_GEN_MATRIX`, you must also declare:
|
||
|
|
|
||
|
|
- **`output.rows`** (integer): maximum number of rows of the matrix. Not used (ignored) in vector mode.
|
||
|
|
|
||
|
|
## `output.contexts`
|
||
|
|
|
||
|
|
An array of configuration "blocks". Each context groups one or more features that share the same `mode` and the same index criteria (`idx`).
|
||
|
|
|
||
|
|
Each context has:
|
||
|
|
|
||
|
|
- **`mode`**: one of `normal`, `custom` or `generate`.
|
||
|
|
- **`idx`**: depends on `mode` (see below).
|
||
|
|
- **`data`**: array of features that the `mode`/`idx` is applied to.
|
||
|
|
|
||
|
|
### mode: normal
|
||
|
|
|
||
|
|
A single candle index, shared by every feature in that context.
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
- mode: normal
|
||
|
|
idx: 0
|
||
|
|
data:
|
||
|
|
- class: Ma_Zona
|
||
|
|
prefix: null
|
||
|
|
params:
|
||
|
|
timeframe: PERIOD_H1
|
||
|
|
period: 20
|
||
|
|
applied: PRICE_CLOSE
|
||
|
|
hide: false
|
||
|
|
ma_method: MODE_EMA
|
||
|
|
```
|
||
|
|
|
||
|
|
### mode: custom
|
||
|
|
|
||
|
|
A different index per feature declared in `data` (the first element of `idx` corresponds to the first feature in `data`, and so on).
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
- mode: custom
|
||
|
|
idx: [0, 1, 2]
|
||
|
|
data:
|
||
|
|
- class: Rsi_Valor
|
||
|
|
params: { timeframe: PERIOD_H1, period: 14, applied: PRICE_CLOSE, hide: false }
|
||
|
|
- class: Rsi_Valor
|
||
|
|
params: { timeframe: PERIOD_H1, period: 14, applied: PRICE_CLOSE, hide: false }
|
||
|
|
- class: Rsi_Valor
|
||
|
|
params: { timeframe: PERIOD_H1, period: 14, applied: PRICE_CLOSE, hide: false }
|
||
|
|
```
|
||
|
|
|
||
|
|
### mode: generate
|
||
|
|
|
||
|
|
Automatically generates a sequence of indexes from `[start, step, stop]`. Useful for requesting "the last N candles" without listing them one by one.
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
- mode: generate
|
||
|
|
idx: [0, 1, 9] # start=0, step=1, stop=9 -> generates 0,1,2,...,9
|
||
|
|
data:
|
||
|
|
- class: Ma_Zona
|
||
|
|
params:
|
||
|
|
timeframe: PERIOD_H1
|
||
|
|
period: 20
|
||
|
|
applied: PRICE_CLOSE
|
||
|
|
hide: false
|
||
|
|
ma_method: MODE_EMA
|
||
|
|
```
|
||
|
|
|
||
|
|
In matrix mode, `generate` is the typical way to fill several rows of the same column with a single feature.
|
||
|
|
|
||
|
|
### `data[].class`, `prefix` and `params`
|
||
|
|
|
||
|
|
- **`class`**: the feature's registered name in the factory (for example `Ma_Zona`, `Rsi_Valor`, `Sar_Distancia`, `News_HasEventToday`). A C++ class must be registered with that exact name via `AIDATAGENBYLEO_REGISTER_CREATOR_FE`.
|
||
|
|
- **`prefix`**: optional string (or `null`) appended to the column's final name in the CSV. Useful when you repeat the same `class` several times with different parameters and need to tell them apart in the header.
|
||
|
|
- **`params`**: a free-form object. Its keys depend entirely on the chosen feature (each class defines its own in snake_case, e.g. `timeframe`, `period`, `applied`, `hide`, `period_analysis`). There is no automatic cross-validation between `class` and the keys inside `params`: if you misspell a key or add one that doesn't exist, the feature will silently fall back to its default value.
|
||
|
|
|
||
|
|
## Full example — vector
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
name: VectorExample
|
||
|
|
config:
|
||
|
|
cols: 3
|
||
|
|
output:
|
||
|
|
type: AIDATALEO_GEN_VECTOR
|
||
|
|
contexts:
|
||
|
|
- mode: normal
|
||
|
|
idx: 0
|
||
|
|
data:
|
||
|
|
- class: Ma_Zona
|
||
|
|
params: { timeframe: PERIOD_H1, period: 20, applied: PRICE_CLOSE, hide: false, ma_method: MODE_EMA }
|
||
|
|
- class: Rsi_Valor
|
||
|
|
params: { timeframe: PERIOD_H1, period: 14, applied: PRICE_CLOSE, hide: false }
|
||
|
|
- class: TickVolume_Valor
|
||
|
|
params: { timeframe: PERIOD_H1 }
|
||
|
|
```
|
||
|
|
|
||
|
|
## Full example — matrix
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
name: MatrixExample
|
||
|
|
config:
|
||
|
|
cols: 1
|
||
|
|
output:
|
||
|
|
type: AIDATALEO_GEN_MATRIX
|
||
|
|
rows: 10
|
||
|
|
contexts:
|
||
|
|
- mode: generate
|
||
|
|
idx: [0, 1, 9]
|
||
|
|
data:
|
||
|
|
- class: Rsi_Valor
|
||
|
|
params: { timeframe: PERIOD_M15, period: 14, applied: PRICE_CLOSE, hide: false }
|
||
|
|
```
|
||
|
|
|
||
|
|
This builds a 10-row x 1-column matrix with the RSI value of the last 10 candles.
|
||
|
|
|
||
|
|
## Notes / gotchas
|
||
|
|
|
||
|
|
- Candle indexes follow the "0 = last closed candle" convention (the current, still-forming candle is never used). If you request `idx: 1`, you're actually asking for the candle before that one.
|
||
|
|
- The CSV header is built differently depending on the output type: in vector mode it uses each feature's real name (`class` + `prefix`); in matrix mode it uses generic names like `Col_0`, `Col_1`, etc.
|
||
|
|
- `config.cols` must match the total number of columns your `contexts` end up generating (the library doesn't validate this in a user-friendly way if it doesn't match).
|
||
|
|
|
||
|
|
## Validating the YAML/JSON with the schema
|
||
|
|
|
||
|
|
`Schema.json` is a standard [JSON Schema](https://json-schema.org/), so you can use it to validate your configuration before running it:
|
||
|
|
|
||
|
|
- **VSCode**: if your config file is in `.json` format, you can associate the schema by adding this to your `settings.json`:
|
||
|
|
```json
|
||
|
|
"json.schemas": [
|
||
|
|
{
|
||
|
|
"fileMatch": ["*.fgblc.json"],
|
||
|
|
"url": "./GenericData/ShemaJson/Schema.json"
|
||
|
|
}
|
||
|
|
]
|
||
|
|
```
|
||
|
|
This gives you autocomplete and inline errors right in the editor. If your config is `.yaml`, the [Red Hat YAML extension](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) lets you do the same thing under `yaml.schemas`.
|
||
|
|
- **Web validators**: you can paste the contents of `Schema.json` alongside your configuration (converted to JSON if it was in YAML) into tools like [jsonschemavalidator.net](https://www.jsonschemavalidator.net/) to quickly check whether your file matches the expected structure.
|
||
|
|
|
||
|
|
> Note: the schema validates the file's _shape_ (which fields exist, their types, what's required), but it does not validate that the keys inside `params` correspond to the feature named in `class` — that is only caught by the library at runtime.
|