Issue #107: Added function PositionCloseAll

This commit is contained in:
vdemydiuk
2018-06-06 14:24:39 +03:00
parent 897892dc89
commit 0c38d37559
6 changed files with 47 additions and 5 deletions
+2 -1
View File
@@ -250,6 +250,7 @@ namespace MtApi5
GlobalVariablesDeleteAll = 157,
GlobalVariablesTotal = 158,
UnlockTicks = 159
UnlockTicks = 159,
PositionCloseAll = 160
}
}
+9
View File
@@ -521,11 +521,20 @@ namespace MtApi5
///<summary>
///Close all open positions.
///</summary>
[Obsolete("OrderCloseAll is deprecated, please use PositionCloseAll instead.")]
public bool OrderCloseAll()
{
return SendCommand<bool>(Mt5CommandType.OrderCloseAll, null);
}
///<summary>
///Close all open positions. Returns count of closed positions.
///</summary>
public int PositionCloseAll()
{
return SendCommand<int>(Mt5CommandType.PositionCloseAll, null);
}
///<summary>
///Closes a position with the specified ticket.
///</summary>
@@ -486,6 +486,7 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Grid.Row="0" Command="{Binding PositionOpenCommand}" Content="PositionOpen" Margin="2" HorizontalAlignment="Left"/>
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="4">
@@ -493,6 +494,7 @@
<TextBox Text="{Binding PositionTicketValue}" Width="150" Margin="2"/>
<Button Command="{Binding PositionCloseCommand}" Content="PositionClose" Margin="2"/>
</StackPanel>
<Button Grid.Row="2" Command="{Binding PositionCloseAllCommand}" Content="PositionCloseAll" Margin="2" HorizontalAlignment="Left"/>
</Grid>
</TabItem>
@@ -67,6 +67,7 @@ namespace MtApi5TestClient
public DelegateCommand PositionOpenCommand { get; private set; }
public DelegateCommand PositionCloseCommand { get; private set; }
public DelegateCommand PositionCloseAllCommand { get; private set; }
public DelegateCommand GetLastErrorCommand { get; private set; }
public DelegateCommand ResetLastErrorCommand { get; private set; }
@@ -375,6 +376,7 @@ namespace MtApi5TestClient
PositionOpenCommand = new DelegateCommand(ExecutePositionOpen);
PositionCloseCommand = new DelegateCommand(ExecutePositionClose);
PositionCloseAllCommand = new DelegateCommand(ExecutePositionCloseAll);
PrintCommand = new DelegateCommand(ExecutePrint);
AlertCommand = new DelegateCommand(ExecuteAlert);
@@ -1126,6 +1128,12 @@ namespace MtApi5TestClient
AddLog($"PositionClose: ticket {ticket} retVal = {retVal}, result = {tradeResult}");
}
private async void ExecutePositionCloseAll(object obj)
{
var retVal = await Execute(() => _mtApiClient.PositionCloseAll());
AddLog($"PositionCloseAll: count = {retVal}");
}
private async void ExecutePrint(object obj)
{
var message = MessageText;
BIN
View File
Binary file not shown.
+26 -4
View File
@@ -791,6 +791,9 @@ int executeCommand()
case 159: //UnlockTiks
Execute_UnlockTicks();
break;
case 160: //PositionCloseAll
Execute_PositionCloseAll();
break;
case 204: //TerminalInfoInteger
Execute_TerminalInfoInteger();
break;
@@ -6527,6 +6530,17 @@ void Execute_UnlockTicks()
}
}
void Execute_PositionCloseAll()
{
int res = PositionCloseAll();
#ifdef __DEBUG_LOG__
PrintFormat("%s: result = %d", __FUNCTION__, res);
#endif
SEND_INT_RESPONSE(res)
}
void Execute_TerminalInfoInteger()
{
int propertyId;
@@ -6714,6 +6728,18 @@ bool OrderCloseAll()
return true;
}
int PositionCloseAll()
{
CTrade trade;
int total = PositionsTotal();
int i = total -1;
while (i >= 0)
{
if (trade.PositionClose(PositionGetSymbol(i))) i--;
}
return total;
}
//------------ Requests -------------------------------------------------------
string OnRequest(string json)
@@ -7408,10 +7434,6 @@ private:
void SendMtEvent(MtEventTypes eventType, MtEvent* mtEvent)
{
#ifdef __DEBUG_LOG__
PrintFormat("%s: eventType = %d", __FUNCTION__, eventType);
#endif
JSONObject* json = mtEvent.CreateJson();
if (sendEvent(ExpertHandle, (int)eventType, json.toString(), _error))
{