Skip to content

Commit

Permalink
Data: Moves MqlParamToDouble/MqlParamToInteger to static struct method
Browse files Browse the repository at this point in the history
  • Loading branch information
kenorb committed Aug 1, 2021
1 parent 138cf93 commit 1920376
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 70 deletions.
6 changes: 3 additions & 3 deletions Chart.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -748,23 +748,23 @@ class Chart : public Market {
case CHART_COND_BAR_INDEX_EQ_ARG:
// Current bar's index equals argument value.
if (ArraySize(_args) > 0) {
return GetBarIndex() == MqlParamToInteger(_args[0]);
return GetBarIndex() == DataParamEntry::ToInteger(_args[0]);
} else {
SetUserError(ERR_INVALID_PARAMETER);
return false;
}
case CHART_COND_BAR_INDEX_GT_ARG:
// Current bar's index greater than argument value.
if (ArraySize(_args) > 0) {
return GetBarIndex() > MqlParamToInteger(_args[0]);
return GetBarIndex() > DataParamEntry::ToInteger(_args[0]);
} else {
SetUserError(ERR_INVALID_PARAMETER);
return false;
}
case CHART_COND_BAR_INDEX_LT_ARG:
// Current bar's index lower than argument value.
if (ArraySize(_args) > 0) {
return GetBarIndex() < MqlParamToInteger(_args[0]);
return GetBarIndex() < DataParamEntry::ToInteger(_args[0]);
} else {
SetUserError(ERR_INVALID_PARAMETER);
return false;
Expand Down
106 changes: 53 additions & 53 deletions Data.struct.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,59 +109,6 @@ struct MqlParam {
};
#endif

/**
* Converts MqlParam struct to integer.
*
* @todo: Move to Data class.
*/
long MqlParamToInteger(MqlParam &param) {
switch (param.type) {
case TYPE_BOOL:
return param.integer_value ? 1 : 0;
case TYPE_DATETIME:
case TYPE_INT:
case TYPE_LONG:
case TYPE_UINT:
case TYPE_ULONG:
case TYPE_SHORT:
return param.integer_value;
case TYPE_DOUBLE:
case TYPE_FLOAT:
return (int)param.double_value;
case TYPE_CHAR:
case TYPE_COLOR:
case TYPE_STRING:
case TYPE_UCHAR:
return StringToInteger(param.string_value);
}
return INT_MIN;
}

/**
* Converts MqlParam struct to double.
*
* @todo: Move to Data class.
*/
double MqlParamToDouble(MqlParam &param) {
switch (param.type) {
case TYPE_BOOL:
return param.integer_value ? 1 : 0;
case TYPE_INT:
case TYPE_LONG:
case TYPE_UINT:
case TYPE_ULONG:
return (double)param.integer_value;
case TYPE_DOUBLE:
case TYPE_FLOAT:
return param.double_value;
case TYPE_CHAR:
case TYPE_STRING:
case TYPE_UCHAR:
return StringToDouble(param.string_value);
}
return DBL_MIN;
}

/**
* Struct to provide multitype data parameters.
*
Expand Down Expand Up @@ -227,6 +174,59 @@ struct DataParamEntry : public MqlParam {
DataParamEntry(ENUM_DATATYPE _type) { type = _type; }
*/

/* Static methods */

/**
* Converts MqlParam struct to double.
*
*/
static double ToDouble(MqlParam &param) {
switch (param.type) {
case TYPE_BOOL:
return param.integer_value ? 1 : 0;
case TYPE_INT:
case TYPE_LONG:
case TYPE_UINT:
case TYPE_ULONG:
return (double)param.integer_value;
case TYPE_DOUBLE:
case TYPE_FLOAT:
return param.double_value;
case TYPE_CHAR:
case TYPE_STRING:
case TYPE_UCHAR:
return ::StringToDouble(param.string_value);
}
return DBL_MIN;
}

/**
* Converts MqlParam struct to integer.
*
*/
static long ToInteger(MqlParam &param) {
switch (param.type) {
case TYPE_BOOL:
return param.integer_value ? 1 : 0;
case TYPE_DATETIME:
case TYPE_INT:
case TYPE_LONG:
case TYPE_UINT:
case TYPE_ULONG:
case TYPE_SHORT:
return param.integer_value;
case TYPE_DOUBLE:
case TYPE_FLOAT:
return (int)param.double_value;
case TYPE_CHAR:
case TYPE_COLOR:
case TYPE_STRING:
case TYPE_UCHAR:
return ::StringToInteger(param.string_value);
}
return INT_MIN;
}

/* Serializers */

/**
Expand Down
2 changes: 1 addition & 1 deletion Indicator.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -904,7 +904,7 @@ class Indicator : public Chart {
*/
virtual bool ExecuteAction(ENUM_INDICATOR_ACTION _action, DataParamEntry& _args[]) {
bool _result = true;
long _arg1 = ArraySize(_args) > 0 ? MqlParamToInteger(_args[0]) : WRONG_VALUE;
long _arg1 = ArraySize(_args) > 0 ? DataParamEntry::ToInteger(_args[0]) : WRONG_VALUE;
switch (_action) {
case INDI_ACTION_CLEAR_CACHE:
_arg1 = _arg1 > 0 ? _arg1 : TimeCurrent();
Expand Down
6 changes: 3 additions & 3 deletions Order.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -2634,17 +2634,17 @@ class Order : public SymbolInfo {
bool CheckCondition(ENUM_ORDER_CONDITION _cond, ARRAY_REF(DataParamEntry, _args)) {
switch (_cond) {
case ORDER_COND_IN_LOSS:
return GetProfit() < 0;
return GetProfit() < (ArraySize(_args) > 0 ? DataParamEntry::ToDouble(_args[0]) : 0);
case ORDER_COND_IN_PROFIT:
return GetProfit() > 0;
return GetProfit() > (ArraySize(_args) > 0 ? DataParamEntry::ToDouble(_args[0]) : 0);
case ORDER_COND_IS_CLOSED:
return IsClosed();
case ORDER_COND_IS_OPEN:
return IsOpen();
case ORDER_COND_LIFETIME_GT_ARG:
case ORDER_COND_LIFETIME_LT_ARG:
if (ArraySize(_args) > 0) {
long _arg_value = MqlParamToInteger(_args[0]);
long _arg_value = DataParamEntry::ToInteger(_args[0]);
switch (_cond) {
case ORDER_COND_LIFETIME_GT_ARG:
return TimeCurrent() - odata.Get(ORDER_TIME_SETUP) > _arg_value;
Expand Down
6 changes: 3 additions & 3 deletions Strategy.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -782,9 +782,9 @@ class Strategy : public Object {
bool CheckCondition(ENUM_STRATEGY_CONDITION _cond, DataParamEntry &_args[]) {
bool _result = true;
long arg_size = ArraySize(_args);
long _arg1l = ArraySize(_args) > 0 ? MqlParamToInteger(_args[0]) : WRONG_VALUE;
long _arg2l = ArraySize(_args) > 1 ? MqlParamToInteger(_args[1]) : WRONG_VALUE;
long _arg3l = ArraySize(_args) > 2 ? MqlParamToInteger(_args[2]) : WRONG_VALUE;
long _arg1l = ArraySize(_args) > 0 ? DataParamEntry::ToInteger(_args[0]) : WRONG_VALUE;
long _arg2l = ArraySize(_args) > 1 ? DataParamEntry::ToInteger(_args[1]) : WRONG_VALUE;
long _arg3l = ArraySize(_args) > 2 ? DataParamEntry::ToInteger(_args[2]) : WRONG_VALUE;
switch (_cond) {
case STRAT_COND_IS_ENABLED:
return sparams.IsEnabled();
Expand Down
10 changes: 5 additions & 5 deletions Terminal.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -875,8 +875,8 @@ class Terminal : public Object {
* Returns true when the condition is met.
*/
bool CheckCondition(ENUM_TERMINAL_CONDITION _cond, ARRAY_REF(DataParamEntry, _args)) {
long _arg1l = ArraySize(_args) > 0 ? MqlParamToInteger(_args[0]) : WRONG_VALUE;
long _arg2l = ArraySize(_args) > 1 ? MqlParamToInteger(_args[1]) : WRONG_VALUE;
long _arg1l = ArraySize(_args) > 0 ? DataParamEntry::ToInteger(_args[0]) : WRONG_VALUE;
long _arg2l = ArraySize(_args) > 1 ? DataParamEntry::ToInteger(_args[1]) : WRONG_VALUE;
switch (_cond) {
case TERMINAL_COND_IS_CONNECTED:
return !IsConnected();
Expand Down Expand Up @@ -909,9 +909,9 @@ class Terminal : public Object {
* Returns true when the condition is met.
*/
bool ExecuteAction(ENUM_TERMINAL_ACTION _action, ARRAY_REF(MqlParam, _args)) {
long _arg1l = ArraySize(_args) > 0 ? MqlParamToInteger(_args[0]) : WRONG_VALUE;
long _arg2l = ArraySize(_args) > 1 ? MqlParamToInteger(_args[1]) : WRONG_VALUE;
long _arg3l = ArraySize(_args) > 2 ? MqlParamToInteger(_args[2]) : WRONG_VALUE;
long _arg1l = ArraySize(_args) > 0 ? DataParamEntry::ToInteger(_args[0]) : WRONG_VALUE;
long _arg2l = ArraySize(_args) > 1 ? DataParamEntry::ToInteger(_args[1]) : WRONG_VALUE;
long _arg3l = ArraySize(_args) > 2 ? DataParamEntry::ToInteger(_args[2]) : WRONG_VALUE;
switch (_action) {
case TERMINAL_ACTION_CRASH:
delete THIS_PTR;
Expand Down
4 changes: 2 additions & 2 deletions Trade.mqh
Original file line number Diff line number Diff line change
Expand Up @@ -1456,8 +1456,8 @@ HistorySelect(0, TimeCurrent()); // Select history for access.
* Returns true when the condition is met.
*/
bool CheckCondition(ENUM_TRADE_CONDITION _cond, DataParamEntry &_args[]) {
long _arg1l = ArraySize(_args) > 0 ? MqlParamToInteger(_args[0]) : WRONG_VALUE;
long _arg2l = ArraySize(_args) > 1 ? MqlParamToInteger(_args[1]) : WRONG_VALUE;
long _arg1l = ArraySize(_args) > 0 ? DataParamEntry::ToInteger(_args[0]) : WRONG_VALUE;
long _arg2l = ArraySize(_args) > 1 ? DataParamEntry::ToInteger(_args[1]) : WRONG_VALUE;
switch (_cond) {
case TRADE_COND_ALLOWED_NOT:
return !IsTradeAllowed();
Expand Down

0 comments on commit 1920376

Please sign in to comment.