diff --git a/MTConnector/MTConnector.cpp b/MTConnector/MTConnector.cpp index b96df31e..5fc08918 100755 --- a/MTConnector/MTConnector.cpp +++ b/MTConnector/MTConnector.cpp @@ -19,56 +19,56 @@ using namespace System::Diagnostics; void convertSystemString(wchar_t* dest, String^ src) { - pin_ptr wch = PtrToStringChars(src); - memcpy(dest, wch, wcslen(wch) * sizeof(wchar_t)); - dest[wcslen(wch)] = '\0'; + pin_ptr wch = PtrToStringChars(src); + memcpy(dest, wch, wcslen(wch) * sizeof(wchar_t)); + dest[wcslen(wch)] = '\0'; } int _stdcall initExpert(int expertHandle, int port, wchar_t* symbol, double bid, double ask, wchar_t* err) { - try - { - MT4Handler^ mtHandler = gcnew MT4Handler(); + try + { + MT4Handler^ mtHandler = gcnew MT4Handler(); - MtServerInstance::GetInstance()->InitExpert(expertHandle, port, gcnew String(symbol), bid, ask, mtHandler); - } - catch (Exception^ e) - { - convertSystemString(err, e->Message); - Debug::WriteLine("[ERROR] MTConnector:initExpert(): " + e->Message); - return 0; - } - return 1; + MtServerInstance::GetInstance()->InitExpert(expertHandle, port, gcnew String(symbol), bid, ask, mtHandler); + } + catch (Exception^ e) + { + convertSystemString(err, e->Message); + Debug::WriteLine("[ERROR] MTConnector:initExpert(): " + e->Message); + return 0; + } + return 1; } int _stdcall deinitExpert(int expertHandle, wchar_t* err) { - try - { - MtServerInstance::GetInstance()->DeinitExpert(expertHandle); - } - catch (Exception^ e) - { - convertSystemString(err, e->Message); - Debug::WriteLine("[ERROR] MTConnector:deinitExpert(): " + e->Message); - return 0; - } - return 1; + try + { + MtServerInstance::GetInstance()->DeinitExpert(expertHandle); + } + catch (Exception^ e) + { + convertSystemString(err, e->Message); + Debug::WriteLine("[ERROR] MTConnector:deinitExpert(): " + e->Message); + return 0; + } + return 1; } int _stdcall updateQuote(int expertHandle, wchar_t* symbol, double bid, double ask, wchar_t* err) { - try - { - MtServerInstance::GetInstance()->SendQuote(expertHandle, gcnew String(symbol), bid, ask); - } - catch (Exception^ e) - { - convertSystemString(err, e->Message); - Debug::WriteLine("[ERROR] MTConnector:updateQuote(): " + e->Message); - return 0; - } - return 1; + try + { + MtServerInstance::GetInstance()->SendQuote(expertHandle, gcnew String(symbol), bid, ask); + } + catch (Exception^ e) + { + convertSystemString(err, e->Message); + Debug::WriteLine("[ERROR] MTConnector:updateQuote(): " + e->Message); + return 0; + } + return 1; } @@ -89,185 +89,199 @@ int _stdcall sendEvent(int expertHandle, int eventType, wchar_t* payload, wchar_ int _stdcall sendIntResponse(int expertHandle, int response) { - try - { - MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseInt(response)); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:sendIntResponse(): " + e->Message); - return 0; - } - return 1; + try + { + MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseInt(response)); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:sendIntResponse(): " + e->Message); + return 0; + } + return 1; } int _stdcall sendBooleanResponse(int expertHandle, int response) { - try - { - bool value = (response != 0) ? true : false; + try + { + bool value = (response != 0) ? true : false; - MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseBool(value)); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:sendBooleanResponse(): " + e->Message); - return 0; - } - return 1; + MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseBool(value)); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:sendBooleanResponse(): " + e->Message); + return 0; + } + return 1; } int _stdcall sendDoubleResponse(int expertHandle, double response) { - try - { - MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseDouble(response)); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:sendDoubleResponse(): " + e->Message); - return 0; - } - return 1; + try + { + MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseDouble(response)); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:sendDoubleResponse(): " + e->Message); + return 0; + } + return 1; } int _stdcall sendStringResponse(int expertHandle, wchar_t* response) { - try - { - MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseString(gcnew String(response))); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:sendStringResponse(): " + e->Message); - return 0; - } - return 1; + try + { + MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseString(gcnew String(response))); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:sendStringResponse(): " + e->Message); + return 0; + } + return 1; } int _stdcall sendVoidResponse(int expertHandle) { - try - { - MtServerInstance::GetInstance()->SendResponse(expertHandle, nullptr); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:sendVoidResponse(): " + e->Message); - return 0; - } - return 1; + try + { + MtServerInstance::GetInstance()->SendResponse(expertHandle, nullptr); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:sendVoidResponse(): " + e->Message); + return 0; + } + return 1; } int _stdcall sendDoubleArrayResponse(int expertHandle, double* values, int size) { - try - { - array^ list = gcnew array(size); + try + { + array^ list = gcnew array(size); - for(int i = 0; i < size; i++) - { - list[i] = values[i]; - } + for(int i = 0; i < size; i++) + { + list[i] = values[i]; + } - MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseDoubleArray(list)); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:sendDoubleArrayResponse(): " + e->Message); - return 0; - } - return 1; + MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseDoubleArray(list)); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:sendDoubleArrayResponse(): " + e->Message); + return 0; + } + return 1; } int _stdcall sendIntArrayResponse(int expertHandle, int* values, int size) { - try - { - array^ list = gcnew array(size); + try + { + array^ list = gcnew array(size); - for(int i = 0; i < size; i++) - { - list[i] = values[i]; - } + for(int i = 0; i < size; i++) + { + list[i] = values[i]; + } - MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseIntArray(list)); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:sendIntArrayResponse(): " + e->Message); - return 0; - } - return 1; + MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseIntArray(list)); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:sendIntArrayResponse(): " + e->Message); + return 0; + } + return 1; +} + +int _stdcall sendLongResponse(int expertHandle, __int64 response) +{ + try + { + MtServerInstance::GetInstance()->SendResponse(expertHandle, gcnew MtResponseLong(response)); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:sendLongResponse(): " + e->Message); + return 0; + } + return 1; } int _stdcall getCommandType(int expertHandle, int* res) { - try - { - *res = MtServerInstance::GetInstance()->GetCommandType(expertHandle); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:getCommandType(): " + e->Message); - return 0; - } - return 1; + try + { + *res = MtServerInstance::GetInstance()->GetCommandType(expertHandle); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:getCommandType(): " + e->Message); + return 0; + } + return 1; } int _stdcall getIntValue(int expertHandle, int paramIndex, int* res) { - try - { - *res = (int)MtServerInstance::GetInstance()->GetCommandParameter(expertHandle, paramIndex); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:getIntValue(): " + e->Message); - return 0; - } - return 1; + try + { + *res = (int)MtServerInstance::GetInstance()->GetCommandParameter(expertHandle, paramIndex); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:getIntValue(): " + e->Message); + return 0; + } + return 1; } int _stdcall getDoubleValue(int expertHandle, int paramIndex, double* res) { - try - { - *res = (double)MtServerInstance::GetInstance()->GetCommandParameter(expertHandle, paramIndex); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:getDoubleValue(): " + e->Message); - return 0; - } - return 1; + try + { + *res = (double)MtServerInstance::GetInstance()->GetCommandParameter(expertHandle, paramIndex); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:getDoubleValue(): " + e->Message); + return 0; + } + return 1; } int _stdcall getStringValue(int expertHandle, int paramIndex, wchar_t* res) { - try - { - convertSystemString(res, (String^)MtServerInstance::GetInstance()->GetCommandParameter(expertHandle, paramIndex)); - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MTConnector:getStringValue(): " + e->Message); - return 0; - } - return 1; + try + { + convertSystemString(res, (String^)MtServerInstance::GetInstance()->GetCommandParameter(expertHandle, paramIndex)); + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MTConnector:getStringValue(): " + e->Message); + return 0; + } + return 1; } int _stdcall getBooleanValue(int expertHandle, int paramIndex, int* res) { - try - { - bool val = (bool)MtServerInstance::GetInstance()->GetCommandParameter(expertHandle, paramIndex); - *res = val == true ? 1 : 0; - } - catch (Exception^ e) - { - Debug::WriteLine("[ERROR] MT5Connector:getBooleanValue(): " + e->Message); - return 0; - } - return 1; + try + { + bool val = (bool)MtServerInstance::GetInstance()->GetCommandParameter(expertHandle, paramIndex); + *res = val == true ? 1 : 0; + } + catch (Exception^ e) + { + Debug::WriteLine("[ERROR] MT5Connector:getBooleanValue(): " + e->Message); + return 0; + } + return 1; } \ No newline at end of file diff --git a/MTConnector/MTConnector.def b/MTConnector/MTConnector.def index 53b80ced..c814b568 100755 --- a/MTConnector/MTConnector.def +++ b/MTConnector/MTConnector.def @@ -3,16 +3,17 @@ LIBRARY MTConnector EXPORTS initExpert deinitExpert updateQuote - sendEvent - sendIntResponse - sendBooleanResponse - sendDoubleResponse - sendStringResponse - sendVoidResponse - sendDoubleArrayResponse - sendIntArrayResponse - getCommandType - getIntValue - getDoubleValue - getStringValue - getBooleanValue \ No newline at end of file + sendEvent + sendIntResponse + sendBooleanResponse + sendDoubleResponse + sendStringResponse + sendVoidResponse + sendDoubleArrayResponse + sendIntArrayResponse + sendLongResponse + getCommandType + getIntValue + getDoubleValue + getStringValue + getBooleanValue \ No newline at end of file diff --git a/MtApi/EnumSymbolInfoInteger.cs b/MtApi/EnumSymbolInfoInteger.cs new file mode 100644 index 00000000..2f9b53ee --- /dev/null +++ b/MtApi/EnumSymbolInfoInteger.cs @@ -0,0 +1,31 @@ +namespace MtApi +{ + //MQL4: ENUM_SYMBOL_INFO_INTEGER + public enum EnumSymbolInfoInteger + { + SYMBOL_SELECT = 0, + SYMBOL_VISIBLE = 76, + SYMBOL_SESSION_DEALS = 56, + SYMBOL_SESSION_BUY_ORDERS = 60, + SYMBOL_SESSION_SELL_ORDERS = 62, + SYMBOL_VOLUME = 10, + SYMBOL_VOLUMEHIGH = 11, + SYMBOL_VOLUMELOW = 12, + SYMBOL_TIME = 15, + SYMBOL_DIGITS = 17, + SYMBOL_SPREAD = 18, + SYMBOL_SPREAD_FLOAT = 41, + SYMBOL_TRADE_CALC_MODE = 29, + SYMBOL_TRADE_MODE = 30, + SYMBOL_START_TIME = 51, + SYMBOL_EXPIRATION_TIME = 52, + SYMBOL_TRADE_STOPS_LEVEL = 31, + SYMBOL_TRADE_FREEZE_LEVEL = 32, + SYMBOL_TRADE_EXEMODE = 33, + SYMBOL_SWAP_MODE = 37, + SYMBOL_SWAP_ROLLOVER3DAYS = 40, + SYMBOL_EXPIRATION_MODE = 49, + SYMBOL_FILLING_MODE = 50, + SYMBOL_ORDER_MODE = 71 + } +} diff --git a/MtApi/MtApi.csproj b/MtApi/MtApi.csproj index 387ec10c..0721be6a 100755 --- a/MtApi/MtApi.csproj +++ b/MtApi/MtApi.csproj @@ -59,6 +59,7 @@ + diff --git a/MtApi/MtApiClient.cs b/MtApi/MtApiClient.cs index 49bd2b26..4db52061 100755 --- a/MtApi/MtApiClient.cs +++ b/MtApi/MtApiClient.cs @@ -659,23 +659,60 @@ namespace MtApi #endregion #region Symbols + /// + ///Returns the number of available (selected in Market Watch or all) symbols. + /// + ///Request mode. Can be true or false. + /// + ///If the 'selected' parameter is true, the function returns the number of symbols selected in MarketWatch. If the value is false, it returns the total number of all symbols. + /// public int SymbolsTotal(bool selected) { var commandParameters = new ArrayList { selected }; return SendCommand(MtCommandType.SymbolsTotal, commandParameters); } + /// + ///Returns the name of a symbol. + /// + ///Order number of a symbol. + ///Request mode. If the value is true, the symbol is taken from the list of symbols selected in MarketWatch. If the value is false, the symbol is taken from the general list. + /// + ///Value of string type with the symbol name. + /// public string SymbolName(int pos, bool selected) { var commandParameters = new ArrayList { pos, selected }; return SendCommand(MtCommandType.SymbolName, commandParameters); } + /// + ///Selects a symbol in the Market Watch window or removes a symbol from the window. + /// + ///Symbol name + ///Switch. If the value is false, a symbol should be removed from MarketWatch, otherwise a symbol should be selected in this window. A symbol can't be removed if the symbol chart is open, or there are open orders for this symbol. + /// + ///In case of failure returns false. + /// public bool SymbolSelect(string name, bool select) { var commandParameters = new ArrayList { name, select }; return SendCommand(MtCommandType.SymbolSelect, commandParameters); } + + /// + ///Returns the corresponding property of a specified symbol. + /// + ///Symbol name + ///Identifier of a symbol property. The value can be one of the values of the EnumSymbolInfoInteger enumeration + /// + ///The value of long type. + /// + public long SymbolInfoInteger(string name, EnumSymbolInfoInteger propId) + { + var commandParameters = new ArrayList { name, (int)propId }; + return SendCommand(MtCommandType.SymbolInfoInteger, commandParameters); + } #endregion #region Common Function diff --git a/MtApi/MtCommandType.cs b/MtApi/MtCommandType.cs index a3b792cd..5d554be7 100755 --- a/MtApi/MtCommandType.cs +++ b/MtApi/MtCommandType.cs @@ -200,6 +200,7 @@ namespace MtApi //Symbols SymbolsTotal = 200, SymbolName = 201, - SymbolSelect = 202 + SymbolSelect = 202, + SymbolInfoInteger = 203 } } diff --git a/mq4/MtApi.ex4 b/mq4/MtApi.ex4 index 34c96121..1f2e651d 100755 Binary files a/mq4/MtApi.ex4 and b/mq4/MtApi.ex4 differ diff --git a/mq4/MtApi.mq4 b/mq4/MtApi.mq4 index be6dd880..11699716 100755 Binary files a/mq4/MtApi.mq4 and b/mq4/MtApi.mq4 differ