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

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