Запускаем робот по SRH0 и открываем торгуем в лонг по SRH0.
При запуске робота задать :
1) ТФ = 2-15 секунд.
2) StopPercent = значение стопа от учетной цены в процентах
3) Макс позицию лонг и шорт большую +1000 -1000 (чтоб робот мог много раза закрываться по стопу)
Если робот упрется в границы, то перестанет выставлять стоп.
Код: Выделить всё
function Initialize()
{
StrategyName = "ex_StopToPosition";
AddInput("Input1", Inputs.Candle, 1, true, "SRH0=ФОРТС");
AddParameter("StopPercent", 0, "Уровень стопа %", 0.3);
AddGlobalVariable("OldPos", Types.Int, 0);
LongLimit = 100;
ShortLimit = 100;
}
function OnUpdate()
{
// Пример выставления стопа к лонговой позиции
// Протестировано:
// 1. открытие лонга - выставление стопа
// 2. изменение лонга - перевыставление стопа
// 3. закрытие лонга руками - снятие стопа
// 4. срабатывание стопа - ждем изменение позиции по счету
var position = GetPosition();
//position.Price – учетная цена
//position.LongPosition – позиция Long (положительная величина)
//position.ShortPosition – позиция Short (положительная величина)
//position.Position – позиция по инструменту (положительная – позиция long, отрицательная – short)
int pos = (int) CurrentPosition();
// Если робот наберет предельную позицию, то его надо перезапустить
if (pos >= MaxLongAllowed())
ShowMessage("Достигли максима позиции - перезапустите робота!!!");
// Если есть позиция и она изменилась, то перевыставить стоп
if ( position.LongPosition > 0 && position.Price > 0 && OldPos != position.LongPosition)
{
EnterShortStop(position.Price*(1.0-0.01*StopPercent), position.LongPosition);
}
// Если сработал стоп или позицию закрыли руками, то снимаем завки
if (position.LongPosition == 0)
{
CancelActiveOrders(false);
}
OldPos = (int)position.LongPosition;
}