cripsy-binary-api 0.3.1__tar.gz
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.
- cripsy_binary_api-0.3.1/.env.example +16 -0
- cripsy_binary_api-0.3.1/.github/workflows/ci.yml +42 -0
- cripsy_binary_api-0.3.1/.github/workflows/wheels.yml +111 -0
- cripsy_binary_api-0.3.1/.gitignore +22 -0
- cripsy_binary_api-0.3.1/CHANGELOG.md +162 -0
- cripsy_binary_api-0.3.1/Cargo.lock +1577 -0
- cripsy_binary_api-0.3.1/Cargo.toml +66 -0
- cripsy_binary_api-0.3.1/LICENSE +21 -0
- cripsy_binary_api-0.3.1/PKG-INFO +42 -0
- cripsy_binary_api-0.3.1/README.md +423 -0
- cripsy_binary_api-0.3.1/docs/01_introduccion.es.md +117 -0
- cripsy_binary_api-0.3.1/docs/deriv/01_introduccion.es.md +55 -0
- cripsy_binary_api-0.3.1/docs/deriv/02_cuenta/01_cuentas_identificadores.es.md +46 -0
- cripsy_binary_api-0.3.1/docs/deriv/03_mercado/01_catalogo_velas_ticks.es.md +73 -0
- cripsy_binary_api-0.3.1/docs/deriv/04_ordenes/01_rise_fall_historial.es.md +63 -0
- cripsy_binary_api-0.3.1/docs/deriv/05_operativa/01_reconexion_reconciliacion.es.md +41 -0
- cripsy_binary_api-0.3.1/docs/deriv/06_limites/01_limites.es.md +40 -0
- cripsy_binary_api-0.3.1/docs/herramientas/01_herramientas.es.md +137 -0
- cripsy_binary_api-0.3.1/docs/iqoption/01_cuenta/01_sesion_cuentas.es.md +95 -0
- cripsy_binary_api-0.3.1/docs/iqoption/02_mercado/01_historicos.es.md +50 -0
- cripsy_binary_api-0.3.1/docs/iqoption/02_mercado/02_stream_ticks.es.md +71 -0
- cripsy_binary_api-0.3.1/docs/iqoption/02_mercado/03_fachada_sincrona.es.md +104 -0
- cripsy_binary_api-0.3.1/docs/iqoption/03_ordenes/01_binary.es.md +55 -0
- cripsy_binary_api-0.3.1/docs/iqoption/03_ordenes/02_digital.es.md +68 -0
- cripsy_binary_api-0.3.1/docs/iqoption/03_ordenes/03_blitz.es.md +59 -0
- cripsy_binary_api-0.3.1/docs/iqoption/04_operativa/01_indicadores.es.md +50 -0
- cripsy_binary_api-0.3.1/docs/iqoption/04_operativa/02_reconexion.es.md +107 -0
- cripsy_binary_api-0.3.1/docs/python/01_python.es.md +165 -0
- cripsy_binary_api-0.3.1/docs/releases/0.3.0.md +50 -0
- cripsy_binary_api-0.3.1/docs/releases/0.3.1.md +48 -0
- cripsy_binary_api-0.3.1/examples/build_docs.rs +719 -0
- cripsy_binary_api-0.3.1/examples/deriv_conectar.rs +147 -0
- cripsy_binary_api-0.3.1/examples/deriv_densidad.rs +92 -0
- cripsy_binary_api-0.3.1/examples/deriv_orden_demo.rs +143 -0
- cripsy_binary_api-0.3.1/examples/deriv_reconciliacion.rs +143 -0
- cripsy_binary_api-0.3.1/examples/deriv_reconexion.rs +122 -0
- cripsy_binary_api-0.3.1/examples/deriv_ticks.rs +68 -0
- cripsy_binary_api-0.3.1/examples/ejemplo_lectura.rs +77 -0
- cripsy_binary_api-0.3.1/examples/ejemplo_orden_demo.rs +109 -0
- cripsy_binary_api-0.3.1/examples/ejemplo_sincrono.rs +68 -0
- cripsy_binary_api-0.3.1/examples/estado_cuenta.rs +35 -0
- cripsy_binary_api-0.3.1/examples/verificar_todo.rs +561 -0
- cripsy_binary_api-0.3.1/img/banner.svg +32 -0
- cripsy_binary_api-0.3.1/img/donacion-binance.png +0 -0
- cripsy_binary_api-0.3.1/index.html +96 -0
- cripsy_binary_api-0.3.1/installation/README.md +76 -0
- cripsy_binary_api-0.3.1/installation/check_env.ps1 +47 -0
- cripsy_binary_api-0.3.1/installation/install.ps1 +162 -0
- cripsy_binary_api-0.3.1/pyproject.toml +33 -0
- cripsy_binary_api-0.3.1/python/Cargo.lock +1521 -0
- cripsy_binary_api-0.3.1/python/Cargo.toml +24 -0
- cripsy_binary_api-0.3.1/python/README.md +18 -0
- cripsy_binary_api-0.3.1/python/smoke_deriv.py +29 -0
- cripsy_binary_api-0.3.1/python/smoke_iqoption.py +27 -0
- cripsy_binary_api-0.3.1/python/src/lib.rs +565 -0
- cripsy_binary_api-0.3.1/python/test_offline.py +34 -0
- cripsy_binary_api-0.3.1/scripts/build_docs.ps1 +6 -0
- cripsy_binary_api-0.3.1/scripts/deriv/_env_deriv.ps1 +29 -0
- cripsy_binary_api-0.3.1/scripts/deriv/verificar_deriv.ps1 +39 -0
- cripsy_binary_api-0.3.1/scripts/iqoption/_env.ps1 +25 -0
- cripsy_binary_api-0.3.1/scripts/iqoption/balance.ps1 +6 -0
- cripsy_binary_api-0.3.1/scripts/iqoption/conectar.ps1 +7 -0
- cripsy_binary_api-0.3.1/scripts/iqoption/operar.ps1 +16 -0
- cripsy_binary_api-0.3.1/scripts/iqoption/verificar_iqoption.ps1 +24 -0
- cripsy_binary_api-0.3.1/scripts/verificar_todo.ps1 +24 -0
- cripsy_binary_api-0.3.1/scripts/verify.ps1 +26 -0
- cripsy_binary_api-0.3.1/src/broker/config.rs +92 -0
- cripsy_binary_api-0.3.1/src/broker/deriv/config.rs +202 -0
- cripsy_binary_api-0.3.1/src/broker/deriv/mod.rs +12 -0
- cripsy_binary_api-0.3.1/src/broker/deriv/protocol.rs +366 -0
- cripsy_binary_api-0.3.1/src/broker/deriv/session.rs +1361 -0
- cripsy_binary_api-0.3.1/src/broker/error.rs +43 -0
- cripsy_binary_api-0.3.1/src/broker/extras.rs +74 -0
- cripsy_binary_api-0.3.1/src/broker/historico.rs +194 -0
- cripsy_binary_api-0.3.1/src/broker/iq_option/client.rs +804 -0
- cripsy_binary_api-0.3.1/src/broker/iq_option/endpoints.rs +100 -0
- cripsy_binary_api-0.3.1/src/broker/iq_option/mapper.rs +1198 -0
- cripsy_binary_api-0.3.1/src/broker/iq_option/mod.rs +13 -0
- cripsy_binary_api-0.3.1/src/broker/iq_option/session.rs +1305 -0
- cripsy_binary_api-0.3.1/src/broker/mod.rs +31 -0
- cripsy_binary_api-0.3.1/src/broker/registry.rs +51 -0
- cripsy_binary_api-0.3.1/src/broker/session.rs +49 -0
- cripsy_binary_api-0.3.1/src/broker/sync.rs +239 -0
- cripsy_binary_api-0.3.1/src/broker/trait_.rs +137 -0
- cripsy_binary_api-0.3.1/src/compliance.rs +225 -0
- cripsy_binary_api-0.3.1/src/domain/account.rs +63 -0
- cripsy_binary_api-0.3.1/src/domain/asset.rs +140 -0
- cripsy_binary_api-0.3.1/src/domain/candle.rs +70 -0
- cripsy_binary_api-0.3.1/src/domain/error.rs +24 -0
- cripsy_binary_api-0.3.1/src/domain/event.rs +82 -0
- cripsy_binary_api-0.3.1/src/domain/mod.rs +27 -0
- cripsy_binary_api-0.3.1/src/domain/operation.rs +137 -0
- cripsy_binary_api-0.3.1/src/domain/payout.rs +85 -0
- cripsy_binary_api-0.3.1/src/domain/platform.rs +91 -0
- cripsy_binary_api-0.3.1/src/domain/position.rs +40 -0
- cripsy_binary_api-0.3.1/src/lib.rs +25 -0
- cripsy_binary_api-0.3.1/src/transport/error.rs +41 -0
- cripsy_binary_api-0.3.1/src/transport/http.rs +208 -0
- cripsy_binary_api-0.3.1/src/transport/mod.rs +27 -0
- cripsy_binary_api-0.3.1/src/transport/retry.rs +137 -0
- cripsy_binary_api-0.3.1/src/transport/router.rs +183 -0
- cripsy_binary_api-0.3.1/src/transport/websocket.rs +223 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Credenciales de IQ Option (cuenta demo).
|
|
2
|
+
# Copiar a .env y completar. NUNCA commitear .env.
|
|
3
|
+
|
|
4
|
+
IQOPTION_EMAIL = "tu-correo@ejemplo.com"
|
|
5
|
+
IQOPTION_PASSWORD = "tu-contrasena"
|
|
6
|
+
|
|
7
|
+
# --- Deriv (API moderna, segunda integración) ---
|
|
8
|
+
# Sin estas claves la API funciona en modo público y gratuito: catálogo,
|
|
9
|
+
# velas, ticks y cotización de payout.
|
|
10
|
+
# Para operar hacen falta credenciales propias: PAT con scope `trade`
|
|
11
|
+
# (o access token OAuth). `DERIV_APPID` solo es obligatorio con PAT.
|
|
12
|
+
DERIV_TOKEN=
|
|
13
|
+
DERIV_APPID=
|
|
14
|
+
# Opcional: cuenta concreta (demo DOT…/VRTC…, real CR…). Si falta, se elige la
|
|
15
|
+
# primera del tipo indicado en `DerivConfig.account`.
|
|
16
|
+
DERIV_ACCOUNT_ID=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [master]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
calidad:
|
|
11
|
+
name: Calidad (${{ matrix.os }})
|
|
12
|
+
runs-on: ${{ matrix.os }}
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
os: [ubuntu-latest, windows-latest]
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
20
|
+
with:
|
|
21
|
+
components: rustfmt, clippy
|
|
22
|
+
- name: Formato
|
|
23
|
+
run: cargo fmt --check
|
|
24
|
+
- name: Clippy sin warnings
|
|
25
|
+
run: cargo clippy --all-targets -- -D warnings
|
|
26
|
+
- name: Tests
|
|
27
|
+
run: cargo test
|
|
28
|
+
- name: Build variante blocking
|
|
29
|
+
run: cargo build --no-default-features --features blocking
|
|
30
|
+
|
|
31
|
+
documentacion:
|
|
32
|
+
name: Documentacion navegable
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@v4
|
|
36
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
37
|
+
- name: Generar HTML
|
|
38
|
+
run: cargo run --quiet --example build_docs -- --lang es --out docs/site
|
|
39
|
+
- uses: actions/upload-artifact@v4
|
|
40
|
+
with:
|
|
41
|
+
name: docs-site
|
|
42
|
+
path: docs/site
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
name: Python wheels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
push:
|
|
6
|
+
tags: ["v*"]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
linux:
|
|
13
|
+
name: Wheel (${{ matrix.plataforma }})
|
|
14
|
+
runs-on: ${{ matrix.os }}
|
|
15
|
+
strategy:
|
|
16
|
+
fail-fast: false
|
|
17
|
+
matrix:
|
|
18
|
+
include:
|
|
19
|
+
- os: ubuntu-latest
|
|
20
|
+
plataforma: linux-x64
|
|
21
|
+
imagen: quay.io/pypa/manylinux2014_x86_64:latest
|
|
22
|
+
- os: ubuntu-24.04-arm
|
|
23
|
+
plataforma: linux-arm64
|
|
24
|
+
imagen: quay.io/pypa/manylinux2014_aarch64:latest
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
- name: Construir manylinux2014
|
|
28
|
+
run: |
|
|
29
|
+
docker run --rm -v "$PWD:/io" -w /io \
|
|
30
|
+
${{ matrix.imagen }} \
|
|
31
|
+
bash -c '
|
|
32
|
+
set -euo pipefail
|
|
33
|
+
curl --proto "=https" --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
|
|
34
|
+
. "$HOME/.cargo/env"
|
|
35
|
+
/opt/python/cp310-cp310/bin/python -m pip install --upgrade pip "maturin==1.16.0"
|
|
36
|
+
/opt/python/cp310-cp310/bin/python -m maturin build --release --out /io/dist --compatibility manylinux2014 --manifest-path /io/python/Cargo.toml
|
|
37
|
+
'
|
|
38
|
+
- uses: actions/upload-artifact@v4
|
|
39
|
+
with:
|
|
40
|
+
name: wheels-${{ matrix.plataforma }}
|
|
41
|
+
path: dist/*.whl
|
|
42
|
+
|
|
43
|
+
wheels:
|
|
44
|
+
name: Wheel (${{ matrix.plataforma }})
|
|
45
|
+
runs-on: ${{ matrix.os }}
|
|
46
|
+
strategy:
|
|
47
|
+
fail-fast: false
|
|
48
|
+
matrix:
|
|
49
|
+
include:
|
|
50
|
+
- os: windows-latest
|
|
51
|
+
plataforma: windows-x64
|
|
52
|
+
- os: windows-11-arm
|
|
53
|
+
plataforma: windows-arm64
|
|
54
|
+
- os: macos-15-intel
|
|
55
|
+
plataforma: macos-intel
|
|
56
|
+
- os: macos-latest
|
|
57
|
+
plataforma: macos-arm64
|
|
58
|
+
steps:
|
|
59
|
+
- uses: actions/checkout@v4
|
|
60
|
+
- uses: PyO3/maturin-action@v1
|
|
61
|
+
with:
|
|
62
|
+
args: --release --out dist --compatibility pypi --manifest-path python/Cargo.toml
|
|
63
|
+
manylinux: auto
|
|
64
|
+
- uses: actions/upload-artifact@v4
|
|
65
|
+
with:
|
|
66
|
+
name: wheels-${{ matrix.plataforma }}
|
|
67
|
+
path: dist/*.whl
|
|
68
|
+
|
|
69
|
+
sdist:
|
|
70
|
+
name: Sdist
|
|
71
|
+
runs-on: ubuntu-latest
|
|
72
|
+
steps:
|
|
73
|
+
- uses: actions/checkout@v4
|
|
74
|
+
- uses: PyO3/maturin-action@v1
|
|
75
|
+
with:
|
|
76
|
+
command: sdist
|
|
77
|
+
args: --out dist --manifest-path python/Cargo.toml
|
|
78
|
+
- uses: actions/upload-artifact@v4
|
|
79
|
+
with:
|
|
80
|
+
name: sdist
|
|
81
|
+
path: dist/*.tar.gz
|
|
82
|
+
|
|
83
|
+
release:
|
|
84
|
+
name: Adjuntar al release
|
|
85
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
86
|
+
needs: [wheels, linux, sdist]
|
|
87
|
+
runs-on: ubuntu-latest
|
|
88
|
+
steps:
|
|
89
|
+
- uses: actions/download-artifact@v4
|
|
90
|
+
with:
|
|
91
|
+
path: dist
|
|
92
|
+
merge-multiple: true
|
|
93
|
+
- uses: softprops/action-gh-release@v2
|
|
94
|
+
with:
|
|
95
|
+
files: dist/*
|
|
96
|
+
|
|
97
|
+
# Publicacion en PyPI: pendiente de configurar el secreto PYPI_API_TOKEN.
|
|
98
|
+
# Cuando exista, descomentar este job (o usar trusted publishing con OIDC).
|
|
99
|
+
#
|
|
100
|
+
# publish:
|
|
101
|
+
# name: Publicar en PyPI
|
|
102
|
+
# if: startsWith(github.ref, 'refs/tags/')
|
|
103
|
+
# needs: [wheels, linux, sdist]
|
|
104
|
+
# runs-on: ubuntu-latest
|
|
105
|
+
# steps:
|
|
106
|
+
# - uses: actions/download-artifact@v4
|
|
107
|
+
# with: { path: dist, merge-multiple: true }
|
|
108
|
+
# - uses: PyO3/maturin-action@v1
|
|
109
|
+
# with: { command: upload, args: "--skip-existing dist/*" }
|
|
110
|
+
# env:
|
|
111
|
+
# MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Rust
|
|
2
|
+
/target
|
|
3
|
+
|
|
4
|
+
# Secretos: NUNCA al repositorio
|
|
5
|
+
.env
|
|
6
|
+
.env.*
|
|
7
|
+
!.env.example
|
|
8
|
+
|
|
9
|
+
# Documentación navegable generada (scriptsuild_docs.ps1)
|
|
10
|
+
/docs/site
|
|
11
|
+
|
|
12
|
+
# Volcados de datos y capturas locales
|
|
13
|
+
*.ndjson
|
|
14
|
+
/data
|
|
15
|
+
|
|
16
|
+
# Editores
|
|
17
|
+
.idea
|
|
18
|
+
.vscode
|
|
19
|
+
python/dist/
|
|
20
|
+
__pycache__/
|
|
21
|
+
*.egg-info/
|
|
22
|
+
python/target/
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Historial de cambios
|
|
2
|
+
|
|
3
|
+
Formato basado en [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/)
|
|
4
|
+
y versionado semántico.
|
|
5
|
+
|
|
6
|
+
## [0.3.1] - 2026-11-09
|
|
7
|
+
|
|
8
|
+
### Añadido
|
|
9
|
+
|
|
10
|
+
- `Broker::iqoption_extras` como acceso opcional y compatible a las capacidades
|
|
11
|
+
exclusivas de IQ Option desde un `Box<dyn Broker>`; los adaptadores que no las
|
|
12
|
+
ofrecen devuelven `None`.
|
|
13
|
+
- Binding Python: `buy_digital`, `buy_blitz` e `indicators`, con rechazo
|
|
14
|
+
explícito en Deriv en lugar de simular esas capacidades.
|
|
15
|
+
- Wheels para Linux x64/arm64, Windows x64/arm64 y macOS Intel/arm64, además del
|
|
16
|
+
sdist.
|
|
17
|
+
- Publicación en PyPI del paquete Python 0.3.1.
|
|
18
|
+
|
|
19
|
+
### Cambiado
|
|
20
|
+
|
|
21
|
+
- Documentación separada por bróker: `docs/iqoption/` y `docs/deriv/`, con
|
|
22
|
+
subcarpetas de cuenta, mercado, órdenes y operativa; Python y herramientas
|
|
23
|
+
tienen su propia carpeta.
|
|
24
|
+
- Scripts globales en `scripts/` y verificadores/cargadores por bróker en
|
|
25
|
+
`scripts/iqoption/` y `scripts/deriv/`.
|
|
26
|
+
- Assets fuera de `docs/`: el banner y el QR viven en `img/`.
|
|
27
|
+
- El generador de documentación agrupa por bróker y ordena la navegación.
|
|
28
|
+
|
|
29
|
+
### Corregido
|
|
30
|
+
|
|
31
|
+
- La documentación de Deriv ya no afirma que el payout se consulte por importe:
|
|
32
|
+
`get_payout` usa activo y duración.
|
|
33
|
+
- Enlaces y rutas de scripts actualizados tras la reorganización.
|
|
34
|
+
|
|
35
|
+
## [0.3.0] - 2026-11-09
|
|
36
|
+
|
|
37
|
+
### Añadido
|
|
38
|
+
|
|
39
|
+
- Adaptador **Deriv** (API moderna): conexión OTP por REST, gateway público sin
|
|
40
|
+
credenciales, catálogo, velas, cotización de payout, compra y venta rise/fall,
|
|
41
|
+
cierre por `proposal_open_contract`, historial paginado y reconexión con OTP
|
|
42
|
+
nuevo más replay de suscripciones.
|
|
43
|
+
- `Broker::subscribe_ticks` con entrega por `Event::PriceTick`; Deriv implementa
|
|
44
|
+
el stream nativo y el resto de adaptadores hereda un rechazo explícito.
|
|
45
|
+
- `DerivConfig` con `Debug` redactado y sin serializar el token; límites de tasa
|
|
46
|
+
por clase al 80 % de lo documentado por el bróker.
|
|
47
|
+
- `BrokerError` conserva su taxonomía; las capacidades no soportadas responden
|
|
48
|
+
con el mensaje del bróker o con el rechazo por defecto.
|
|
49
|
+
|
|
50
|
+
### Cambiado (incompatible)
|
|
51
|
+
|
|
52
|
+
- Las capacidades exclusivas de IQ Option (`buy_blitz`, `buy_digital_spot`,
|
|
53
|
+
indicadores técnicos, perfil de activo, live deals y comisiones) salen de
|
|
54
|
+
`Broker` y pasan a `IqOptionExtras`. En `IqOptionBroker` siguen disponibles
|
|
55
|
+
como métodos inherentes, por lo que el código que usa el tipo concreto no
|
|
56
|
+
cambia; quien las invocaba sobre `Box<dyn Broker>` debe usar
|
|
57
|
+
`Box<dyn IqOptionExtras>` o el tipo concreto.
|
|
58
|
+
- Migración: `use cripsy_binary_api::broker::IqOptionExtras;` solo si se consume
|
|
59
|
+
el trait de forma genérica.
|
|
60
|
+
|
|
61
|
+
### Documentado
|
|
62
|
+
|
|
63
|
+
- Alcance del producto: operación rise/fall, datos para cualquier activo y
|
|
64
|
+
densidad de ticks nativa como diferencial; expansión futura fuera de alcance.
|
|
65
|
+
- `docs/deriv/01_introduccion.es.md`: uso de Deriv, credenciales, límites y
|
|
66
|
+
diferencias con IQ Option.
|
|
67
|
+
- Tabla de densidad medida por clase de activo y separación de los scripts de
|
|
68
|
+
verificación (`verificar_iqoption.ps1`, `verificar_deriv.ps1`,
|
|
69
|
+
`verificar_todo.ps1`).
|
|
70
|
+
- Reconciliación de Deriv verificada en vivo: un cierre ocurrido durante 72 s
|
|
71
|
+
sin conexión se publica una sola vez, sin reenviar la orden.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
## [0.2.1] - 2026-11-09
|
|
75
|
+
|
|
76
|
+
### Añadido
|
|
77
|
+
|
|
78
|
+
- Prueba del recorrido multi-página de la reconciliación con historiales
|
|
79
|
+
simulados: encuentra cierres en páginas posteriores, corta al localizarlos y
|
|
80
|
+
respeta el límite de diez páginas.
|
|
81
|
+
|
|
82
|
+
### Corregido
|
|
83
|
+
|
|
84
|
+
- Cifras de verificación de la documentación embebida: la medición final de la
|
|
85
|
+
caída forzada es 4.938 ms sin conexión, con 34 comprobaciones y 0 fallos.
|
|
86
|
+
|
|
87
|
+
## [0.2.0] - 2026-11-09
|
|
88
|
+
|
|
89
|
+
### Añadido
|
|
90
|
+
|
|
91
|
+
- Reconexión automática de la sesión: tras una caída del WebSocket la tarea
|
|
92
|
+
del socket reautentica, restaura perfil, balances y catálogo, y reproduce
|
|
93
|
+
las suscripciones antes de volver a despachar. Backoff exponencial con
|
|
94
|
+
saturación; un rechazo de credenciales no se reintenta.
|
|
95
|
+
- `Event::Disconnected { motivo }` y `Event::Reconnected { intentos,
|
|
96
|
+
downtime_ms }` para que el consumidor distinga una caída de un cierre.
|
|
97
|
+
- Registro de suscripciones (velas, live-deals, comisiones, price-splitter y
|
|
98
|
+
cierres de posición) que se usa como fuente del replay.
|
|
99
|
+
- `BrokerError::NotConnected`: las llamadas fallan de inmediato mientras no
|
|
100
|
+
haya socket, en vez de encolarse para ejecutarse con datos obsoletos.
|
|
101
|
+
- `TransportConfig::cola_salida` (256 por defecto): capacidad de la cola de
|
|
102
|
+
salida del socket.
|
|
103
|
+
- Reconciliación al reconectar: las órdenes abiertas cuyo cierre ocurrió sin
|
|
104
|
+
conexión se recuperan del historial de posiciones (paginado, hasta 10 páginas
|
|
105
|
+
de 100) y se publican como `Event::OrderClosed`, sin reenviar nada al bróker.
|
|
106
|
+
- `IqOptionBroker::simular_caida_de_conexion` (marcado `#[doc(hidden)]`) para
|
|
107
|
+
ejercitar la recuperación en pruebas de resiliencia.
|
|
108
|
+
- La verificación viva incluye una caída forzada del socket con comprobación de
|
|
109
|
+
`Disconnected`, `Reconnected`, operativa posterior y replay de suscripciones.
|
|
110
|
+
- `docs/iqoption/04_operativa/02_reconexion.es.md` con el diseño y los límites del
|
|
111
|
+
supervisor de sesión, más la sección de continuidad del README.
|
|
112
|
+
- `Broker::buy_blitz` con `BuyBlitzRequest`: la duración viaja en segundos y el
|
|
113
|
+
payout se puede indicar de forma explícita. `buy_binary` deja de transportar
|
|
114
|
+
segundos en `expiration_minutes` y delega el blitz en la nueva petición.
|
|
115
|
+
- `AccountType::Unknown` para los tipos de balance que el adaptador no reconoce.
|
|
116
|
+
- `Event::EventsLost { count }`: informa de la pérdida de continuidad del bus de
|
|
117
|
+
eventos sin cerrar el stream.
|
|
118
|
+
- Reintentos con backoff en el handshake del WebSocket.
|
|
119
|
+
- Documento de limitaciones conocidas en `docs/01_introduccion.es.md` y en el
|
|
120
|
+
README.
|
|
121
|
+
|
|
122
|
+
### Corregido
|
|
123
|
+
|
|
124
|
+
- `switch_account` propaga el error del refresco de balances y comprueba que el
|
|
125
|
+
balance solicitado quede activo antes de actualizar la sesión; ya no devuelve
|
|
126
|
+
`Ok(())` cuando el bróker no confirmó el cambio.
|
|
127
|
+
- Un tipo de balance desconocido se mapea a `AccountType::Unknown` en lugar de
|
|
128
|
+
interpretarse como cuenta real.
|
|
129
|
+
- `get_account_type` devuelve error si la sesión no está inicializada, en vez de
|
|
130
|
+
asumir cuenta de práctica.
|
|
131
|
+
- El router retira las solicitudes que expiran y no registra receptores para los
|
|
132
|
+
mensajes que no esperan respuesta (suscripciones).
|
|
133
|
+
- Al cerrarse el socket se descartan las solicitudes pendientes, de modo que
|
|
134
|
+
ninguna espera queda colgada hasta su timeout.
|
|
135
|
+
- Las suscripciones a velas cuyos streams fueron soltados se retiran en el
|
|
136
|
+
siguiente despacho de velas.
|
|
137
|
+
- Documentación corregida: `get_operation_result` lee la caché local (no hace
|
|
138
|
+
consulta remota), `get_payout` devuelve el payout del catálogo y la densidad
|
|
139
|
+
de ticks se describe con la medición real, sin afirmar ausencia de límite.
|
|
140
|
+
|
|
141
|
+
### Cambiado (incompatible)
|
|
142
|
+
|
|
143
|
+
- `Event` pasa a ser `#[non_exhaustive]` e incorpora variantes nuevas: los
|
|
144
|
+
`match` exhaustivos sobre `Event` deben añadir un brazo `_`.
|
|
145
|
+
- La cola de salida del socket deja de ser ilimitada; una ráfaga superior a
|
|
146
|
+
`TransportConfig::cola_salida` aplica presión al productor.
|
|
147
|
+
- Migración: sustituir los `match` exhaustivos sobre `Event` y, si se construye
|
|
148
|
+
`TransportConfig` con literal de struct, añadir `cola_salida`.
|
|
149
|
+
|
|
150
|
+
## [0.1.0] - 2026-11-08
|
|
151
|
+
|
|
152
|
+
### Añadido
|
|
153
|
+
|
|
154
|
+
- Cliente Rust para la API de IQ Option con núcleo `async` y fachada `blocking`.
|
|
155
|
+
- Trait `Broker` multibróker y dominio tipado.
|
|
156
|
+
- Sesión, perfil, balances y cambio de cuenta.
|
|
157
|
+
- Catálogo de activos con metadatos operativos.
|
|
158
|
+
- Velas históricas, descarga paginada, stream multi-tamaño y ticks nativos.
|
|
159
|
+
- Órdenes clásicas (turbo/binary), digitales v2, blitz v2 y venta anticipada.
|
|
160
|
+
- Resultados por evento con caché, historial de posiciones, perfil del activo,
|
|
161
|
+
comisiones y live-deals.
|
|
162
|
+
- Ejemplos ejecutables, scripts de verificación y documentación navegable.
|