MyGridBasket
- Bibliotecas
-
Ahmad Aan Isnain Shofwan
About Me – Ahmad Aan Isnaini
“I don’t code to sell. I code to survive.”
In a marketplace flooded with rented hype and quick-profit illusions, I chose a different path:
Resilience over glamour. Discipline over noise. - Versión: 1.0
Biblioteca de análisis de cestas de solo lectura para EA de cuadrícula y promediado. Umbral de rentabilidad real, simulaciones hipotéticas, pruebas de estrés y distancia de stop-out. No envía órdenes.
Qué es
Una biblioteca que lee tus posiciones abiertas y te indica el estado real de una cesta de grid o de promediado.
No opera. No envía órdenes. No tiene lógica de entrada.
La invocas desde tu propio EA.
Qué te indica
- El umbral de rentabilidad de la cesta, teniendo en cuenta el swap y la comisión
- El precio al que la cesta genera la cantidad de dinero que elijas
- Hacia dónde se desplazan la media y el punto de equilibrio si añades un nivel más
- Cuántos lotes hacen que la media alcance el precio que elijas
- El nivel de capital y de margen si el precio se mueve en contra de la cesta
- Lo mismo, con una rejilla que va añadiendo niveles
- Cuántos puntos quedan hasta el stop-out
Cómo utilizarlo
1. Coloca MyGridBasket.ex5 en MQL5/Libraries.
2. Añade el bloque de importación que aparece a continuación a tu EA.
3. Crea un identificador de la cesta, actualízalo y lee los valores.
4. Elimina el identificador en OnDeinit.
Ejemplo
int hBuy=-1;
int OnInit()
{
hBuy = MyGB_Create(_Symbol, MagicNumber, MYGB_BUY); // número mágico -1 = todos los números mágicos
return (hBuy >= 0) ? INIT_SUCCEEDED : INIT_FAILED;
}
void OnDeinit(const int reason)
{
MyGB_Destroy(hBuy);
}
void OnTick()
{
MyGB_Refresh(hBuy);
double be = MyGB_Breakeven(hBuy);
double tp = MyGB_TargetPrice(hBuy, 50,0); // +50 netos en la divisa de la cuenta
double so = MyGB_StopOutDistance(hBuy); // puntos hasta el stop-out
}
Convenciones
Identificador no válido o cálculo fallido: double devuelve EMPTY_VALUE, int devuelve -2, bool devuelve false.
El nivel de margen se expresa en porcentaje. -1 significa que no se utiliza margen.
La distancia de stop-out se expresa en puntos. -1 significa que no se ha alcanzado el rango, -2 significa que se desconoce.
Bloque de importación
#define MYGB_BUY 0
#define MYGB_SELL 1
#import "MyGridBasket.ex5"
int MyGB_Create(string symbol, long magic, int side);
void MyGB_Destroy(int h);
bool MyGB_Refresh(int h);
string MyGB_Version();
bool MyGB_IsHedging(int h);
string MyGB_Warning(int h);
string MyGB_Summary(int h);
int MyGB_Positions(int h);
double MyGB_Lots(int h);
double MyGB_PrecioMedio(int h);
double MyGB_Punto de equilibrio(int h);
double MyGB_PrecioDeCierre(int h);
double MyGB_DistanciaAlPuntoDeEquilibrio(int h);
double MyGB_Variable(int h);
double MyGB_Swap(int h);
double MyGB_EntryCommission(int h);
double MyGB_ExitCommission(int h);
bool MyGB_ExitCommissionKnown(int h);
double MyGB_ResultadoNeto(int h);
double MyGB_BeneficioDeLaPeorPosición(int h);
double MyGB_MejorBeneficioPosición(int h);
double MyGB_LayerSpanPoints(int h);
void MyGB_SetExitCommissionPerLot(int h, double rate_per_lot);
void MyGB_BorrarAnulaciónComisiónSalida(int h);
double MyGB_PrecioObjetivo(int h, double dinero_objetivo);
double MyGB_MoneyAtPrice(int h, double price);
double MyGB_LotsForTargetAverage(int h, double price, double target_avg);
double MyGB_WhatIfNewAverage(int h, double lot, double price);
double MyGB_WhatIfNewBreakeven(int h, double lot, double price);
double MyGB_WhatIfMarginLevel(int h, double lot, double price);
double MyGB_StressEquity(int h, double puntos_adversos);
double MyGB_StressMarginLevel(int h, double adverse_points);
int MyGB_StressStopOut(int h, double puntos_adversos);
double MyGB_GridStressEquity(int h, double puntos_adversos, double puntos_por_paso, double primer_lote, double multiplicador_de_lotes, double multiplicador_por_paso, int niveles_máx.);
double MyGB_GridStressMarginLevel(int h, double adverse_points, double step_points, double first_lot, double lot_mult, double step_mult, int max_levels);
double MyGB_GridStressLots(int h, double adverse_points, double step_points, double first_lot, double lot_mult, double step_mult, int max_levels);
int MyGB_GridStressLevels(int h, double puntos_adversos, double puntos_por_paso, double primer_lote, double multiplicador_de_lote, double multiplicador_por_paso, int niveles_máximos);
int MyGB_GridStressStopOut(int h, double puntos_adversos, double puntos_por_paso, double primer_lote, double multiplicador_de_lote, double multiplicador_por_paso, int niveles_máximos);
double MyGB_StopOutDistance(int h);
double MyGB_StopOutDistanceGrid(int h, double step_points, double first_lot, double lot_mult, double step_mult, int max_levels);
double MyGB_NetLots(string símbolo, long magic);
#import
Conoce los límites
- Diseñado para cuentas de cobertura. En las cuentas de compensación hay una posición por símbolo, por lo que la cesta es esa posición. Se establece una advertencia.
- El stop-out solo se evalúa cuando tu bróker utiliza el stop-out en porcentaje. En el modo «in money», el resultado es desconocido.
- El margen de los niveles simulados no tiene en cuenta la compensación de cobertura entre posiciones opuestas. Esto se hace por precaución.
- Los niveles simulados se ejecutan exactamente a su precio. No se tienen en cuenta el spread, el deslizamiento ni el retraso en la ejecución.
- La comisión de salida se calcula a partir de tus propias operaciones cerradas anteriormente con ese símbolo. Si no hay ninguna, se considera 0 y la biblioteca te lo indica.
- Se supone que las demás posiciones de la cuenta permanecen inalteradas durante una prueba de estrés.
- Una prueba de estrés es aritmética. No es una previsión. Las ejecuciones reales en un mercado volátil son peores.
- Pruébala en una cuenta demo con los símbolos de tu bróker antes de confiar en ella.
Gratis. Sin restricciones de cuenta ni de símbolos. Sin garantía.
La versión 1.00 es la primera versión lanzada.
