Positions.Close
Посылаем запрос на закрытие существующей открытой позиции.
int err = Positions.Close(int PositionId, int Volume, bool isAsync=false);
Входные параметры
Параметр | Тип | Описание |
positionId | int | Идентификатор позиции positionId |
Volume | double | Объем позиции, который мы хотим закрыть в лотах |
isAsync | bool | Асинхронный режим (включен или выключен). По умолчанию выключен(false) |
Возвращаемое значение
При isAsync = false (синхронный режим по умолчанию), возвращает код результата выполнения операции:
0 | Позиция успешно открыта |
При isAsync = true (асинхронный режим)
0 |
Запрос на открытие позиции успешно отправлен на сервер. Не означает, что эта позиция уже исполнена или обязательно будет исполнена. |
В случае, если произошла ошибка возвращает код ошибки, полученный на клиенте. Коды совпадают с кодами ошибки сервера. |
Пример:
//------------------------------------
// Закрываем все позиции на счете
//------------------------------------
private void CloseAllPos()
{
string line = "";
int err = 0;
line = line + "Positions Count = " + GetPositionCount().ToString() + Environment.NewLine;
if (GetPositionCount() > 0) {
for (var i = Positions.Count - 1; i >= 0; i--) {
Position pos = Positions.Find(Positions[i].PositionId);
if (pos != null) {
err = Positions.Close(pos.PositionId, pos.Volume);
if (err == 0) {
line = DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss:fff") + " Closed Success, PositionId = " + pos.PositionId.ToString() + " CurrentProfit:" + pos.Profit.ToString() + Environment.NewLine;
Print(mCommonLog, line);
} else {
line = DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss:fff") + " Closed Failed, ServerErrorCode = " + err.ToString() + Environment.NewLine;
Print(mCommonLog, line);
}
}
}
} else {
line = DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss:fff") + " Positions not found! ";
Print(mCommonLog, line);
}
}
//-------------------------------------------
// Считаем количество открытых позиций
//-------------------------------------------
private int GetPositionCount()
{
int poc = 0;
for (var i = Positions.Count - 1; i >= 0; i--) {
Position pos = Positions.Find(Positions[i].PositionId);
if (pos != null) {
if ((pos.PositionType == (int)PositionType.Buy || pos.PositionType == (int)PositionType.Sell)) {
poc++;
}
}
}
return(poc);
}