diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/MTApiService/Properties/AssemblyInfo.cs b/MTApiService/Properties/AssemblyInfo.cs index 1e3abce3..0b96c155 100755 --- a/MTApiService/Properties/AssemblyInfo.cs +++ b/MTApiService/Properties/AssemblyInfo.cs @@ -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.17.0")] -[assembly: AssemblyFileVersion("1.0.17.0")] +[assembly: AssemblyVersion("1.0.18.0")] +[assembly: AssemblyFileVersion("1.0.18.0")] diff --git a/MtApi/MtApiClient.cs b/MtApi/MtApiClient.cs index 7a69bb9e..2c3576e0 100755 --- a/MtApi/MtApiClient.cs +++ b/MtApi/MtApiClient.cs @@ -132,6 +132,30 @@ namespace MtApi return 0; } + public int OrderSendBuy(string symbol, double volume, int slippage) + { + var commandParameters = new ArrayList { symbol, volume, slippage}; + return sendCommand(MtCommandType.OrderSendBuy, commandParameters); + } + + public int OrderSendSell(string symbol, double volume, int slippage) + { + var commandParameters = new ArrayList { symbol, volume, slippage }; + return sendCommand(MtCommandType.OrderSendSell, commandParameters); + } + + public int OrderSendBuy(string symbol, double volume, int slippage, double stoploss, double takeprofit) + { + var commandParameters = new ArrayList { symbol, volume, slippage, stoploss, takeprofit }; + return sendCommand(MtCommandType.OrderSendBuyStoplossProfit, commandParameters); + } + + public int OrderSendSell(string symbol, double volume, int slippage, double stoploss, double takeprofit) + { + var commandParameters = new ArrayList { symbol, volume, slippage, stoploss, takeprofit }; + return sendCommand(MtCommandType.OrderSendSellStoplossProfit, commandParameters); + } + public bool OrderClose(int ticket, double lots, double price, int slippage, Color color) { var commandParameters = new ArrayList { ticket, lots, price, slippage, MtApiColorConverter.ConvertToMtColor(color) }; diff --git a/MtApi/MtCommandType.cs b/MtApi/MtCommandType.cs index bbd09c59..6e46c9cc 100755 --- a/MtApi/MtCommandType.cs +++ b/MtApi/MtCommandType.cs @@ -11,6 +11,10 @@ namespace MtApi //trade operations OrderSend = 1, + OrderSendBuy = 1001, + OrderSendSell = 1002, + OrderSendBuyStoplossProfit = 10011, + OrderSendSellStoplossProfit = 10012, OrderClose = 2, OrderCloseBy = 3, OrderClosePrice = 4, diff --git a/MtApi/Properties/AssemblyInfo.cs b/MtApi/Properties/AssemblyInfo.cs index 2f638038..1a7a53e4 100755 --- a/MtApi/Properties/AssemblyInfo.cs +++ b/MtApi/Properties/AssemblyInfo.cs @@ -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.19.0")] -[assembly: AssemblyFileVersion("1.0.19.0")] +[assembly: AssemblyVersion("1.0.20.0")] +[assembly: AssemblyFileVersion("1.0.20.0")] diff --git a/MtApiInstaller/Product.wxs b/MtApiInstaller/Product.wxs index 729f87cf..50b460ea 100755 --- a/MtApiInstaller/Product.wxs +++ b/MtApiInstaller/Product.wxs @@ -1,7 +1,7 @@ - + diff --git a/mq4/MtApi.ex4 b/mq4/MtApi.ex4 index 9e896a83..12b30c72 100755 Binary files a/mq4/MtApi.ex4 and b/mq4/MtApi.ex4 differ diff --git a/mq4/MtApi.mq4 b/mq4/MtApi.mq4 index 6d4d5389..8143b149 100755 --- a/mq4/MtApi.mq4 +++ b/mq4/MtApi.mq4 @@ -304,6 +304,130 @@ int executeCommand() } break; + + case 1001: // OrderSendBuy + if (!getStringValue(ExpertHandle, 0, symbolValue)) + { + PrintParamError("symbol"); + } + + if (!getDoubleValue(ExpertHandle, 1, volumeValue)) + { + PrintParamError("volume"); + } + + if (!getIntValue(ExpertHandle, 2, slippageValue)) + { + PrintParamError("slippage"); + } + + priceValue = MarketInfo(symbolValue, MODE_ASK); + + if (!sendIntResponse(ExpertHandle, OrderSend(symbolValue, OP_BUY, volumeValue, priceValue + , slippageValue, 0, 0))) + { + PrintResponseError("OrderSend"); + } + + break; + + case 1002: // OrderSendSell + if (!getStringValue(ExpertHandle, 0, symbolValue)) + { + PrintParamError("symbol"); + } + + if (!getDoubleValue(ExpertHandle, 1, volumeValue)) + { + PrintParamError("volume"); + } + + if (!getIntValue(ExpertHandle, 2, slippageValue)) + { + PrintParamError("slippage"); + } + + priceValue = MarketInfo(symbolValue, MODE_BID); + + if (!sendIntResponse(ExpertHandle, OrderSend(symbolValue, OP_SELL, volumeValue, priceValue + , slippageValue, 0, 0))) + { + PrintResponseError("OrderSend"); + } + + break; + + case 10011: // OrderSendBuy (stoploss and profit) + if (!getStringValue(ExpertHandle, 0, symbolValue)) + { + PrintParamError("symbol"); + } + + if (!getDoubleValue(ExpertHandle, 1, volumeValue)) + { + PrintParamError("volume"); + } + + if (!getIntValue(ExpertHandle, 2, slippageValue)) + { + PrintParamError("slippage"); + } + + if (!getDoubleValue(ExpertHandle, 3, stoplossValue)) + { + PrintParamError("stoploss"); + } + + if (!getDoubleValue(ExpertHandle, 4, takeprofitValue)) + { + PrintParamError("takeprofit"); + } + + priceValue = MarketInfo(symbolValue, MODE_ASK); + + if (!sendIntResponse(ExpertHandle, OrderSend(symbolValue, OP_BUY, volumeValue, priceValue + , slippageValue, stoplossValue, takeprofitValue))) + { + PrintResponseError("OrderSend"); + } + + break; + + case 10012: // OrderSendSell (stoploss and profit) + if (!getStringValue(ExpertHandle, 0, symbolValue)) + { + PrintParamError("symbol"); + } + + if (!getDoubleValue(ExpertHandle, 1, volumeValue)) + { + PrintParamError("volume"); + } + + if (!getIntValue(ExpertHandle, 2, slippageValue)) + { + PrintParamError("slippage"); + } + + if (!getDoubleValue(ExpertHandle, 3, stoplossValue)) + { + PrintParamError("stoploss"); + } + + if (!getDoubleValue(ExpertHandle, 4, takeprofitValue)) + { + PrintParamError("takeprofit"); + } + + priceValue = MarketInfo(symbolValue, MODE_BID); + + if (!sendIntResponse(ExpertHandle, OrderSend(symbolValue, OP_SELL, volumeValue, priceValue + , slippageValue, stoplossValue, takeprofitValue))) + { + PrintResponseError("OrderSend"); + } + + break; case 2: // OrderClose if (!getIntValue(ExpertHandle, 0, ticketValue))