mirror of
https://github.com/vdemydiuk/mtapi.git
synced 2026-07-28 02:57:56 +00:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3ce6b042de | |||
| 9dd770e768 | |||
| abb8b8afaa | |||
| 1d6569caa8 | |||
| 441a3cb8de | |||
| 443f5c982c | |||
| 515a12ab15 | |||
| 84b00b605a | |||
| 10e267d031 | |||
| abcd489367 |
@@ -0,0 +1,9 @@
|
||||
namespace MtApi
|
||||
{
|
||||
public enum EnumAlignMode
|
||||
{
|
||||
ALIGN_LEFT = 1,
|
||||
ALIGN_CENTER = 2,
|
||||
ALIGN_RIGHT = 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace MtApi
|
||||
{
|
||||
public enum EnumChartPropertyDouble
|
||||
{
|
||||
CHART_SHIFT_SIZE = 3,
|
||||
CHART_FIXED_POSITION = 41,
|
||||
CHART_FIXED_MAX = 8,
|
||||
CHART_FIXED_MIN = 9,
|
||||
CHART_POINTS_PER_BAR = 11,
|
||||
CHART_PRICE_MIN = 108,
|
||||
CHART_PRICE_MAX = 109
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
namespace MtApi
|
||||
{
|
||||
public enum EnumChartPropertyInteger
|
||||
{
|
||||
CHART_BRING_TO_TOP = 35,
|
||||
CHART_MOUSE_SCROLL = 42,
|
||||
CHART_EVENT_MOUSE_MOVE = 40,
|
||||
CHART_EVENT_OBJECT_CREATE = 38,
|
||||
CHART_EVENT_OBJECT_DELETE = 39,
|
||||
CHART_MODE = 0,
|
||||
CHART_FOREGROUND = 1,
|
||||
CHART_SHIFT = 2,
|
||||
CHART_AUTOSCROLL = 4,
|
||||
CHART_QUICK_NAVIGATION = 45,
|
||||
CHART_SCALE = 5,
|
||||
CHART_SCALEFIX = 6,
|
||||
CHART_SCALEFIX_11 = 7,
|
||||
CHART_SCALE_PT_PER_BAR = 10,
|
||||
CHART_SHOW_OHLC = 12,
|
||||
CHART_SHOW_BID_LINE = 13,
|
||||
CHART_SHOW_ASK_LINE = 14,
|
||||
CHART_SHOW_LAST_LINE = 15,
|
||||
CHART_SHOW_PERIOD_SEP = 16,
|
||||
CHART_SHOW_GRID = 17,
|
||||
CHART_SHOW_VOLUMES = 18,
|
||||
CHART_SHOW_OBJECT_DESCR = 19,
|
||||
CHART_VISIBLE_BARS = 100,
|
||||
CHART_WINDOWS_TOTAL = 101,
|
||||
CHART_WINDOW_IS_VISIBLE = 102,
|
||||
CHART_WINDOW_HANDLE = 103,
|
||||
CHART_WINDOW_YDISTANCE = 110,
|
||||
CHART_FIRST_VISIBLE_BAR = 104,
|
||||
CHART_WIDTH_IN_BARS = 105,
|
||||
CHART_WIDTH_IN_PIXELS = 106,
|
||||
CHART_HEIGHT_IN_PIXELS = 107,
|
||||
CHART_COLOR_BACKGROUND = 21,
|
||||
CHART_COLOR_FOREGROUND = 22,
|
||||
CHART_COLOR_GRID = 23,
|
||||
CHART_COLOR_VOLUME = 24,
|
||||
CHART_COLOR_CHART_UP = 25,
|
||||
CHART_COLOR_CHART_DOWN = 26,
|
||||
CHART_COLOR_CHART_LINE = 27,
|
||||
CHART_COLOR_CANDLE_BULL = 28,
|
||||
CHART_COLOR_CANDLE_BEAR = 29,
|
||||
CHART_COLOR_BID = 30,
|
||||
CHART_COLOR_ASK = 31,
|
||||
CHART_COLOR_LAST = 32,
|
||||
CHART_COLOR_STOP_LEVEL = 33,
|
||||
CHART_SHOW_TRADE_LEVELS = 34,
|
||||
CHART_DRAG_TRADE_LEVELS = 43,
|
||||
CHART_SHOW_DATE_SCALE = 36,
|
||||
CHART_SHOW_PRICE_SCALE = 37,
|
||||
CHART_IS_OFFLINE = 112
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace MtApi
|
||||
{
|
||||
public enum EnumChartPropertyString
|
||||
{
|
||||
CHART_COMMENT = 20
|
||||
}
|
||||
}
|
||||
@@ -59,6 +59,10 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ChartPeriod.cs" />
|
||||
<Compile Include="EnumAlignMode.cs" />
|
||||
<Compile Include="EnumChartPropertyDouble.cs" />
|
||||
<Compile Include="EnumChartPropertyInteger.cs" />
|
||||
<Compile Include="EnumChartPropertyString.cs" />
|
||||
<Compile Include="EnumColorFormat.cs" />
|
||||
<Compile Include="EnumObject.cs" />
|
||||
<Compile Include="EnumObjectPropertyDouble.cs" />
|
||||
|
||||
+611
-5
@@ -786,7 +786,7 @@ namespace MtApi
|
||||
|
||||
#endregion
|
||||
|
||||
#region Account Information
|
||||
#region Account functions
|
||||
|
||||
public double AccountBalance()
|
||||
{
|
||||
@@ -869,6 +869,12 @@ namespace MtApi
|
||||
return SendCommand<int>(MtCommandType.AccountStopoutMode, null);
|
||||
}
|
||||
|
||||
public bool ChangeAccount(string login, string password, string host)
|
||||
{
|
||||
var commandParameters = new ArrayList { login, password, host};
|
||||
return SendCommand<bool>(MtCommandType.ChangeAccount, commandParameters);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Common Function
|
||||
@@ -1727,9 +1733,9 @@ namespace MtApi
|
||||
///</summary>
|
||||
///<param name="symbolName">Symbol name.</param>
|
||||
///<param name="propId">Identifier of a symbol property. The value can be one of the values of the ENUM_SYMBOL_INFO_DOUBLE enumeration.</param>
|
||||
/// <returns>
|
||||
///<returns>
|
||||
/// The value of double type.
|
||||
/// </returns>
|
||||
///</returns>
|
||||
public double SymbolInfoDouble(string symbolName, EnumSymbolInfoDouble propId)
|
||||
{
|
||||
var response = SendRequest<SymbolInfoDoubleResponse>(new SymbolInfoDoubleRequest
|
||||
@@ -1745,9 +1751,9 @@ namespace MtApi
|
||||
///Returns the corresponding property of a specified symbol.
|
||||
///</summary>
|
||||
///<param name="symbol">Symbol name.</param>
|
||||
/// <returns>
|
||||
///<returns>
|
||||
/// MqlTick object, to which the current prices and time of the last price update will be placed.
|
||||
/// </returns>
|
||||
///</returns>
|
||||
public MqlTick SymbolInfoTick(string symbol)
|
||||
{
|
||||
var response = SendRequest<SymbolInfoTickResponse>(new SymbolInfoTickRequest
|
||||
@@ -1780,6 +1786,606 @@ namespace MtApi
|
||||
var commandParameters = new ArrayList { chartId };
|
||||
SendCommand<object>(MtCommandType.ChartRedraw, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Applies a specific template from a specified file to the chart.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID.</param>
|
||||
///<param name="filename">The name of the file containing the template.</param>
|
||||
///<returns>
|
||||
///Returns true if the command has been added to chart queue, otherwise false.
|
||||
///</returns>
|
||||
public bool ChartApplyTemplate(long chartId, string filename)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, filename };
|
||||
return SendCommand<bool>(MtCommandType.ChartApplyTemplate, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Saves current chart settings in a template with a specified name.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID.</param>
|
||||
///<param name="filename">The filename to save the template. The ".tpl" extension will be added to the filename automatically; there is no need to specify it. The template is saved in data_folder\templates\ and can be used for manual application in the terminal. If a template with the same filename already exists, the contents of this file will be overwritten.</param>
|
||||
///<returns>
|
||||
///Returns true if the command has been added to chart queue, otherwise false.
|
||||
///</returns>
|
||||
public bool ChartSaveTemplate(long chartId, string filename)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, filename };
|
||||
return SendCommand<bool>(MtCommandType.ChartSaveTemplate, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///The function returns the number of a subwindow where an indicator is drawn.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID.</param>
|
||||
///<param name="indicatorShortname">Short name of the indicator.</param>
|
||||
///<returns>
|
||||
///Subwindow number in case of success. In case of failure the function returns -1.
|
||||
///</returns>
|
||||
public int ChartWindowFind(long chartId, string indicatorShortname)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, indicatorShortname };
|
||||
return SendCommand<int>(MtCommandType.ChartWindowFind, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///The function returns the number of a subwindow where an indicator is drawn.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID.</param>
|
||||
///<param name="subWindow">The number of the chart subwindow. 0 means the main chart window.</param>
|
||||
///<param name="time">The time value on the chart, for which the value in pixels along the X axis will be received.</param>
|
||||
///<param name="price">The price value on the chart, for which the value in pixels along the Y axis will be received.</param>
|
||||
///<param name="x">The variable, into which the conversion of time to X will be received. The origin is in the upper left corner of the main chart window.</param>
|
||||
///<param name="y">The variable, into which the conversion of price to Y will be received. The origin is in the upper left corner of the main chart window.</param>
|
||||
///<returns>
|
||||
///Subwindow number in case of success. In case of failure the function returns -1.
|
||||
///</returns>
|
||||
public bool ChartTimePriceToXY(long chartId, int subWindow, DateTime? time, double price, out int x, out int y)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, subWindow, MtApiTimeConverter.ConvertToMtTime(time), price };
|
||||
var str = SendCommand<string>(MtCommandType.ChartTimePriceToXY, commandParameters);
|
||||
var res = false;
|
||||
x = 0;
|
||||
y = 0;
|
||||
if (!string.IsNullOrEmpty(str) && str.Contains(";"))
|
||||
{
|
||||
var values = str.Split(';');
|
||||
if (values.Length > 1)
|
||||
{
|
||||
int.TryParse(values[0], out x);
|
||||
int.TryParse(values[1], out y);
|
||||
res = true;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///The function returns the number of a subwindow where an indicator is drawn.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID.</param>
|
||||
///<param name="x">The variable, into which the conversion of time to X will be received. The origin is in the upper left corner of the main chart window.</param>
|
||||
///<param name="y">The variable, into which the conversion of price to Y will be received. The origin is in the upper left corner of the main chart window.</param>
|
||||
///<param name="subWindow">The number of the chart subwindow. 0 means the main chart window.</param>
|
||||
///<param name="time">The time value on the chart, for which the value in pixels along the X axis will be received.</param>
|
||||
///<param name="price">The price value on the chart, for which the value in pixels along the Y axis will be received.</param>
|
||||
///<returns>
|
||||
///Subwindow number in case of success. In case of failure the function returns -1.
|
||||
///</returns>
|
||||
public bool ChartXYToTimePrice(long chartId, int x, int y, out int subWindow, out DateTime? time, out double price)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, x, y };
|
||||
var str = SendCommand<string>(MtCommandType.ChartXYToTimePrice, commandParameters);
|
||||
var res = false;
|
||||
subWindow = 0;
|
||||
time = null;
|
||||
price = double.NaN;
|
||||
if (!string.IsNullOrEmpty(str) && str.Contains(";"))
|
||||
{
|
||||
var values = str.Split(';');
|
||||
if (values.Length > 2)
|
||||
{
|
||||
int.TryParse(values[0], out subWindow);
|
||||
int mt4Time;
|
||||
int.TryParse(values[1], out mt4Time);
|
||||
time = MtApiTimeConverter.ConvertFromMtTime(mt4Time);
|
||||
double.TryParse(values[2], out price);
|
||||
res = true;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Opens a new chart with the specified symbol and period.
|
||||
///</summary>
|
||||
///<param name="symbol">Chart symbol. NULL means the symbol of the current chart (the Expert Advisor is attached to).</param>
|
||||
///<param name="period"> Chart period (timeframe). Can be one of the ENUM_TIMEFRAMES values. 0 means the current chart period.</param>
|
||||
///<returns>
|
||||
///If successful, it returns the opened chart ID. Otherwise returns 0.
|
||||
///</returns>
|
||||
public long ChartOpen(string symbol, ENUM_TIMEFRAMES period)
|
||||
{
|
||||
var commandParameters = new ArrayList { symbol, (int)period };
|
||||
return SendCommand<long>(MtCommandType.ChartOpen, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the ID of the first chart of the client terminal.
|
||||
///</summary>
|
||||
public long ChartFirst()
|
||||
{
|
||||
return SendCommand<long>(MtCommandType.ChartFirst, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the chart ID of the chart next to the specified one.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 does not mean the current chart. 0 means "return the first chart ID".</param>
|
||||
///<returns>
|
||||
///Chart ID. If this is the end of the chart list, it returns -1.
|
||||
///</returns>
|
||||
public long ChartNext(long chartId)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId };
|
||||
return SendCommand<long>(MtCommandType.ChartNext, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Closes the specified chart.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<returns>
|
||||
///If successful, returns true, otherwise false.
|
||||
///</returns>
|
||||
public bool ChartClose(long chartId)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId };
|
||||
return SendCommand<bool>(MtCommandType.ChartClose, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the symbol name for the specified chart.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<returns>
|
||||
///If chart does not exist, the result will be an empty string.
|
||||
///</returns>
|
||||
public string ChartSymbol(long chartId)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId };
|
||||
return SendCommand<string>(MtCommandType.ChartSymbol, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the timeframe period of specified chart.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<returns>
|
||||
///The function returns one of the ENUM_TIMEFRAMES values. If chart does not exist, it returns 0.
|
||||
///</returns>
|
||||
public ENUM_TIMEFRAMES ChartPeriod(long chartId)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId };
|
||||
return (ENUM_TIMEFRAMES) SendCommand<int>(MtCommandType.ChartPeriod, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Sets a value for a corresponding property of the specified chart. Chart property should be of a double type.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="propId">Chart property ID. Can be one of the ENUM_CHART_PROPERTY_DOUBLE values (except the read-only properties).</param>
|
||||
///<param name="value">Property value.</param>
|
||||
///<returns>
|
||||
///Returns true if the command has been added to chart queue, otherwise false.
|
||||
///</returns>
|
||||
public bool ChartSetDouble(long chartId, EnumChartPropertyDouble propId, double value)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, (int)propId, value };
|
||||
return SendCommand<bool>(MtCommandType.ChartSetDouble, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Sets a value for a corresponding property of the specified chart. Chart property must be datetime, int, color, bool or char.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="propId">Chart property ID. It can be one of the ENUM_CHART_PROPERTY_INTEGER value (except the read-only properties).</param>
|
||||
///<param name="value">Property value.</param>
|
||||
///<returns>
|
||||
///Returns true if the command has been added to chart queue, otherwise false.
|
||||
///</returns>
|
||||
public bool ChartSetInteger(long chartId, EnumChartPropertyInteger propId, long value)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, (int)propId, value };
|
||||
return SendCommand<bool>(MtCommandType.ChartSetInteger, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Sets a value for a corresponding property of the specified chart. Chart property must be of the string type.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="propId">Chart property ID. Its value can be one of the ENUM_CHART_PROPERTY_STRING values (except the read-only properties).</param>
|
||||
///<param name="value">Property value string. String length cannot exceed 2045 characters (extra characters will be truncated).</param>
|
||||
///<returns>
|
||||
///Returns true if the command has been added to chart queue, otherwise false.
|
||||
///</returns>
|
||||
public bool ChartSetString(long chartId, EnumChartPropertyString propId, string value)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, (int)propId, value };
|
||||
return SendCommand<bool>(MtCommandType.ChartSetString, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Sets a value for a corresponding property of the specified chart. Chart property must be of the string type.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="propId">Chart property ID. This value can be one of the ENUM_CHART_PROPERTY_DOUBLE values.</param>
|
||||
///<param name="subWindow">Number of the chart subwindow. For the first case, the default value is 0 (main chart window). The most of the properties do not require a subwindow number.</param>
|
||||
///<returns>
|
||||
///The value of double type.
|
||||
///</returns>
|
||||
public double ChartGetDouble(long chartId, EnumChartPropertyDouble propId, int subWindow = 0)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, (int)propId, subWindow };
|
||||
return SendCommand<double>(MtCommandType.ChartGetDouble, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the value of a corresponding property of the specified chart. Chart property must be of datetime, int or bool type.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="propId">Chart property ID. This value can be one of the ENUM_CHART_PROPERTY_INTEGER values.</param>
|
||||
///<param name="subWindow">Number of the chart subwindow. For the first case, the default value is 0 (main chart window). The most of the properties do not require a subwindow number.</param>
|
||||
///<returns>
|
||||
///The value of long type.
|
||||
///</returns>
|
||||
public long ChartGetInteger(long chartId, EnumChartPropertyInteger propId, int subWindow = 0)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, (int)propId, subWindow };
|
||||
return SendCommand<long>(MtCommandType.ChartGetInteger, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the value of a corresponding property of the specified chart. Chart property must be of string type.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="propId">Chart property ID. This value can be one of the ENUM_CHART_PROPERTY_STRING values.</param>
|
||||
///<returns>
|
||||
///The value of string type.
|
||||
///</returns>
|
||||
public string ChartGetString(long chartId, EnumChartPropertyString propId)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, (int)propId };
|
||||
return SendCommand<string>(MtCommandType.ChartGetString, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Performs shift of the specified chart by the specified number of bars relative to the specified position in the chart.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="position">Chart position to perform a shift. Can be one of the ENUM_CHART_POSITION values.</param>
|
||||
///<param name="shift">Number of bars to shift the chart. Positive value means the right shift (to the end of chart), negative value means the left shift (to the beginning of chart). The zero shift can be used to navigate to the beginning or end of chart.</param>
|
||||
///<returns>
|
||||
///Returns true if successful, otherwise returns false.
|
||||
///</returns>
|
||||
public bool ChartNavigate(long chartId, int position, int shift = 0)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, position, shift };
|
||||
return SendCommand<bool>(MtCommandType.ChartNavigate, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Performs shift of the specified chart by the specified number of bars relative to the specified position in the chart.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="subWindow">Number of the chart subwindow. 0 denotes the main chart subwindow.</param>
|
||||
///<param name="indicatorShortname">The short name of the indicator which is set in the INDICATOR_SHORTNAME property with the IndicatorSetString() function. To get the short name of an indicator use the ChartIndicatorName() function.</param>
|
||||
///<returns>
|
||||
///Returns true if the command has been added to chart queue, otherwise false.
|
||||
///</returns>
|
||||
public bool ChartIndicatorDelete(long chartId, int subWindow, string indicatorShortname)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, subWindow, indicatorShortname };
|
||||
return SendCommand<bool>(MtCommandType.ChartIndicatorDelete, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the short name of the indicator by the number in the indicators list on the specified chart window.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="subWindow">Number of the chart subwindow. 0 denotes the main chart subwindow.</param>
|
||||
///<param name="index">the index of the indicator in the list of indicators. The numeration of indicators start with zero, i.e. the first indicator in the list has the 0 index. To obtain the number of indicators in the list use the ChartIndicatorsTotal() function.</param>
|
||||
///<returns>
|
||||
///The short name of the indicator which is set in the INDICATOR_SHORTNAME property with the IndicatorSetString() function.
|
||||
///</returns>
|
||||
public string ChartIndicatorName(long chartId, int subWindow, int index)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, subWindow, index };
|
||||
return SendCommand<string>(MtCommandType.ChartIndicatorName, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the number of all indicators applied to the specified chart window.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="subWindow">Number of the chart subwindow. 0 denotes the main chart subwindow.</param>
|
||||
///<returns>
|
||||
///The number of indicators in the specified chart window.
|
||||
///</returns>
|
||||
public int ChartIndicatorsTotal(long chartId, int subWindow)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, subWindow };
|
||||
return SendCommand<int>(MtCommandType.ChartIndicatorsTotal, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the number (index) of the chart subwindow the Expert Advisor or script has been dropped to. 0 means the main chart window.
|
||||
///</summary>
|
||||
public int ChartWindowOnDropped()
|
||||
{
|
||||
return SendCommand<int>(MtCommandType.ChartWindowOnDropped, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the price coordinate corresponding to the chart point the Expert Advisor or script has been dropped to.
|
||||
///</summary>
|
||||
public double ChartPriceOnDropped()
|
||||
{
|
||||
return SendCommand<double>(MtCommandType.ChartPriceOnDropped, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the time coordinate corresponding to the chart point the Expert Advisor or script has been dropped to.
|
||||
///</summary>
|
||||
public DateTime ChartTimeOnDropped()
|
||||
{
|
||||
var res = SendCommand<int>(MtCommandType.ChartTimeOnDropped, null);
|
||||
return MtApiTimeConverter.ConvertFromMtTime(res);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the X coordinate of the chart point the Expert Advisor or script has been dropped to.
|
||||
///</summary>
|
||||
public int ChartXOnDropped()
|
||||
{
|
||||
return SendCommand<int>(MtCommandType.ChartXOnDropped, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the Y coordinateof the chart point the Expert Advisor or script has been dropped to.
|
||||
///</summary>
|
||||
public int ChartYOnDropped()
|
||||
{
|
||||
return SendCommand<int>(MtCommandType.ChartYOnDropped, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Changes the symbol and period of the specified chart. The function is asynchronous, i.e. it sends the command and does not wait for its execution completion.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="symbol">Chart symbol. NULL value means the current chart symbol (Expert Advisor is attached to)</param>
|
||||
///<param name="period">Chart period (timeframe). Can be one of the ENUM_TIMEFRAMES values. 0 means the current chart period.</param>
|
||||
///<returns>
|
||||
///Returns true if the command has been added to chart queue, otherwise false.
|
||||
///</returns>
|
||||
public bool ChartSetSymbolPeriod(long chartId, string symbol, ENUM_TIMEFRAMES period)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, symbol, (int)period };
|
||||
return SendCommand<bool>(MtCommandType.ChartSetSymbolPeriod, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Saves current chart screen shot as a GIF, PNG or BMP file depending on specified extension.
|
||||
///</summary>
|
||||
///<param name="chartId">Chart ID. 0 means the current chart.</param>
|
||||
///<param name="filename">Screenshot file name. Cannot exceed 63 characters. Screenshot files are placed in the \Files directory.</param>
|
||||
///<param name="width">Screenshot width in pixels.</param>
|
||||
///<param name="height">Screenshot height in pixels.</param>
|
||||
///<param name="alignMode">Output mode of a narrow screenshot.</param>
|
||||
///<returns>
|
||||
///Returns true if the command has been added to chart queue, otherwise false.
|
||||
///</returns>
|
||||
public bool ChartScreenShot(long chartId, string filename, int width, int height, EnumAlignMode alignMode = EnumAlignMode.ALIGN_RIGHT)
|
||||
{
|
||||
var commandParameters = new ArrayList { chartId, filename, width, height, (int)alignMode };
|
||||
return SendCommand<bool>(MtCommandType.ChartScreenShot, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the amount of bars visible on the chart.
|
||||
///</summary>
|
||||
///<returns>
|
||||
///The amount of bars visible on the chart.
|
||||
///</returns>
|
||||
public int WindowBarsPerChart()
|
||||
{
|
||||
return SendCommand<int>(MtCommandType.WindowBarsPerChart, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the name of the executed Expert Advisor, script, custom indicator, or library.
|
||||
///</summary>
|
||||
///<returns>
|
||||
///The name of the executed Expert Advisor, script, custom indicator, or library, depending on the MQL4 program, from which this function has been called.
|
||||
///</returns>
|
||||
public string WindowExpertName()
|
||||
{
|
||||
return SendCommand<string>(MtCommandType.WindowExpertName, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the window index containing this specified indicator.
|
||||
///</summary>
|
||||
///<param name="name">Indicator short name.</param>
|
||||
///<returns>
|
||||
///If indicator with name was found, the function returns the window index containing this specified indicator, otherwise it returns -1.
|
||||
///</returns>
|
||||
public int WindowFind(string name)
|
||||
{
|
||||
var commandParameters = new ArrayList { name };
|
||||
return SendCommand<int>(MtCommandType.WindowFind, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns index of the first visible bar in the current chart window.
|
||||
///</summary>
|
||||
///<returns>
|
||||
///Index of the first visible bar number in the current chart window.
|
||||
///</returns>
|
||||
public int WindowFirstVisibleBar()
|
||||
{
|
||||
return SendCommand<int>(MtCommandType.WindowFirstVisibleBar, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the system handle of the chart window.
|
||||
///</summary>
|
||||
///<param name="symbol">Symbol.</param>
|
||||
///<param name="timeframe">Timeframe. It can be any of Timeframe enumeration values. 0 means the current chart timeframe.</param>
|
||||
///<returns>
|
||||
///Returns the system handle of the chart window. If the chart of symbol and timeframe has not been opened by the moment of function calling, 0 will be returned.
|
||||
///</returns>
|
||||
public int WindowHandle(string symbol, int timeframe)
|
||||
{
|
||||
var commandParameters = new ArrayList { symbol, timeframe };
|
||||
return SendCommand<int>(MtCommandType.WindowHandle, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the visibility flag of the chart subwindow.
|
||||
///</summary>
|
||||
///<param name="index">Subwindow index.</param>
|
||||
///<returns>
|
||||
///Returns true if the chart subwindow is visible, otherwise returns false. The chart subwindow can be hidden due to the visibility properties of the indicator placed in it.
|
||||
///</returns>
|
||||
public bool WindowIsVisible(int index)
|
||||
{
|
||||
var commandParameters = new ArrayList { index };
|
||||
return SendCommand<bool>(MtCommandType.WindowIsVisible, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the window index where Expert Advisor, custom indicator or script was dropped.
|
||||
///</summary>
|
||||
///<returns>
|
||||
///The window index where Expert Advisor, custom indicator or script was dropped. This value is valid if the Expert Advisor, custom indicator or script was dropped by mouse.
|
||||
///</returns>
|
||||
public int WindowOnDropped()
|
||||
{
|
||||
return SendCommand<int>(MtCommandType.WindowOnDropped, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the maximal value of the vertical scale of the specified subwindow of the current chart.
|
||||
///</summary>
|
||||
///<param name="index">Chart subwindow index (0 - main chart window).</param>
|
||||
///<returns>
|
||||
///The maximal value of the vertical scale of the specified subwindow of the current chart.
|
||||
///</returns>
|
||||
public int WindowPriceMax(int index = 0)
|
||||
{
|
||||
var commandParameters = new ArrayList { index };
|
||||
return SendCommand<int>(MtCommandType.WindowPriceMax, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the minimal value of the vertical scale of the specified subwindow of the current chart.
|
||||
///</summary>
|
||||
///<param name="index">Chart subwindow index (0 - main chart window).</param>
|
||||
///<returns>
|
||||
///The minimal value of the vertical scale of the specified subwindow of the current chart.
|
||||
///</returns>
|
||||
public int WindowPriceMin(int index = 0)
|
||||
{
|
||||
var commandParameters = new ArrayList { index };
|
||||
return SendCommand<int>(MtCommandType.WindowPriceMin, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the price of the chart point where Expert Advisor or script was dropped.
|
||||
///</summary>
|
||||
///<returns>
|
||||
///The price of the chart point where Expert Advisor or script was dropped. This value is only valid if the expert or script was dropped by mouse.
|
||||
///</returns>
|
||||
public double WindowPriceOnDropped()
|
||||
{
|
||||
return SendCommand<double>(MtCommandType.WindowPriceOnDropped, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Redraws the current chart forcedly.
|
||||
///</summary>
|
||||
///<returns>
|
||||
///Redraws the current chart forcedly. It is normally used after the objects properties have been changed.
|
||||
///</returns>
|
||||
public void WindowRedraw()
|
||||
{
|
||||
SendCommand<object>(MtCommandType.WindowRedraw, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Saves current chart screen shot as a GIF file.
|
||||
///</summary>
|
||||
///<param name="filename">Screen shot file name. Screenshot is saved to \Files folder.</param>
|
||||
///<param name="sizeX">Screen shot width in pixels.</param>
|
||||
///<param name="sizeY">Screen shot height in pixels.</param>
|
||||
///<param name="startBar">Index of the first visible bar in the screen shot. If 0 value is set, the current first visible bar will be shot. If no value or negative value has been set, the end-of-chart screen shot will be produced, indent being taken into consideration.</param>
|
||||
///<param name="chartScale">Horizontal chart scale for screen shot. Can be in the range from 0 to 5. If no value or negative value has been set, the current chart scale will be used.</param>
|
||||
///<param name="chartMode"> Chart displaying mode. It can take the following values: CHART_BAR (0 is a sequence of bars), CHART_CANDLE (1 is a sequence of candlesticks), CHART_LINE (2 is a close prices line). If no value or negative value has been set, the chart will be shown in its current mode.</param>
|
||||
///<returns>
|
||||
///Returns true if succeed, otherwise false.
|
||||
///</returns>
|
||||
public bool WindowScreenShot(string filename, int sizeX, int sizeY, int startBar = -1, int chartScale = -1, int chartMode = -1)
|
||||
{
|
||||
var commandParameters = new ArrayList { filename, sizeX, sizeY, startBar, chartScale, chartMode };
|
||||
return SendCommand<bool>(MtCommandType.WindowScreenShot, commandParameters);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the time of the chart point where Expert Advisor or script was dropped.
|
||||
///</summary>
|
||||
///<returns>
|
||||
///The time value of the chart point where expert or script was dropped. This value is only valid if the expert or script was dropped by mouse.
|
||||
///</returns>
|
||||
public DateTime WindowTimeOnDropped()
|
||||
{
|
||||
var res = SendCommand<int>(MtCommandType.WindowTimeOnDropped, null);
|
||||
return MtApiTimeConverter.ConvertFromMtTime(res);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns total number of indicator windows on the chart.
|
||||
///</summary>
|
||||
///<returns>
|
||||
///Total number of indicator windows on the chart (including main chart).
|
||||
///</returns>
|
||||
public int WindowsTotal()
|
||||
{
|
||||
return SendCommand<int>(MtCommandType.WindowsTotal, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the value at X axis in pixels for the chart window client area point at which the Expert Advisor or script was dropped.
|
||||
///</summary>
|
||||
///<returns>
|
||||
///The value at X axis in pixels for the chart window client area point at which the expert or script was dropped. The value will be true only if the expert or script were moved with the mouse ("Drag'n'Drop") technique.
|
||||
///</returns>
|
||||
public int WindowXOnDropped()
|
||||
{
|
||||
return SendCommand<int>(MtCommandType.WindowXOnDropped, null);
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///Returns the value at Y axis in pixels for the chart window client area point at which the Expert Advisor or script was dropped.
|
||||
///</summary>
|
||||
///<returns>
|
||||
///Returns the value at Y axis in pixels for the chart window client area point at which the Expert Advisor or script was dropped. The value will be true only if the expert or script were moved with the mouse ("Drag'n'Drop") technique.
|
||||
///</returns>
|
||||
public int WindowYOnDropped()
|
||||
{
|
||||
return SendCommand<int>(MtCommandType.WindowYOnDropped, null);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Object Functions
|
||||
|
||||
Executable → Regular
+51
-3
@@ -197,8 +197,6 @@
|
||||
SymbolName = 201,
|
||||
SymbolSelect = 202,
|
||||
SymbolInfoInteger = 203,
|
||||
ChartId = 206,
|
||||
ChartRedraw = 207,
|
||||
|
||||
//Object Functions
|
||||
ObjectCreate = 208,
|
||||
@@ -229,6 +227,56 @@
|
||||
ObjectSetText = 233,
|
||||
ObjectType = 234,
|
||||
|
||||
UnlockTicks = 235
|
||||
UnlockTicks = 235,
|
||||
|
||||
//Chart Operations
|
||||
ChartId = 206,
|
||||
ChartRedraw = 207,
|
||||
ChartApplyTemplate = 236,
|
||||
ChartSaveTemplate = 237,
|
||||
ChartWindowFind = 238,
|
||||
ChartTimePriceToXY = 239,
|
||||
ChartXYToTimePrice = 240,
|
||||
ChartOpen = 241,
|
||||
ChartFirst = 242,
|
||||
ChartNext = 243,
|
||||
ChartClose = 244,
|
||||
ChartSymbol = 245,
|
||||
ChartPeriod = 246,
|
||||
ChartSetDouble = 247,
|
||||
ChartSetInteger = 248,
|
||||
ChartSetString = 249,
|
||||
ChartGetDouble = 250,
|
||||
ChartGetInteger = 251,
|
||||
ChartGetString = 252,
|
||||
ChartNavigate = 253,
|
||||
ChartIndicatorDelete = 254,
|
||||
ChartIndicatorName = 255,
|
||||
ChartIndicatorsTotal = 256,
|
||||
ChartWindowOnDropped = 257,
|
||||
ChartPriceOnDropped = 258,
|
||||
ChartTimeOnDropped = 259,
|
||||
ChartXOnDropped = 260,
|
||||
ChartYOnDropped = 261,
|
||||
ChartSetSymbolPeriod = 262,
|
||||
ChartScreenShot = 263,
|
||||
WindowBarsPerChart = 264,
|
||||
WindowExpertName = 265,
|
||||
WindowFind = 266,
|
||||
WindowFirstVisibleBar = 267,
|
||||
WindowHandle = 268,
|
||||
WindowIsVisible = 269,
|
||||
WindowOnDropped = 270,
|
||||
WindowPriceMax = 271,
|
||||
WindowPriceMin = 272,
|
||||
WindowPriceOnDropped = 273,
|
||||
WindowRedraw = 274,
|
||||
WindowScreenShot = 275,
|
||||
WindowTimeOnDropped = 276,
|
||||
WindowsTotal = 277,
|
||||
WindowXOnDropped = 278,
|
||||
WindowYOnDropped = 279,
|
||||
|
||||
ChangeAccount = 280
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.36.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.36.0")]
|
||||
[assembly: AssemblyVersion("1.0.37.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.37.0")]
|
||||
+79
@@ -202,6 +202,13 @@
|
||||
this.button4 = new System.Windows.Forms.Button();
|
||||
this.tabPage11 = new System.Windows.Forms.TabPage();
|
||||
this.button69 = new System.Windows.Forms.Button();
|
||||
this.textBoxAccountLogin = new System.Windows.Forms.TextBox();
|
||||
this.textBoxAccountPassword = new System.Windows.Forms.TextBox();
|
||||
this.label31 = new System.Windows.Forms.Label();
|
||||
this.label32 = new System.Windows.Forms.Label();
|
||||
this.textBoxAccountHost = new System.Windows.Forms.TextBox();
|
||||
this.label33 = new System.Windows.Forms.Label();
|
||||
this.button70 = new System.Windows.Forms.Button();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.statusStrip1.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
@@ -1110,6 +1117,13 @@
|
||||
//
|
||||
// tabPage3
|
||||
//
|
||||
this.tabPage3.Controls.Add(this.button70);
|
||||
this.tabPage3.Controls.Add(this.label33);
|
||||
this.tabPage3.Controls.Add(this.label32);
|
||||
this.tabPage3.Controls.Add(this.label31);
|
||||
this.tabPage3.Controls.Add(this.textBoxAccountHost);
|
||||
this.tabPage3.Controls.Add(this.textBoxAccountPassword);
|
||||
this.tabPage3.Controls.Add(this.textBoxAccountLogin);
|
||||
this.tabPage3.Controls.Add(this.button67);
|
||||
this.tabPage3.Controls.Add(this.button66);
|
||||
this.tabPage3.Controls.Add(this.button65);
|
||||
@@ -2062,6 +2076,64 @@
|
||||
this.button69.UseVisualStyleBackColor = true;
|
||||
this.button69.Click += new System.EventHandler(this.button69_Click);
|
||||
//
|
||||
// textBoxAccountLogin
|
||||
//
|
||||
this.textBoxAccountLogin.Location = new System.Drawing.Point(232, 212);
|
||||
this.textBoxAccountLogin.Name = "textBoxAccountLogin";
|
||||
this.textBoxAccountLogin.Size = new System.Drawing.Size(238, 20);
|
||||
this.textBoxAccountLogin.TabIndex = 15;
|
||||
//
|
||||
// textBoxAccountPassword
|
||||
//
|
||||
this.textBoxAccountPassword.Location = new System.Drawing.Point(234, 238);
|
||||
this.textBoxAccountPassword.Name = "textBoxAccountPassword";
|
||||
this.textBoxAccountPassword.Size = new System.Drawing.Size(238, 20);
|
||||
this.textBoxAccountPassword.TabIndex = 16;
|
||||
//
|
||||
// label31
|
||||
//
|
||||
this.label31.AutoSize = true;
|
||||
this.label31.Location = new System.Drawing.Point(168, 214);
|
||||
this.label31.Name = "label31";
|
||||
this.label31.Size = new System.Drawing.Size(36, 13);
|
||||
this.label31.TabIndex = 17;
|
||||
this.label31.Text = "Login:";
|
||||
//
|
||||
// label32
|
||||
//
|
||||
this.label32.AutoSize = true;
|
||||
this.label32.Location = new System.Drawing.Point(168, 241);
|
||||
this.label32.Name = "label32";
|
||||
this.label32.Size = new System.Drawing.Size(56, 13);
|
||||
this.label32.TabIndex = 17;
|
||||
this.label32.Text = "Password:";
|
||||
//
|
||||
// textBoxAccountHost
|
||||
//
|
||||
this.textBoxAccountHost.Location = new System.Drawing.Point(234, 266);
|
||||
this.textBoxAccountHost.Name = "textBoxAccountHost";
|
||||
this.textBoxAccountHost.Size = new System.Drawing.Size(238, 20);
|
||||
this.textBoxAccountHost.TabIndex = 17;
|
||||
//
|
||||
// label33
|
||||
//
|
||||
this.label33.AutoSize = true;
|
||||
this.label33.Location = new System.Drawing.Point(168, 269);
|
||||
this.label33.Name = "label33";
|
||||
this.label33.Size = new System.Drawing.Size(66, 13);
|
||||
this.label33.TabIndex = 17;
|
||||
this.label33.Text = "MT4 Server:";
|
||||
//
|
||||
// button70
|
||||
//
|
||||
this.button70.Location = new System.Drawing.Point(371, 292);
|
||||
this.button70.Name = "button70";
|
||||
this.button70.Size = new System.Drawing.Size(97, 23);
|
||||
this.button70.TabIndex = 18;
|
||||
this.button70.Text = "ChangeAccount";
|
||||
this.button70.UseVisualStyleBackColor = true;
|
||||
this.button70.Click += new System.EventHandler(this.button70_Click);
|
||||
//
|
||||
// Form1
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
@@ -2287,6 +2359,13 @@
|
||||
private System.Windows.Forms.Button button68;
|
||||
private System.Windows.Forms.TabPage tabPage11;
|
||||
private System.Windows.Forms.Button button69;
|
||||
private System.Windows.Forms.Label label33;
|
||||
private System.Windows.Forms.Label label32;
|
||||
private System.Windows.Forms.Label label31;
|
||||
private System.Windows.Forms.TextBox textBoxAccountHost;
|
||||
private System.Windows.Forms.TextBox textBoxAccountPassword;
|
||||
private System.Windows.Forms.TextBox textBoxAccountLogin;
|
||||
private System.Windows.Forms.Button button70;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1424,5 +1424,34 @@ namespace TestApiClientUI
|
||||
{
|
||||
_apiClient.UnlockTicks();
|
||||
}
|
||||
|
||||
private async void button70_Click(object sender, EventArgs e)
|
||||
{
|
||||
var login = textBoxAccountLogin.Text;
|
||||
var password = textBoxAccountPassword.Text;
|
||||
var host = textBoxAccountHost.Text;
|
||||
|
||||
if (string.IsNullOrEmpty(login))
|
||||
{
|
||||
MessageBox.Show(@"Login is not defined!", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
textBoxAccountLogin.Focus();
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(password))
|
||||
{
|
||||
MessageBox.Show(@"Password is not defined!", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
textBoxAccountPassword.Focus();
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(host))
|
||||
{
|
||||
MessageBox.Show(@"Host is not defined!", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
textBoxAccountHost.Focus();
|
||||
return;
|
||||
}
|
||||
|
||||
var result = await Execute(() => _apiClient.ChangeAccount(login, password, host));
|
||||
PrintLog($"ChangeAccount result: {result}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,163 @@
|
||||
//+----------------------------------------------------------------------------+
|
||||
//| mql4-auth.mqh |
|
||||
//+----------------------------------------------------------------------------+
|
||||
//| Built by Sergey Lukin |
|
||||
//| contact@sergeylukin.com |
|
||||
//+----------------------------------------------------------------------------+
|
||||
|
||||
#include <WinUser32.mqh>
|
||||
|
||||
#import "user32.dll"
|
||||
int GetAncestor(int,int);
|
||||
int GetLastActivePopup(int);
|
||||
int GetDlgItem(int,int);
|
||||
int GetParent(int hWnd);
|
||||
#import
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
bool loginDialogIsOpen()
|
||||
{
|
||||
int hwnd=WindowHandle(Symbol(),Period());
|
||||
int hMetaTrader,hLoginDialog=0;
|
||||
|
||||
// Retrieve Terminal Window Handler
|
||||
while(!IsStopped())
|
||||
{
|
||||
hwnd=GetParent(hwnd);
|
||||
if(hwnd==0) break;
|
||||
hMetaTrader=hwnd;
|
||||
}
|
||||
|
||||
hLoginDialog=GetLastActivePopup(hMetaTrader);
|
||||
if(hLoginDialog!=0)
|
||||
{
|
||||
return(true);
|
||||
} else {
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
void closeLoginDialog()
|
||||
{
|
||||
int hwnd=WindowHandle(Symbol(),Period());
|
||||
int hMetaTrader,hLoginDialog=0,hCancelButton=0;
|
||||
|
||||
// Retrieve Terminal Window Handler
|
||||
while(!IsStopped())
|
||||
{
|
||||
hwnd=GetParent(hwnd);
|
||||
if(hwnd==0) break;
|
||||
hMetaTrader=hwnd;
|
||||
}
|
||||
|
||||
Sleep(60);
|
||||
|
||||
hLoginDialog=GetLastActivePopup(hMetaTrader);
|
||||
if(hLoginDialog!=0)
|
||||
{
|
||||
hCancelButton=GetDlgItem(hLoginDialog,0x2);
|
||||
if(hCancelButton!=0)
|
||||
{
|
||||
// Click "Cancel" button in Login Dialog
|
||||
PostMessageA(hCancelButton,0x00F5,0,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
bool auth(string login,string passwd,string server)
|
||||
{
|
||||
datetime s=TimeLocal();
|
||||
int h = 0, e = 0, a = GetAncestor(WindowHandle(Symbol(), NULL), 2);
|
||||
int i = 0;
|
||||
|
||||
PostMessageA(a,WM_COMMAND,35429,0);
|
||||
|
||||
while(e==0)
|
||||
{
|
||||
// Give us up to a minute to find the Login dialog
|
||||
if(TimeLocal()-s>60)
|
||||
{
|
||||
return(false);
|
||||
}
|
||||
|
||||
h=GetLastActivePopup(a);
|
||||
|
||||
// Select login field
|
||||
e=GetDlgItem(h,0x49d);
|
||||
|
||||
Sleep(1);
|
||||
}
|
||||
|
||||
// Press DELETE key many times in login field to remove current value
|
||||
for(i=1; i<=100; i++)
|
||||
{
|
||||
PostMessageA(e,WM_KEYDOWN,0x2E,1);
|
||||
}
|
||||
// Iterate over characters in "login" string and pass them to login field one by one
|
||||
char login_chars[];
|
||||
string2CharsArray(login,login_chars);
|
||||
for(i=0; i<ArraySize(login_chars); i++)
|
||||
{
|
||||
PostMessageA(e,WM_CHAR,login_chars[i],0);
|
||||
}
|
||||
|
||||
// Select password field
|
||||
e=GetDlgItem(h,0x4c4);
|
||||
// Press DELETE key many times in password field to remove current value
|
||||
for(i=1; i<=100; i++)
|
||||
{
|
||||
PostMessageA(e,WM_KEYDOWN,0x2E,1);
|
||||
}
|
||||
// Iterate over characters in "passwd" string and pass them to password field one by one
|
||||
char password_chars[];
|
||||
string2CharsArray(passwd,password_chars);
|
||||
for(i=0; i<ArraySize(password_chars); i++)
|
||||
{
|
||||
PostMessageA(e,WM_CHAR,password_chars[i],0);
|
||||
}
|
||||
|
||||
// Select server field
|
||||
e=GetDlgItem(h,0x50d);
|
||||
// Press DELETE key many times in server field to remove current value
|
||||
for(i=1; i<=100; i++)
|
||||
{
|
||||
PostMessageA(e,WM_KEYDOWN,0x2E,1);
|
||||
}
|
||||
// Iterate over characters in "server" string and pass them to server field one by one
|
||||
char server_chars[];
|
||||
string2CharsArray(server,server_chars);
|
||||
|
||||
for(i=0; i<ArraySize(server_chars); i++)
|
||||
{
|
||||
PostMessageA(e,WM_CHAR,server_chars[i],0);
|
||||
}
|
||||
Sleep(2*1000);
|
||||
// Press submit button
|
||||
e=GetDlgItem(h,0x1);
|
||||
SendMessageA(e,0x00F5,0,0);
|
||||
|
||||
return(true);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
/*
|
||||
* Iterates over string and puts each character code in array
|
||||
*/
|
||||
void string2CharsArray(string myString,char &chars[])
|
||||
{
|
||||
int cnt=StringLen(myString);
|
||||
ArrayResize(chars,cnt);
|
||||
|
||||
for(int i=0; i<cnt; i++)
|
||||
{
|
||||
chars[i]=StringGetChar(myString,i);
|
||||
}
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
||||
Reference in New Issue
Block a user