2026-07-20 22:44:15 -05:00
|
|
|
//+------------------------------------------------------------------+
|
2026-07-19 22:56:57 -05:00
|
|
|
//| Def.mqh |
|
|
|
|
|
//| Copyright 2026, MetaQuotes Ltd. |
|
|
|
|
|
//| https://www.mql5.com |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#property copyright "Copyright 2026, MetaQuotes Ltd."
|
|
|
|
|
#property link "https://www.mql5.com"
|
|
|
|
|
#property strict
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#include "..\\DomImp.mqh"
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
namespace TSN
|
|
|
|
|
{
|
2026-07-20 22:44:15 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
#define TSN_DOMPATH_MAX_DEPTH_ITER (128)
|
|
|
|
|
#define TSN_DOMPATH_MAX_S_RK (128)
|
|
|
|
|
#define TSN_DOMPATH_MAX_S_R (128)
|
|
|
|
|
|
2026-07-19 22:56:57 -05:00
|
|
|
|
2026-07-20 22:44:15 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Mascaras bits |
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-19 22:56:57 -05:00
|
|
|
#define TSN_DOMPATH_MASK_INS_TYPE (0xff)
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_ETYPE (8)
|
|
|
|
|
#define TSN_DOMPATH_MASK_COMPARE (0xf)
|
|
|
|
|
|
2026-07-20 22:44:15 -05:00
|
|
|
//--- Indices de registros mascara de 28 bits siempre
|
|
|
|
|
#define TSN_DOMPATH_INS_MASK_INDEX_REG (0xfffffff)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//--- Instruccion save
|
|
|
|
|
#define TSN_DOMPATH_INS_SAVE_BIT_START_INS_IX (32)
|
|
|
|
|
|
|
|
|
|
//--- Math \ Compare
|
|
|
|
|
//--- form
|
|
|
|
|
#define TSN_DOMPATH_INS_MATH_BIT_START_REG_2 (36)
|
|
|
|
|
#define TSN_DOMPATH_INS_MATH_BIT_START_FORM_T (28)
|
|
|
|
|
|
|
|
|
|
//--- jump
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_JUMP_MASK_CMP (0xfffffff)
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_JUMP_START_MATHERR (2)
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_JUMP_START_CMPFALSE (2)
|
|
|
|
|
|
|
|
|
|
//--- compare
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_JUMP_START_CMP_V (30)
|
2026-07-19 22:56:57 -05:00
|
|
|
|
|
|
|
|
//---
|
2026-07-20 22:44:15 -05:00
|
|
|
#define TSN_DOMPATH_BIT_INS_JUMP_START_CMPIS_FALSE (36)
|
|
|
|
|
|
|
|
|
|
//-- types
|
|
|
|
|
#define TSN_DOMPATH_INS_MATH_TYPE_DS (0)
|
|
|
|
|
#define TSN_DOMPATH_INS_MATH_TYPE_SD (1)
|
|
|
|
|
#define TSN_DOMPATH_INS_MATH_TYPE_DD (2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//--- funciones
|
|
|
|
|
#define TSN_DOMPATH_BIT_INS_BIT_START_NARGS (36)
|
2026-07-19 22:56:57 -05:00
|
|
|
|
|
|
|
|
|
2026-07-20 22:44:15 -05:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| |
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-19 22:56:57 -05:00
|
|
|
//---
|
2026-07-21 08:53:15 -05:00
|
|
|
#define DOMPATHV_TYPE_INV 6
|
|
|
|
|
#define DOMPATHV_TYPE_ARR 5
|
|
|
|
|
#define DOMPATHV_TYPE_OBJ 4
|
2026-07-20 22:44:15 -05:00
|
|
|
#define DOMPATHV_TYPE_STR 3
|
|
|
|
|
#define DOMPATHV_TYPE_FLT 2
|
|
|
|
|
#define DOMPATHV_TYPE_INT 1
|
|
|
|
|
#define DOMPATHV_TYPE_BOL 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
struct DomConstantStr;
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
struct pack(8) DomPathV
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
//---
|
|
|
|
|
DomPathV(const long lv) : tt(DOMPATHV_TYPE_INT) { v.iv = lv; }
|
|
|
|
|
DomPathV(const bool lv) : tt(DOMPATHV_TYPE_BOL) { v.bv = lv; }
|
|
|
|
|
DomPathV(const double lv) : tt(DOMPATHV_TYPE_FLT) { v.dv = lv; }
|
|
|
|
|
DomPathV() : tt(DOMPATHV_TYPE_INV) {}
|
|
|
|
|
*/
|
|
|
|
|
//---
|
|
|
|
|
union TSNDomPathValues
|
|
|
|
|
{
|
|
|
|
|
long iv;
|
|
|
|
|
int ix;
|
|
|
|
|
double dv;
|
|
|
|
|
bool bv;
|
|
|
|
|
} v;
|
|
|
|
|
uchar tt;
|
|
|
|
|
};
|
|
|
|
|
|
2026-07-19 22:56:57 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
//---
|
|
|
|
|
enum ENUM_DOMPATH_QUERY_INS_TYPE
|
|
|
|
|
{
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_ACCESO_KEY,
|
2026-07-20 22:44:15 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_ACCESO_KEY_F,
|
2026-07-19 22:56:57 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_ACCESO_IDX,
|
2026-07-20 22:44:15 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_ACCESO_IDX_F,
|
2026-07-19 22:56:57 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_INICIAR_ITERACION,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_ITER_ASSING,
|
2026-07-20 22:44:15 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_EXIST, // tal cual para elemenots.. no
|
|
|
|
|
|
|
|
|
|
// save
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_SAVE,
|
|
|
|
|
|
|
|
|
|
// mates
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_MUL,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_RES,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_DIV,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_SUM,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_MOD,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_BIT_OR,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_BIT_AND,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_BIT_XOR,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_BIT_DEZ_IZQ,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_M_BIT_DEZ_DRC,
|
|
|
|
|
|
|
|
|
|
// comaradores
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_COMPARE_EQ,
|
2026-07-19 22:56:57 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_COMPARE_MENOR,
|
2026-07-20 22:44:15 -05:00
|
|
|
DOMPATH_QUERY_INS_TYPE_COMPARE_MENOR_EQ,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_COMPARE_IS,
|
|
|
|
|
|
|
|
|
|
//--- Funciones
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_CALL,
|
|
|
|
|
|
|
|
|
|
//--- Copia
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_LOADK, // pasa una constante regk a un registro dinamico
|
|
|
|
|
|
|
|
|
|
//--- extra
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_APPEND,
|
|
|
|
|
DOMPATH_QUERY_INS_TYPE_SALIDA,
|
2026-07-19 22:56:57 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-07-20 22:44:15 -05:00
|
|
|
/*
|
|
|
|
|
{
|
|
|
|
|
"precios": {
|
2026-07-21 08:53:15 -05:00
|
|
|
"libro1": {"valor":542,"sumando":[],"comando":30},
|
|
|
|
|
"libro2": {"valor":19,"sumando":[30],"comando":2},
|
|
|
|
|
"libro3": {"valor":452,"sumando":[15],"comando":7}
|
2026-07-20 22:44:15 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-21 08:53:15 -05:00
|
|
|
$.precios[?(@.comando * 20 < @.valor && @.sumando.size())].sumando[*]
|
|
|
|
|
→ [15]
|
2026-07-20 22:44:15 -05:00
|
|
|
|
|
|
|
|
----
|
|
|
|
|
Nota hrabia que tener varios temporales aqui
|
|
|
|
|
|
|
|
|
|
----
|
|
|
|
|
ACCESO_FATAL "precios" ; Ahora mismo curr = en precios, si falla cerrar
|
|
|
|
|
INICIO_ITERACION
|
|
|
|
|
ASIGNAR CURR MOVIDA o SALIR:
|
|
|
|
|
; ahora mismo puntero=m_curr
|
|
|
|
|
; Un acceso local implia que si falla se retire a X instruccion
|
2026-07-21 08:53:15 -05:00
|
|
|
ACCESO_LOCAL "comando"
|
2026-07-20 22:44:15 -05:00
|
|
|
SAVE_PTR R0 ; (implcia un retroceso de m_curr ahora apunta a @)
|
|
|
|
|
MUL R0 RC(20) ; mutiplcai por 20 al registro 0
|
2026-07-21 08:53:15 -05:00
|
|
|
ACCESO LOCACL "valor"
|
2026-07-20 22:44:15 -05:00
|
|
|
SAVE_PTR R1
|
|
|
|
|
CMP 1, '<' R0 R1; (si cumple=1) (+1 si no cumple, +2 si cumple)
|
2026-07-21 08:53:15 -05:00
|
|
|
- Si no: (IMPLICITO) JUMMP: 'ASIGNAR CURR MOVIDA o SALIR'
|
2026-07-20 22:44:15 -05:00
|
|
|
ACCESO_LOCAL "sumando"
|
2026-07-21 08:53:15 -05:00
|
|
|
SAVE_PTR R1 ; Empiza en 1 dado qeu ya se reserva un slot 0 para reg donde se pone el valor
|
|
|
|
|
CALL R0, "size", 0
|
|
|
|
|
IS 1, R0 ; registro dos se compar con is este resotora un entero asi que != 0
|
2026-07-20 22:44:15 -05:00
|
|
|
- Si no: (IMPLICITO) JUMMP SI ES FALSE a: 'ASIGNAR CURR MOVIDA o SALIR'
|
|
|
|
|
APPEND curr
|
|
|
|
|
SALIDA
|
|
|
|
|
*/
|
|
|
|
|
//+------------------------------------------------------------------+
|