Positions.Modify
Посылаем запрос на изменение открытой позиции.
Есть два варианта вызова метода:
int Positions.Modify(positionId, takeProfit, stopLoss, isJustCheck = false, isAsync = false)
Входные параметры
Параметры | Тип | Описание |
positionId | int | Уникальный идентификатор позиции |
takeProfit | double | Тейк профит. Уровень цены в котируемой валюте для фиксации прибыли. |
stopLoss | double | Стоп лосс. Уровень цены в котируемой валюте для фиксации убытков. |
isJustCheck | bool | Режим проверки (включен или выключен). При включенном режиме запрос на открытие позиции не отправляется, а только проверяется возможность открытия с такими параметрами. По умолчанию выключен = false |
isAsync | bool | Асинхронный режим (включен или выключен). По умолчанию выключен = false |
int Positions.Modify(ref position, isJustCheck = false, isAsync = false)
Входные параметры
Параметр | Тип | Описание |
operation | Объект, который содержит все параметры операции для изменения отложенного ордера | |
isJustCheck | bool | Режим проверки (включен или выключен). При включенном режиме запрос на изменение отложенного ордера не отправляется, а только проверяется возможность изменения с такими параметрами. По умолчанию выключен = false |
isAsync | bool | Асинхронный режим (включен или выключен). По умолчанию выключен = false |
Возвращаемое значение
При isJustCheck = true, возвращает код результата выполнения операции:
0 | Проверка на возможность изменения позиции прошла успешно. Проверка происходит на стороне клиента |
-1 | Проверка не прошла |
При isAsync = false (синхронный режим по умолчанию), возвращает код результата выполнения операции:
0 | Позиция успешно открыта |
При isAsync = true (асинхронный режим)
0 | Запрос на открытие позиции успешно отправлен на сервер. Не означает, что эта позиция уже исполнена или обязательно будет исполнена. |
В случае, если произошла ошибка возвращает код ошибки, полученный на клиенте. Коды совпадают с кодами ошибки сервера. |
Пример:
//-----------------------------------------------------------
// Модифицируем стоплосс и тейкпрофит у позиции
//-----------------------------------------------------------
private void ModifyPosition(int positionId)
{
string line = "ModifyPosition: " + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss:fff");
Position pos = Positions.Find(positionId);
if (pos != null) {
double takeProfit = Math.Round(pos.OpenPrice + 4000 / Math.Pow(10, Symbol.Digits), Symbol.Digits);
double stopLoss = Math.Round(pos.OpenPrice - 4000 / Math.Pow(10, Symbol.Digits), Symbol.Digits);
int err = Positions.Modify(pos.PositionId, takeProfit, stopLoss);
if (err == 0) {
line = line + Environment.NewLine +
" Symbol = " + Symbol.SymbolName + Environment.NewLine +
" Commission = " + pos.Commission.ToString() + Environment.NewLine +
" Margin = " + pos.Margin.ToString() + Environment.NewLine +
" OpenDate = " + pos.OpenDate.ToString("dd.MM.yyyy HH:mm:ss:fff") + Environment.NewLine +
" OpenPrice = " + pos.OpenPrice.ToString() + Environment.NewLine +
" Label = " + pos.Label + Environment.NewLine +
" TakeProfit = " + takeProfit.ToString() + Environment.NewLine +
" StopLoss = " + stopLoss.ToString() + Environment.NewLine +
" Swap = " + pos.Swap.ToString() + Environment.NewLine +
" PositionId = " + pos.PositionId.ToString() + Environment.NewLine +
" PositionType = " + pos.PositionType.ToString() + Environment.NewLine +
" Profit = " + pos.Profit.ToString() + Environment.NewLine;
} else {
line = line + " Failed, ServerErrorCode = " + err.ToString() + Environment.NewLine;
}
} else {
line = line + " Position not found " + Environment.NewLine;
}
using (StreamWriter sw = new StreamWriter(mOnTickLog, true))
sw.WriteLine(line);
}