/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Models Library // --------------------------------------- // Name: XModels // Description: provides all required models ... // // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // // Global Properties ... #property library #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://www.saherelm.ir" #property version "1.00" #property strict // // START Inputs ... // // // END Inputs ... // // // START Global Definitions: Variables, Properties and etc ... // // // END Global Definitions: Variables, Properties and etc ... // // // START Provided Functions ... // // // How To Calculate Static Volume ... enum ENUM_STATIC_VOLUME_METHODS { // // Based On Deposit ... X_STATIC_VOLUME_BASED_ON_DEPOSIT, // // Based On Balance ... X_STATIC_VOLUME_BASED_ON_BALANCE, }; // // START Model Definitions ... // // // OHCL Candel Model ... enum ENUM_X_PRICE { X_PRICE_HIGH, X_PRICE_OPEN, X_PRICE_CLOSE, X_PRICE_LOW }; // // Describe an Specific Candle ... struct XOHCL { double high; double open; double close; double low; }; // // Swing Types Enum ... enum ENUM_X_SWING_TYPE { X_NO_SWING = 0, X_SWING_HIGH = 1, X_SWING_LOW = -1, }; // // XTrader Execution Signal Result ... enum ENUM_EXECUTION_SIGNAL_RESULT { // X_TRADER_UNKNOWN_ERROR, X_TRADER_SUCCEED_EXECUTION, X_TRADER_INVALID_SIGNAL_ERROR, X_TRADER_NOT_ENOUGH_EQUITY_ERROR, X_TRADER_MAX_TRADES_REACHED_ERROR, X_TRADER_NOT_ENOUGH_BALANCE_ERROR, X_TRADER_NOT_ENOUGH_MARIGIN_ERROR // }; // // Signal Types ... enum ENUM_X_SIGNAL_TYPE { X_SIGNAL_LONG, X_SIGNAL_SHORT, X_SIGNAL_UNKNOWN, }; // // Signal Structure ... struct XSignal { // // Identifier ... ulong id; // // Which Symbol used for Signal ... string symbol; // // Which Type of operations ... ENUM_X_SIGNAL_TYPE type; // // Magic Number ... ulong magicNumber; // // Ticket ... ulong ticket; // // Entry/Open Price ... double entry; // // TP ... double tp; // // SL ... double sl; // // Make Risk Free Trade on this Value if provided ... double riskFreeStep; // // a Multiplier for determines how much trade volume exit on risk free time ... double riskFreeRate; // // Trade Profit ... double profit; // // Time of Operation ... datetime time; // // Volume ... double volume; // // Comment ... string comment; }; // // Signal Additional Info ... struct XProvidedSignal { // // Suggested TP ... double tp; // // Suggested SL ... double sl; // // Signallers ... string signallers[]; }; // // Model Specific Deal ... struct XDeal { // // the ID of the Expert Advisor, that executed the deal ... ulong magic; // // the ID of position, in which the deal was involved ... ulong positionId; // // Ticket ... ulong ticket; // // the name of the deal symbol ... string symbol; // // order by which the deal is executed ... ulong order; // // the time of deal execution ... datetime time; // // Deal price ... double price; // // the financial result of the deal (in deposit currency) ... double profit; // // the amount of swap when position is closed ... double swap; // // the amount of commission of the deal ... double commission; // // the volume of deal ... double volume; // // the deal comment ... string comment; // // the deal type ... // ------------------------------------------------------------------ // DEAL_TYPE_BUY => Buy ... // DEAL_TYPE_SELL => Sell ... // DEAL_TYPE_BUY_CANCELED => Canceled buy deal ... // There can be a situation when a previously executed buy deal is canceled. In this case, // the type of the previously executed deal (DEAL_TYPE_BUY) is changed to DEAL_TYPE_BUY_CANCELED, // and its profit/loss is zeroized. Previously obtained profit/loss is charged/withdrawn using a separated balance operation ... // // DEAL_TYPE_SELL_CANCELED => Canceled sell deal ... // There can be a situation when a previously executed sell deal is canceled. In this case, // the type of the previously executed deal (DEAL_TYPE_SELL) is changed to DEAL_TYPE_SELL_CANCELED, // and its profit/loss is zeroized. Previously obtained profit/loss is charged/withdrawn using a separated balance operation // // DEAL_TYPE_BALANCE => Balance ... // DEAL_TYPE_CREDIT => Credit ... // DEAL_TYPE_CHARGE => Additional charge ... // DEAL_TYPE_CORRECTION => Correction ... // DEAL_TAX => Tax charges ... // DEAL_TYPE_BONUS => Bonus ... // DEAL_TYPE_INTEREST => Interest rate ... // DEAL_DIVIDEND => Dividend operations... // DEAL_DIVIDEND_FRANKED => Franked (non-taxable) dividend operations ... // DEAL_TYPE_COMMISSION => Additional commission ... // DEAL_TYPE_COMMISSION_DAILY => Daily commission ... // DEAL_TYPE_COMMISSION_MONTHLY => Monthly commission ... // DEAL_TYPE_COMMISSION_AGENT_DAILY => Daily agent commission ... // DEAL_TYPE_COMMISSION_AGENT_MONTHLY => Monthly agent commission ENUM_DEAL_TYPE type; // // the deal direction ... // ---------------------------------- // DEAL_ENTRY_IN => Entry in ... // DEAL_ENTRY_OUT => Entry out ... // DEAL_ENTRY_INOUT => Reverse ... // DEAL_ENTRY_OUT_BY => Close a position by an opposite one ... ENUM_DEAL_ENTRY entry; // // deal reson ... // --------------------- // DEAL_REASON_SL => The deal was executed as a result of Stop Loss activation ... // DEAL_REASON_TP => The deal was executed as a result of Take Profit activation ... // DEAL_REASON_SO => The deal was executed as a result of the Stop Out event ... // DEAL_REASON_WEB => The deal was executed as a result of activation of an order placed from the web platform ... // DEAL_REASON_SPLIT => The deal was executed after the split (price reduction) of an instrument, which had an open position during split announcement ... // DEAL_REASON_CLIENT => The deal was executed as a result of activation of an order placed from a desktop terminal ... // DEAL_REASON_MOBILE => The deal was executed as a result of activation of an order placed from a mobile application ... // DEAL_REASON_EXPERT => The deal was executed as a result of activation of an order placed from an MQL5 program, i.e. an Expert Advisor or a script ... // DEAL_REASON_VMARGIN => The deal was executed after charging the variation margin ... // DEAL_REASON_ROLLOVER => The deal was executed due to a rollover ... ENUM_DEAL_REASON reason; }; // // Model Specific Order ... struct XOrder { // // the ID of expert that placed the order ... ulong magic; // // the ID of position ... ulong positionId; // // the name of order symbol ... string symbol; // // the ticket of an order, previously selected for access ... ulong ticket; // // the time of order placement ... datetime timeSetup; // // the time of order execution or cancellation ... datetime timeDone; // // the order expiration time ... datetime timeExpiration; // // the order price ... double priceOpen; // // the current price by order symbol ... double priceCurrent; // // the price of a pending order ... double priceStopLimit; // // the order's Stop Loss ... double stopLoss; // // the order's Take Profit ... double takeProfit; // // the initial volume of order ... double volumeInitial; // // the unfilled volume of order ... double volumeCurrent; // // the order comment ... string comment; // // the order type ... // -------------------- // ORDER_TYPE_BUY => Market Buy order ... // ORDER_TYPE_SELL => Market Sell order ... // ORDER_TYPE_BUY_LIMIT => Buy Limit pending order ... // ORDER_TYPE_SELL_LIMIT => Sell Limit pending order ... // ORDER_TYPE_BUY_STOP => Buy Stop pending order ... // ORDER_TYPE_SELL_STOP => Sell Stop pending order ... // ORDER_TYPE_BUY_STOP_LIMIT => Upon reaching the order price, a pending Buy Limit order is placed at the StopLimit price ... // ORDER_TYPE_SELL_STOP_LIMIT => Upon reaching the order price, a pending Sell Limit order is placed at the StopLimit price ... // ORDER_TYPE_CLOSE_BY => Order to close a position by an opposite one ... ENUM_ORDER_TYPE type; // // the order state ... // -------------------------- // ORDER_STATE_STARTED => Order checked, but not yet accepted by broker ... // ORDER_STATE_PLACED => Order accepted ... // ORDER_STATE_CANCELED => Order canceled by client ... // ORDER_STATE_PARTIAL => Order partially executed ... // ORDER_STATE_FILLED => Order fully executed ... // ORDER_STATE_REJECTED => Order rejected ... // ORDER_STATE_EXPIRED => Order expired ... // ORDER_STATE_REQUEST_ADD => Order is being registered (placing to the trading system) // ORDER_STATE_REQUEST_MODIFY => Order is being modified (changing its parameters) ... // ORDER_STATE_REQUEST_CANCEL => Order is being deleted (deleting from the trading system) ... ENUM_ORDER_STATE state; // // the order filling type ... // ---------------------------- // ORDER_FILLING_FOK => Fill or Kill // An order can be executed in the specified volume only. // If the necessary amount of a financial instrument is currently unavailable in the market, // the order will not be executed. // The desired volume can be made up of several available offers. // The possibility of using FOK orders is determined at the trade server. // ORDER_FILLING_IOC => Immediate or Cancel // A trader agrees to execute a deal with the volume maximally available in the market within that indicated in the order. // If the request cannot be filled completely, an order with the available volume will be executed, // and the remaining volume will be canceled. // The possibility of using IOC orders is determined at the trade server. // ORDER_FILLING_BOC => Passive (Book or Cancel) // The BoC order assumes that the order can only be placed in the Depth of Market and cannot be immediately executed. // If the order can be executed immediately when placed, then it is canceled. // In fact, the BOC policy guarantees that the price of the placed order will be worse than // the current market. BoC orders are used to implement passive trading, // so that the order is not executed immediately when placed and does not affect current liquidity. // Only limit and stop limit orders are supported (ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY_STOP_LIMIT, ORDER_TYPE_SELL_STOP_LIMIT). // ORDER_FILLING_RETURN => Return // In case of partial filling, an order with remaining volume is not canceled but processed further. // Return orders are not allowed in the Market Execution // mode (market execution — SYMBOL_TRADE_EXECUTION_MARKET). ENUM_ORDER_TYPE_FILLING typeFilling; // // the type of order at the time of the expiration ... // -------------------------------------------------------- // ORDER_TIME_GTC => Good till cancel order ... // ORDER_TIME_DAY => Good till current trade day order ... // ORDER_TIME_SPECIFIED => Good till expired order ... // ORDER_TIME_SPECIFIED_DAY => The order will be effective till 23:59:59 of the specified day. // If this time is outside a trading session, the order expires in the nearest trading time ... ENUM_ORDER_TYPE_TIME typeTime; // // The reason for order placing ... // -------------------------------------- // ORDER_REASON_SL => The order was placed as a result of Stop Loss activation ... // ORDER_REASON_TP => The order was placed as a result of Take Profit activation ... // ORDER_REASON_SO => The order was placed as a result of the Stop Out event ... // ORDER_REASON_WEB => The order was placed from a web platform ... // ORDER_REASON_CLIENT => The order was placed from a desktop terminal ... // ORDER_REASON_MOBILE => The order was placed from a mobile application ... // ORDER_REASON_EXPERT => The order was placed from an MQL5-program, i.e. by an Expert Advisor or a script ... ENUM_ORDER_REASON reason; }; // // END Provided Functions ... //