Live Scripting
Un langage de script natif conçu spécifiquement pour la finance, combinant Python, SQL, Java et les templates de chaînes en un seul environnement d'exécution intégré dans toute la plateforme 3forge.
Conçu pour la finance
La logique au plus près des données,
cohérente dans toute la pile
Dans les institutions financières, la logique métier doit être au plus près des données, évoluer continuellement et rester intelligible entre les équipes. Les frontières rigides entre l'accès aux données, le calcul et la présentation introduisent des frictions et des duplications. Le langage de script 3forge répond directement à ce défi en combinant Java, Python, SQL et les templates de chaînes dans un environnement d'exécution unique et cohérent, enrichi d'une bibliothèque complète de fonctions spécifiques à la finance. La logique définie une seule fois circule de manière transparente du modèle de données à l'interface utilisateur, prenant en charge un calcul réutilisable, transparent et prêt pour la production, aligné sur le fonctionnement réel des systèmes financiers.
Quatre langages, un seul environnement d'exécution
AmiScript unifie ce dont les flux de travail financiers ont réellement besoin
Structures de données
Maps, listes et objets imbriqués inspirés de Python pour représenter naturellement les données financières — instruments, courbes, grilles de prix et scénarios — sans définitions de classes verbeuses.
Accès aux données
Requêtes de type SQL contre des sources de données nommées, avec des paramètres résolus à l'exécution. Accès gouverné sans quitter l'environnement de script.
Définitions de fonctions
Définitions de fonctions fortement typées et surchargeables encapsulant la logique métier — valeur notionnelle, exposition, marge, PnL — de manière cohérente dans la gestion des risques, le trading, le reporting et la conformité.
Sortie & formatage
Templating de chaînes pour formater les résultats calculés en alertes, messages, rapports et composants visuels, directement depuis la couche de script, sans pipeline UI séparé.
Syntaxe de style Python
Représenter naturellement des objets financiers complexes
AmiScript adopte une syntaxe inspirée de Python pour les maps, les listes et les structures imbriquées, permettant aux développeurs d'exprimer de manière compacte des données financières hiérarchiques. Les snapshots de marché, les grilles de prix, les buckets de risque et les objets de configuration peuvent être définis en ligne — sans définitions de classes verbeuses ni schémas externes. Comme ces structures sont des citoyens de première classe, le même objet peut alimenter la logique de pricing, remplir une table ou piloter un graphique, éliminant le code de liaison entre la modélisation et l'exécution. JSON est également entièrement pris en charge dans toute la plateforme App Engine.
Map pricingSummary = {
"ZXZZT": {
"Open": 489.10,
"prices": [492.10, 492.10]
}
};
Définitions de style Java
Encapsuler la logique métier en fonctions réutilisables
AmiScript prend en charge des définitions de fonctions fortement typées et surchargeables qui encapsulent la logique métier de manière déterministe. Définissez une fois, réutilisez dans les scripts, les requêtes, les modèles et les visuels. Cela est particulièrement important pour les calculs comme la valeur notionnelle, l'exposition, la marge ou le PnL, qui doivent être identiques dans les flux de travail de gestion des risques, de trading, de reporting et de conformité. Les fonctions sont légères et composables, enchaînées et imbriquées avec les bibliothèques intégrées, et exécutées dans l'environnement d'exécution gouverné de la plateforme — les rendant observables, auditables et soumises aux mêmes contrôles que le reste du système.
double NOTIONAL_VALUE(
Number quantity,
Number price,
Number fx
) {
quantity * price * fx
};
Exécution de type SQL
Accès gouverné aux données sans quitter le script
AmiScript s'intègre étroitement avec AmiSQL pour fournir un accès direct et gouverné aux sources de données en direct et historiques en utilisant des constructions SQL familières. Les paramètres sont résolus à l'exécution, permettant au même script de s'adapter automatiquement à différents utilisateurs ou sessions — essentiel pour les applications multi-locataires, les vues spécifiques aux clients et le contrôle d'accès basé sur les rôles. Comme l'accès aux données est intégré dans la couche de script, il n'y a pas de séparation artificielle entre l'interrogation des données et les opérations sur celles-ci : les résultats alimentent immédiatement le calcul en aval, la visualisation ou la persistance.
create table mycopy AS use DS="ACCOUNT_DATA" execute
Select * from Accounts
where Account=="${USERACCOUNT}";
Templates de chaînes
Calculer, agréger et formater dans le même script
AmiScript permet à la logique de calcul et de présentation de coexister proprement. Les agrégations et transformations peuvent être exprimées de manière déclarative, et leurs résultats injectés immédiatement dans une sortie formatée via le templating intégré. Les fonctions métier précédemment définies sont réutilisables dans les requêtes d'agrégation, renforçant la cohérence dans la pile de calcul. Le même modèle s'étend au-delà des alertes : les valeurs calculées peuvent être intégrées directement dans les tables, graphiques, infobulles et rapports, garantissant que ce que voient les utilisateurs est directement dérivé d'une logique gouvernée et traçable plutôt que post-traitée dans une couche séparée.
double totalNotional =
select sum(NOTIONAL_VALUE(
qty, px, fxrate))
from mycopy;
Session.alert(
"Valeur totale du compte ${USERACCOUNT}
est ${totalNotional}"
);
Bibliothèque intégrée
Plus de 1 500 fonctions organisées par domaine
AmiScript comprend une bibliothèque complète de fonctions intégrées organisées en modules spécifiques à chaque domaine. Elles couvrent l'accès aux données, l'agrégation, l'analyse de séries temporelles, les calculs financiers, le formatage, les droits d'accès, le contrôle de session et l'interaction système — permettant aux développeurs d'assembler des flux de travail sophistiqués sans réimplémenter les primitives communes.
| Catégorie | Exemple de fonction | Usage financier |
|---|---|---|
| Trigonométrique : | acos(value) | Modélisation de la saisonnalité et analyse de formes d'onde dans les séries de prix |
| Binaire : | bitShiftLeft(n, shiftAmount) | Encodage et décodage des indicateurs d'habilitation par bitmask par utilisateur ou par desk |
| Colorimétrique : | clrGetAlpha(color) | Génération d'échelles de couleurs pour les heatmaps de risque par amplitude de PnL ou niveau d'exposition |
| Date et heure : | datePart(unixEpochMillis, part, timezone) | Calculs de dates de règlement et filtrage des heures de marché entre fuseaux horaires |
| Encodage : | decodeDouble64(value) | Décodage des champs de prix binaires depuis les flux tick à faible latence et les protocoles FIX |
| Mathématique : | exp(x) | Capitalisation continue, facteurs d'actualisation et construction de courbes de taux |
| Analyse : | jsonExtract(json, xpath) | Extraction de champs des réponses d'API de pricing et des données de référence |
| Opérationnel : | logWarn(message) | Journalisation de la piste d'audit pour les étapes de flux de travail sensibles à la conformité et les dépassements de seuil |
| Analyse de données : | parseXlsx(data, firstLineIsHeader) | Ingestion de relevés de transactions, de rapports NAV de fonds et de fichiers de données statiques depuis Excel |
| Delta : | percentChange(old, nuw) | Rendement quotidien, variation de prix intrajournalière et calculs d'écart par rapport au benchmark |
| Formatage : | quote(text) | Formatage des identifiants d'instruments, des devises et des chaînes de requêtes SQL dynamiques |
| Aléatoire : | randGaussian() | Génération de scénarios Monte Carlo pour la VaR et les stress tests |
| Arrondi : | roundNearest(value, bucketSize) | Alignement des prix sur les ticks minimaux et des quantités sur les contraintes de taille de lot |
| Cryptographique : | signDataMac(data, key, algorithm) | Signature des messages d'ordres sortants et authentification des requêtes API d'échange |
| Manipulation de chaînes : | strAfter(text, toFind, origIfNotFound) | Analyse des codes d'instruments, extraction d'ISIN ou de ticker depuis des identifiants composites |
| Horodatage : | timestampNano() | Mesure de latence à précision nanoseconde pour l'analyse de la qualité d'exécution |
| Gestion d'adresses : | urlDecode(url) | Construction et décodage des appels REST vers les API de données de marché et de référence |
| Moyennes : | avgGauss(value, variance) | Prix moyen pondéré, VWAP et agrégation de positions lissée par le bruit |
| Grecques : | beta(value1, value2) | Bêta du portefeuille par rapport au benchmark, sensibilité aux facteurs et calcul du ratio de couverture |
| Concaténation : | catUniqueLimit(value, delim, limit) | Agrégation de listes uniques de contreparties ou de venues par transaction ou bucket d'ordres |
| Statistiques : | percentileDisc(value, percent) | Value at Risk à des niveaux de confiance définis sur une population de positions |
| Regroupement : | kmeansCluster(nClusters, seed, values) | Segmentation des portefeuilles par profil de risque, exposition sectorielle ou comportement client |
| Rééchantillonnage : | resample(x, y, xq, linearOrSpline) | Normalisation des données tick en barres OHLC uniformes pour les graphiques et le backtesting |
Commencer
Voir AmiScript s'exécuter sur vos propres données.
Réservez une session de 30 minutes avec un ingénieur solutions 3forge et voyez Live Scripting appliqué à vos flux de travail, sources de données et logique métier.