search Ничего не найдено
Главная Документация по алготрейдингу Торговые операции Позиции

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);
}