MQLArticles/RM/RM_Defines.mqh
Nique_372 9b474aa88a
2025-09-24 14:00:58 -05:00

268 lines
7.9 KiB
MQL5

//+------------------------------------------------------------------+
//| RM_Defines.mqh |
//| Niquel y Leo, Copyright 2025 |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Niquel y Leo, Copyright 2025"
#property link "https://www.mql5.com"
#property strict
#ifndef RISK_RM_DEFINES_MQH
#define RISK_RM_DEFINES_MQH
//+------------------------------------------------------------------+
//| Defines |
//+------------------------------------------------------------------+
#define NOT_MAGIC_NUMBER 2//Not Magic Number
#define FLAG_CLOSE_ALL_PROFIT 2 //Flag indicating to close only operations with profit
#define FLAG_CLOSE_ALL_LOSS 4 //Flag indicating to close only operations without profit
//--- positions
#define FLAG_POSITION_TYPE_BUY 8
#define FLAG_POSITION_TYPE_SELL 16
//--- orders
#define FLAG_ORDER_TYPE_BUY 1
#define FLAG_ORDER_TYPE_SELL 2
#define FLAG_ORDER_TYPE_BUY_LIMIT 4
#define FLAG_ORDER_TYPE_SELL_LIMIT 8
#define FLAG_ORDER_TYPE_BUY_STOP 16
#define FLAG_ORDER_TYPE_SELL_STOP 32
#define FLAG_ORDER_TYPE_BUY_STOP_LIMIT 64
#define FLAG_ORDER_TYPE_SELL_STOP_LIMIT 128
#define FLAG_ORDER_TYPE_CLOSE_BY 256
//---
#define RISK_MANGEMENT_LOSS_PROFIT_MIN_VALUE 1e-4
//--- Losses Profits
#define LOSS_PROFIT_COUNT 8
//--- Tickets
#define INVALID_TICKET 0
//+------------------------------------------------------------------+
//| Enumerations |
//+------------------------------------------------------------------+
enum ENUM_LOTE_TYPE //lot type
{
Dinamico,//Dynamic
Fijo//Fixed
};
//--- Enumeration to define the types of calculation of the value of maximum profits and losses
enum ENUM_RISK_CALCULATION_MODE
{
money = 0, //Money
percentage //Percentage %
};
const string RiskCalcModeToString[2]
{
"Money",
"Percentage"
};
//--- Enumeration to define the type of risk management
enum ENUM_MODE_RISK_MANAGEMENT
{
risk_mode_propfirm_dynamic_daiy_loss, //Prop Firm (FTMO-FundendNext)
risk_mode_personal_account // Personal Account
};
//--- Enumeration to define the value to which the percentages will be applied
enum ENUM_APPLIED_PERCENTAGES
{
Balance = 0, //Balance
ganancianeta = 1,//Net profit
free_margin = 2, //Free margin
equity = 3 //Equity
};
//--- Enumeration for ways to obtain the lot
enum ENUM_GET_LOT
{
GET_LOT_BY_ONLY_RISK_PER_OPERATION, //Obtain the lot for the risk per operation
GET_LOT_BY_STOPLOSS_AND_RISK_PER_OPERATION //Obtain and adjust the lot through the risk per operation and stop loss respectively.
};
//--- Mode to check if a maximum loss or gain has been exceeded
enum MODE_SUPERATE
{
EQUITY = 0, //Only Equity
CLOSE_POSITION = 1, //Only for closed positions
CLOSE_POSITION_AND_EQUITY = 2//Closed positions and equity
};
//--- Enumeration of the types of dynamic operational risk
enum ENUM_OF_DYNAMIC_MODES_OF_GMLPO
{
DYNAMIC_GMLPO_FULL_CUSTOM, //Customisable dynamic risk per operation
DYNAMIC_GMLPO_FIXED_PARAMETERS,//Risk per operation with fixed parameters
NO_DYNAMIC_GMLPO //No dynamic risk for risk per operation
};
enum ENUM_LOSS_PROFIT
{
T_LOSS,
T_PROFIT,
T_GMLPO
};
enum ENUM_TYPE_LOSS_PROFIT
{
LP_MDP = 0, //Maxima ganancias diaria
LP_MWP = 1,//Maxima ganancia semanal
LP_MMP = 2,//Maxima ganancia mensual
LP_MDL = 3, //Maxima perdida diaria
LP_MWL = 4, //Maxima perdida semanal
LP_MML = 5, //Maxima perdida mensual
LP_ML = 6, //Maxima perdida total
LP_GMLPO = 7 //Maxima perdida por operacion
};
//+------------------------------------------------------------------+
//| Structures |
//+------------------------------------------------------------------+
//--- Positions
struct pack(sizeof(double)) Position //quitar pack si aumenta a+4bytes
{
ulong ticket; //position ticket
ulong magic; //numero magico con el que se abrio
double profit; //ultimo profit registrado
double open_price; //precio de apertura
double firt_sl; //stop loss con el que se abrio la operacion, sl original (pongo first por que se puede modificar el StopLoss ya sea por el usuario o por un bot)
double first_tp; //primer tp, original
datetime open_time; //tiempo de apertura
ENUM_POSITION_TYPE type; //position type
};
//--- Orden
struct pack(8) ROnOrderDelete
{
ulong order_magic; //numjero mafgico de la orden
ulong order_ticket; //ticket de la orden
ENUM_ORDER_TYPE order_type; //tipo de orden
ENUM_ORDER_STATE order_state; //stado de la orden
};
//---
struct ModifierOnOpenCloseStruct
{
//--- Info del ultimo deal
ulong deal_ticket;
double deal_profit;
ENUM_DEAL_REASON deal_reason;
ENUM_DEAL_ENTRY deal_entry_type;
//--- Profit del numnero magico
double profit_diario;
double profit_semanal;
double profit_total;
double profit_mensual;
//--- Info de la posicion abierta o de la posicion que se cerro
Position position;
};
//---
struct ROnOpenClosePosition
{
ulong deal_ticket;
double deal_profit;
ENUM_DEAL_REASON deal_reason;
ENUM_DEAL_ENTRY deal_entry_type;
//--- Cuenta
double account_balance;
double account_profit_diario;
double account_profit_semanal;
double account_profit_total;
double account_profit_mensual;
//--- Posicion
Position position;
//--- Extra
ulong magic_number_closed;
};
//--- Loss/Profit
struct Loss_Profit
{
double value; //value
double assigned_percentage; //percentage to apply
ENUM_RISK_CALCULATION_MODE mode_calculation_risk; //risk calculation method
ENUM_APPLIED_PERCENTAGES percentage_applied_to; //percentage applied to
};
//--- Dynamic gmlpo/ Riesgo por operacion dinamico
struct Dynamic_LossProfit
{
double balance_to_activate_the_risk[];
double risk_to_be_adjusted[];
};
//---
struct RiskParams
{
ENUM_MODE_RISK_MANAGEMENT mode;
MqlParam params[];
};
//---
struct ModfierInitInfo
{
double balance;
ulong magic;
};
//+------------------------------------------------------------------+
//| Arrays para las ordenes |
//+------------------------------------------------------------------+
const bool EsUnaOrderPendiente[9]
{
false, // 0
false, // 1
true, // 2
true, // 3
true, // 4
true, // 4
true, // 5
true, // 7
false // 8
};
const int OrdensToFlagArray[9] =
{
FLAG_ORDER_TYPE_BUY, // 0
FLAG_ORDER_TYPE_SELL, // 1
FLAG_ORDER_TYPE_BUY_LIMIT, // 2
FLAG_ORDER_TYPE_SELL_LIMIT, // 3
FLAG_ORDER_TYPE_BUY_STOP, // 4
FLAG_ORDER_TYPE_SELL_STOP, // 5
FLAG_ORDER_TYPE_BUY_STOP_LIMIT, // 6
FLAG_ORDER_TYPE_SELL_STOP_LIMIT, // 7
FLAG_ORDER_TYPE_CLOSE_BY // 8
};
/*
2025.08.06 16:50:41.989 GetID (XAUUSD,M1) ORDER_TYPE_BUY = 0
2025.08.06 16:50:41.989 GetID (XAUUSD,M1) ORDER_TYPE_SELL = 1
2025.08.06 16:50:41.989 GetID (XAUUSD,M1) ORDER_TYPE_BUY_LIMIT = 2
2025.08.06 16:50:41.989 GetID (XAUUSD,M1) ORDER_TYPE_SELL_LIMIT = 3
2025.08.06 16:50:41.989 GetID (XAUUSD,M1) ORDER_TYPE_BUY_STOP = 4
2025.08.06 16:50:41.989 GetID (XAUUSD,M1) ORDER_TYPE_SELL_STOP = 5
2025.08.06 16:50:41.989 GetID (XAUUSD,M1) ORDER_TYPE_BUY_STOP_LIMIT = 6
2025.08.06 16:50:41.989 GetID (XAUUSD,M1) ORDER_TYPE_SELL_STOP_LIMIT = 7
2025.08.06 16:50:41.989 GetID (XAUUSD,M1) ORDER_TYPE_CLOSE_BY = 8
*/
//+------------------------------------------------------------------+
#endif