MQLplus/lib_mqlplus/mql4_compatibility/lib_mql4_Position.mqh
super.admin 466f9ca5c5 convert
2025-05-30 16:09:52 +02:00

271 lines
No EOL
7.3 KiB
MQL5

#ifndef LIB_MQLPLUS_MQL4_COMPATIBILITY_POSITION_MQH_INCLUDED
#define LIB_MQLPLUS_MQL4_COMPATIBILITY_POSITION_MQH_INCLUDED
#property version "1.0";
#property strict
/**********************************************************************************
* Copyright (C) 2010-2022 Dominik Egert <info@freie-netze.de>
*
* This file is the MQL4 backward compatibility include file.
*
* MQLplus, including this file may not be copied and/or distributed
* without explecit permit by the author.
* Author Dominik Egert / Freie Netze UG.
**********************************************************************************
*
* Version: 1.0
* State: development
*
* File information
* ================
*
*
*
*/
#ifdef DBG_MSG_TRACE_FILE_LOADER
DBG_MSG_TRACE_FILE_LOADER;
#endif
//*********************************************************************************************************************************************************/
//
// BEGIN MQL4 compatibility additions
//
///////////////////////////////////////////////////////////////////////////
//
// Add required MQL5 enumerations
//
enum ENUM_POSITION_PROPERTY_INTEGER
{
POSITION_TICKET,
POSITION_TIME,
POSITION_TIME_MSC,
POSITION_TIME_UPDATE,
POSITION_TIME_UPDATE_MSC,
POSITION_TYPE,
POSITION_MAGIC,
POSITION_IDENTIFIER
};
enum ENUM_POSITION_PROPERTY_DOUBLE
{
POSITION_VOLUME,
POSITION_PRICE_OPEN,
POSITION_SL,
POSITION_TP,
POSITION_PRICE_CURRENT,
POSITION_SWAP,
POSITION_PROFIT
};
enum ENUM_POSITION_PROPERTY_STRING
{
POSITION_SYMBOL,
POSITION_COMMENT,
POSITION_EXTERNAL_ID
};
enum ENUM_POSITION_TYPE
{
POSITION_TYPE_BUY,
POSITION_TYPE_SELL
};
enum ENUM_POSITION_REASON
{
POSITION_REASON_CLIENT,
POSITION_REASON_MOBILE,
POSITION_REASON_WEB,
POSITION_REASON_EXPERT
};
//
/////////////////////////////////////////////////////////////////////////////////////////////////////
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible PositionsTotal() |
//+------------------------------------------------------------------+
const int PositionsTotal()
{
int ptr = OrdersTotal();
int cnt = NULL;
while( (ptr >= NULL)
&& (!_StopFlag) )
{ cnt += (OrderSelect(ptr, SELECT_BY_POS, MODE_TRADES)) && (OrderType() <= OP_SELL); }
// Return
return(cnt);
}
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible PositionGetSymbol() |
//+------------------------------------------------------------------+
#define PositionGetSymbol(x) (mt4_OrderSelect(x, SELECT_BY_POS, MODE_TRADES) ? OrderSymbol() : "")
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible PositionSelect() |
//+------------------------------------------------------------------+
const bool PositionSelect(const string symbol)
{
int total = OrdersTotal();
int cnt = NULL;
while( (cnt <= total)
&& (!_StopFlag) )
{
if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{ continue; }
if(OrderSymbol() == symbol)
{ return(true); }
cnt++;
}
// Return
return(false);
}
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible PositionSelectByTicket() |
//+------------------------------------------------------------------+
#define PositionSelectByTicket(x) mt4_OrderSelect((int)x, SELECT_BY_TICKET, MODE_TRADES)
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible PositionGetDouble() |
//+------------------------------------------------------------------+
const double PositionGetDouble(const ENUM_POSITION_PROPERTY_DOUBLE property_id)
{
switch(property_id)
{
case POSITION_VOLUME:
return(OrderLots());
case POSITION_PRICE_OPEN:
return(OrderOpenPrice());
case POSITION_SL:
return(OrderStopLoss());
case POSITION_TP:
return(OrderTakeProfit());
case POSITION_PRICE_CURRENT:
return(SymbolInfoDouble(OrderSymbol(), (OrderType() == OP_SELL) ? SYMBOL_BID : SYMBOL_ASK));
case POSITION_SWAP:
return(OrderSwap());
case POSITION_PROFIT:
return(OrderProfit());
}
// Return
return(DBL_MIN);
}
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible PositionGetInteger() |
//+------------------------------------------------------------------+
const long PositionGetInteger(const ENUM_POSITION_PROPERTY_INTEGER property_id)
{
switch(property_id)
{
case POSITION_TICKET:
return(OrderTicket());
case POSITION_TIME:
return(OrderOpenTime());
case POSITION_TIME_MSC:
return(OrderOpenTime() * 1000);
case POSITION_TYPE:
switch(OrderType())
{
case OP_BUY: return((long)POSITION_TYPE_BUY);
case OP_SELL: return((long)POSITION_TYPE_SELL);
}
break;
case POSITION_MAGIC:
return(OrderMagicNumber());
case POSITION_TIME_UPDATE:
case POSITION_TIME_UPDATE_MSC:
case POSITION_IDENTIFIER:
#ifdef _DEBUG
printf("Feature not supported in MQL4: %s; %s", __FUNCTION__, EnumToString(property_id));
#else
break;
#endif
}
// Return
return(LONG_MIN);
}
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible PositionGetString() |
//+------------------------------------------------------------------+
const string PositionGetString(const ENUM_POSITION_PROPERTY_STRING property_id)
{
switch(property_id)
{
case POSITION_SYMBOL:
return(OrderSymbol());
case POSITION_COMMENT:
return(OrderComment());
case POSITION_EXTERNAL_ID:
#ifdef _DEBUG
printf("Feature not supported in MQL4: %s; %s", __FUNCTION__, EnumToString(property_id));
#else
break;
#endif
}
// Return
return("");
}
//+------------------------------------------------------------------+
//| MQL4: MQL5-compatible PositionGetTicket() |
//+------------------------------------------------------------------+
#define PositionGetTicket(x) (OrderSelect(x, SELECT_BY_POS, MODE_TRADES) && (OrderType() <= OP_SELL) ? (ulong)OrderTicket() : (ulong)0)
//
// END MQL compatibility */
//*********************************************************************************************************************************************************/
#endif // LIB_MQLPLUS_MQL4_COMPATIBILITY_POSITION_MQH_INCLUDED