Files
Gunther Schulz 4b2297fbfb allow ENUM as string as parameters for indicators
minor code optimization
2020-03-04 12:32:48 +01:00

383 lines
13 KiB
Plaintext

#define MIN_ENUM_VALUES 0
#define MAX_ENUM_VALUES 255
//+------------------------------------------------------------------+
//| StringToEnum : Convert a string to an ENUM value, |
//| it loops between min(0) and max(255), adjustable if needed. |
//| Non existing enum value defined as -1. If -1 is used as an |
//| enum value, code need to be adjusted to an other default. |
//| Parameters : |
//| in - string to convert |
//| out - ENUM value |
//| @return - int if conversion succeeded, false otherwise |
//| |
//| Based on: |
//| https://www.mql5.com/en/forum/61741/page3#comment_5491344 |
//+------------------------------------------------------------------+
template<typename ENUM>
int StringToEnum(string in,ENUM &out)
{
out=-1;
//---
for(int i=MIN_ENUM_VALUES;i<=MAX_ENUM_VALUES;i++)
{
ENUM enumValue=(ENUM)i;
if(in==EnumToString(enumValue))
{
out=enumValue;
break;
}
}
//---
return(out);
}
int StringToEnumInt(string indicatorConstantString)
{
int r = -1;
ENUM_ACCOUNT_INFO_DOUBLE a1;
r = StringToEnum(indicatorConstantString,a1);
//if(debug) Print("ENUM type: ENUM_ACCOUNT_INFO_DOUBLE");
if(r>=0)return r;
ENUM_ACCOUNT_INFO_INTEGER a2;
r = StringToEnum(indicatorConstantString,a2);
if(r>=0)return r;
ENUM_ACCOUNT_INFO_STRING a3;
r = StringToEnum(indicatorConstantString,a3);
if(r>=0)return r;
ENUM_ACCOUNT_MARGIN_MODE a4;
r = StringToEnum(indicatorConstantString,a4);
if(r>=0)return r;
ENUM_ACCOUNT_STOPOUT_MODE a5;
r = StringToEnum(indicatorConstantString,a5);
if(r>=0)return r;
ENUM_ACCOUNT_TRADE_MODE a6;
r = StringToEnum(indicatorConstantString,a6);
if(r>=0)return r;
ENUM_ALIGN_MODE a7;
r = StringToEnum(indicatorConstantString,a7);
if(r>=0)return r;
ENUM_ANCHOR_POINT a8;
r = StringToEnum(indicatorConstantString,a8);
if(r>=0)return r;
ENUM_APPLIED_PRICE a9;
r = StringToEnum(indicatorConstantString,a9);
if(r>=0)return r;
ENUM_APPLIED_PRICE a10;
r = StringToEnum(indicatorConstantString,a10);
if(r>=0)return r;
ENUM_APPLIED_VOLUME a11;
r = StringToEnum(indicatorConstantString,a11);
if(r>=0)return r;
ENUM_ARROW_ANCHOR a12;
r = StringToEnum(indicatorConstantString,a12);
if(r>=0)return r;
ENUM_BASE_CORNER a13;
r = StringToEnum(indicatorConstantString,a13);
if(r>=0)return r;
ENUM_BOOK_TYPE a14;
r = StringToEnum(indicatorConstantString,a14);
if(r>=0)return r;
ENUM_BORDER_TYPE a15;
r = StringToEnum(indicatorConstantString,a15);
if(r>=0)return r;
ENUM_CALENDAR_EVENT_FREQUENCY a16;
r = StringToEnum(indicatorConstantString,a16);
if(r>=0)return r;
ENUM_CALENDAR_EVENT_IMPACT a17;
r = StringToEnum(indicatorConstantString,a17);
if(r>=0)return r;
ENUM_CALENDAR_EVENT_IMPORTANCE a18;
r = StringToEnum(indicatorConstantString,a18);
if(r>=0)return r;
ENUM_CALENDAR_EVENT_MULTIPLIER a19;
r = StringToEnum(indicatorConstantString,a19);
if(r>=0)return r;
ENUM_CALENDAR_EVENT_SECTOR a20;
r = StringToEnum(indicatorConstantString,a20);
if(r>=0)return r;
ENUM_CALENDAR_EVENT_TIMEMODE a21;
r = StringToEnum(indicatorConstantString,a21);
if(r>=0)return r;
ENUM_CALENDAR_EVENT_TYPE a22;
r = StringToEnum(indicatorConstantString,a22);
if(r>=0)return r;
ENUM_CALENDAR_EVENT_UNIT a23;
r = StringToEnum(indicatorConstantString,a23);
if(r>=0)return r;
ENUM_CHART_EVENT a24;
r = StringToEnum(indicatorConstantString,a24);
if(r>=0)return r;
ENUM_CHART_MODE a25;
r = StringToEnum(indicatorConstantString,a25);
if(r>=0)return r;
ENUM_CHART_POSITION a26;
r = StringToEnum(indicatorConstantString,a26);
if(r>=0)return r;
ENUM_CHART_PROPERTY_DOUBLE a27;
r = StringToEnum(indicatorConstantString,a27);
if(r>=0)return r;
ENUM_CHART_PROPERTY_INTEGER a28;
r = StringToEnum(indicatorConstantString,a28);
if(r>=0)return r;
ENUM_CHART_PROPERTY_STRING a29;
r = StringToEnum(indicatorConstantString,a29);
if(r>=0)return r;
ENUM_CHART_VOLUME_MODE a30;
r = StringToEnum(indicatorConstantString,a30);
if(r>=0)return r;
ENUM_CL_DEVICE_TYPE a31;
r = StringToEnum(indicatorConstantString,a31);
if(r>=0)return r;
ENUM_COLOR_FORMAT a32;
r = StringToEnum(indicatorConstantString,a32);
if(r>=0)return r;
ENUM_CRYPT_METHOD a33;
r = StringToEnum(indicatorConstantString,a33);
if(r>=0)return r;
ENUM_CUSTOMIND_PROPERTY_DOUBLE a34;
r = StringToEnum(indicatorConstantString,a34);
if(r>=0)return r;
ENUM_CHART_PROPERTY_INTEGER a35;
r = StringToEnum(indicatorConstantString,a35);
if(r>=0)return r;
ENUM_CUSTOMIND_PROPERTY_STRING a36;
r = StringToEnum(indicatorConstantString,a36);
if(r>=0)return r;
ENUM_DATABASE_EXPORT_FLAGS a37;
r = StringToEnum(indicatorConstantString,a37);
if(r>=0)return r;
ENUM_DATABASE_FIELD_TYPE a38;
r = StringToEnum(indicatorConstantString,a38);
if(r>=0)return r;
ENUM_DATABASE_OPEN_FLAGS a39;
r = StringToEnum(indicatorConstantString,a39);
if(r>=0)return r;
ENUM_DATABASE_PRINT_FLAGS a40;
r = StringToEnum(indicatorConstantString,a40);
if(r>=0)return r;
ENUM_DATATYPE a41;
r = StringToEnum(indicatorConstantString,a41);
if(r>=0)return r;
ENUM_DAY_OF_WEEK a42;
r = StringToEnum(indicatorConstantString,a42);
if(r>=0)return r;
ENUM_DEAL_ENTRY a43;
r = StringToEnum(indicatorConstantString,a43);
if(r>=0)return r;
ENUM_DEAL_PROPERTY_DOUBLE a44;
r = StringToEnum(indicatorConstantString,a44);
if(r>=0)return r;
ENUM_DEAL_PROPERTY_INTEGER a45;
r = StringToEnum(indicatorConstantString,a45);
if(r>=0)return r;
ENUM_DEAL_PROPERTY_STRING a46;
r = StringToEnum(indicatorConstantString,a46);
if(r>=0)return r;
ENUM_DEAL_REASON a47;
r = StringToEnum(indicatorConstantString,a47);
if(r>=0)return r;
ENUM_DEAL_TYPE a48;
r = StringToEnum(indicatorConstantString,a48);
if(r>=0)return r;
ENUM_DRAW_TYPE a49;
r = StringToEnum(indicatorConstantString,a49);
if(r>=0)return r;
ENUM_DX_BUFFER_TYPE a50;
r = StringToEnum(indicatorConstantString,a50);
if(r>=0)return r;
ENUM_DX_FORMAT a51;
r = StringToEnum(indicatorConstantString,a51);
if(r>=0)return r;
ENUM_DX_HANDLE_TYPE a52;
r = StringToEnum(indicatorConstantString,a52);
if(r>=0)return r;
ENUM_DX_PRIMITIVE_TOPOLOGY a53;
r = StringToEnum(indicatorConstantString,a53);
if(r>=0)return r;
ENUM_DX_SHADER_TYPE a54;
r = StringToEnum(indicatorConstantString,a54);
if(r>=0)return r;
ENUM_ELLIOT_WAVE_DEGREE a55;
r = StringToEnum(indicatorConstantString,a55);
if(r>=0)return r;
ENUM_FILESELECT_FLAGS a56;
r = StringToEnum(indicatorConstantString,a56);
if(r>=0)return r;
ENUM_FILE_POSITION a57;
r = StringToEnum(indicatorConstantString,a57);
if(r>=0)return r;
ENUM_FILE_PROPERTY_INTEGER a58;
r = StringToEnum(indicatorConstantString,a58);
if(r>=0)return r;
ENUM_GANN_DIRECTION a59;
r = StringToEnum(indicatorConstantString,a59);
if(r>=0)return r;
ENUM_INDEXBUFFER_TYPE a60;
r = StringToEnum(indicatorConstantString,a60);
if(r>=0)return r;
ENUM_INDICATOR a61;
r = StringToEnum(indicatorConstantString,a61);
if(r>=0)return r;
ENUM_INIT_RETCODE a62;
r = StringToEnum(indicatorConstantString,a62);
if(r>=0)return r;
ENUM_LICENSE_TYPE a63;
r = StringToEnum(indicatorConstantString,a63);
if(r>=0)return r;
ENUM_LINE_STYLE a64;
r = StringToEnum(indicatorConstantString,a64);
if(r>=0)return r;
ENUM_MA_METHOD a65;
r = StringToEnum(indicatorConstantString,a65);
if(r>=0)return r;
ENUM_MQL_INFO_INTEGER a66;
r = StringToEnum(indicatorConstantString,a66);
if(r>=0)return r;
ENUM_MQL_INFO_STRING a67;
r = StringToEnum(indicatorConstantString,a67);
if(r>=0)return r;
ENUM_OBJECT a68;
r = StringToEnum(indicatorConstantString,a68);
if(r>=0)return r;
ENUM_OBJECT_PROPERTY_DOUBLE a69;
r = StringToEnum(indicatorConstantString,a69);
if(r>=0)return r;
ENUM_OBJECT_PROPERTY_INTEGER a70;
r = StringToEnum(indicatorConstantString,a70);
if(r>=0)return r;
ENUM_OBJECT_PROPERTY_STRING a71;
r = StringToEnum(indicatorConstantString,a71);
if(r>=0)return r;
ENUM_OPENCL_HANDLE_TYPE a72;
r = StringToEnum(indicatorConstantString,a72);
if(r>=0)return r;
ENUM_OPENCL_PROPERTY_INTEGER a73;
r = StringToEnum(indicatorConstantString,a73);
if(r>=0)return r;
ENUM_PLOT_PROPERTY_STRING a74;
r = StringToEnum(indicatorConstantString,a74);
if(r>=0)return r;
ENUM_POINTER_TYPE a75;
r = StringToEnum(indicatorConstantString,a75);
if(r>=0)return r;
ENUM_POSITION_PROPERTY_DOUBLE a76;
r = StringToEnum(indicatorConstantString,a76);
if(r>=0)return r;
ENUM_ORDER_PROPERTY_INTEGER a77;
r = StringToEnum(indicatorConstantString,a77);
if(r>=0)return r;
ENUM_PLOT_PROPERTY_STRING a78;
r = StringToEnum(indicatorConstantString,a78);
if(r>=0)return r;
ENUM_PROGRAM_TYPE a79;
r = StringToEnum(indicatorConstantString,a79);
if(r>=0)return r;
ENUM_SERIESMODE a80;
r = StringToEnum(indicatorConstantString,a80);
if(r>=0)return r;
ENUM_SERIES_INFO_INTEGER a81;
r = StringToEnum(indicatorConstantString,a81);
if(r>=0)return r;
ENUM_SIGNAL_BASE_DOUBLE a82;
r = StringToEnum(indicatorConstantString,a82);
if(r>=0)return r;
ENUM_SIGNAL_BASE_INTEGER a83;
r = StringToEnum(indicatorConstantString,a83);
if(r>=0)return r;
ENUM_SIGNAL_BASE_STRING a84;
r = StringToEnum(indicatorConstantString,a84);
if(r>=0)return r;
ENUM_SIGNAL_INFO_DOUBLE a85;
r = StringToEnum(indicatorConstantString,a85);
if(r>=0)return r;
ENUM_SIGNAL_INFO_INTEGER a86;
r = StringToEnum(indicatorConstantString,a86);
if(r>=0)return r;
ENUM_SIGNAL_INFO_STRING a87;
r = StringToEnum(indicatorConstantString,a87);
if(r>=0)return r;
ENUM_STATISTICS a88;
r = StringToEnum(indicatorConstantString,a88);
if(r>=0)return r;
ENUM_STO_PRICE a89;
r = StringToEnum(indicatorConstantString,a89);
if(r>=0)return r;
ENUM_SYMBOL_CALC_MODE a90;
r = StringToEnum(indicatorConstantString,a90);
if(r>=0)return r;
ENUM_SYMBOL_CHART_MODE a91;
r = StringToEnum(indicatorConstantString,a91);
if(r>=0)return r;
ENUM_SYMBOL_INFO_DOUBLE a92;
r = StringToEnum(indicatorConstantString,a92);
if(r>=0)return r;
ENUM_SYMBOL_INFO_INTEGER a93;
r = StringToEnum(indicatorConstantString,a93);
if(r>=0)return r;
ENUM_SYMBOL_INFO_STRING a94;
r = StringToEnum(indicatorConstantString,a94);
if(r>=0)return r;
ENUM_STATISTICS a95;
r = StringToEnum(indicatorConstantString,a95);
if(r>=0)return r;
ENUM_STO_PRICE a96;
r = StringToEnum(indicatorConstantString,a96);
if(r>=0)return r;
ENUM_SYMBOL_CALC_MODE a97;
r = StringToEnum(indicatorConstantString,a97);
if(r>=0)return r;
ENUM_SYMBOL_CHART_MODE a98;
r = StringToEnum(indicatorConstantString,a98);
if(r>=0)return r;
ENUM_SYMBOL_INFO_DOUBLE a99;
r = StringToEnum(indicatorConstantString,a99);
if(r>=0)return r;
ENUM_SYMBOL_INFO_INTEGER a100;
r = StringToEnum(indicatorConstantString,a100);
if(r>=0)return r;
ENUM_SYMBOL_INFO_STRING a101;
r = StringToEnum(indicatorConstantString,a101);
if(r>=0)return r;
ENUM_SYMBOL_OPTION_MODE a102;
r = StringToEnum(indicatorConstantString,a102);
if(r>=0)return r;
ENUM_SYMBOL_OPTION_RIGHT a103;
r = StringToEnum(indicatorConstantString,a103);
if(r>=0)return r;
ENUM_SYMBOL_ORDER_GTC_MODE a104;
r = StringToEnum(indicatorConstantString,a104);
if(r>=0)return r;
ENUM_SYMBOL_SWAP_MODE a105;
r = StringToEnum(indicatorConstantString,a105);
if(r>=0)return r;
ENUM_SYMBOL_TRADE_EXECUTION a106;
r = StringToEnum(indicatorConstantString,a106);
if(r>=0)return r;
ENUM_SYMBOL_TRADE_MODE a107;
r = StringToEnum(indicatorConstantString,a107);
if(r>=0)return r;
ENUM_TERMINAL_INFO_DOUBLE a108;
r = StringToEnum(indicatorConstantString,a108);
if(r>=0)return r;
ENUM_TERMINAL_INFO_INTEGER a109;
r = StringToEnum(indicatorConstantString,a109);
if(r>=0)return r;
ENUM_TERMINAL_INFO_STRING a110;
r = StringToEnum(indicatorConstantString,a110);
if(r>=0)return r;
ENUM_TIMEFRAMES a111;
r = StringToEnum(indicatorConstantString,a111);
if(r>=0)return r;
ENUM_TRADE_REQUEST_ACTIONS a112;
r = StringToEnum(indicatorConstantString,a112);
if(r>=0)return r;
ENUM_TRADE_TRANSACTION_TYPE a113;
r = StringToEnum(indicatorConstantString,a113);
if(r>=0)return r;
return(-1);
}