Стратегии и роботы > Выставление стопа к позиции роботом

Обсуждение, описание стратегий и роботов, идеи для стратегий
oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 12 раз
Поблагодарили: 66 раз

Выставление стопа к позиции роботом

Непрочитанное сообщение oxi » 07 фев 2020, 17:22

Робот, который выставляет стоп к открытой позиции лонг по инструменту (для шорта надо дописать аналогично)
Запускаем робот по 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;
}

az-ko
Сообщения: 1
Зарегистрирован: 21 фев 2020, 13:04
Поблагодарили: 1 раз

Re: Выставление стопа к позиции роботом

Непрочитанное сообщение az-ko » 25 фев 2020, 16:31

Хочется развития данного направления.
Авто стоп шорт/лонг к позиции открываемой вручную работает, спасибо за эту автоматизацию.
А еще хочется авто трейлинг стоп. Или авто тейк
Мои попытки решить этот вопрос пока не успешны.

function Initialize()
{
StrategyName = "1-авто стоп";
AddInput("Input1", Inputs.Candle, 1, true, "SRH0=ФОРТС");
AddParameter("StopPercent", 0.1, "Стоп лосс, %", 0.3);
AddParameter("Take", 0.2, "Тейк, %", 0.3);
AddGlobalVariable("OldPosLong", Types.Int, 0);
AddGlobalVariable("OldPosShort", Types.Int, 0);
LongLimit = 1000;
ShortLimit = -1000;
}

function OnUpdate()
{


var position = GetPosition();
var profit = CurrentPLper();
//position.Price – учетная цена
//position.LongPosition – позиция Long (положительная величина)
//position.ShortPosition – позиция Short (положительная величина)
//position.Position – позиция по инструменту (положительная – позиция long, отрицательная – short)

int pos = (int) CurrentPosition();
// Если робот наберет предельную позицию, то его надо перезапустить
if (pos >= MaxLongAllowed())
ShowMessage("Достигли максима позиции - перезапустите робота!!!");

// Если есть позиция лонг то перевыставить стоп
if ( position.LongPosition != 0)
{
EnterShortStop(position.Price*(1.0-0.01*StopPercent), position.LongPosition);
//TrailingStopLoss(0,15, SignalPriceType.DeltaFromAveragePrice) не работает
//BreakingStop(0.5, 2.0, SignalPriceType.DeltaFromAveragePrice) не работает

}
// Если есть позиция шорт
if ( position.ShortPosition != 0)
{
EnterLongStop(position.Price*(1.0+0.01*StopPercent), position.ShortPosition);
}
// Если доход по поз болше чем Тейк, закрываем позицию (не работает вроде бы...)
if ( profit > Take)
{
ClosePosition();
CancelActiveOrders(false);
}


}

vdm
Сообщения: 24
Зарегистрирован: 25 ноя 2016, 14:01
Благодарил (а): 10 раз
Поблагодарили: 2 раза

Re: Выставление стопа к позиции роботом

Непрочитанное сообщение vdm » 26 фев 2020, 08:59

az-ko писал(а):Хочется развития данного направления.
Авто стоп шорт/лонг к позиции открываемой вручную работает, спасибо за эту автоматизацию.
А еще хочется авто трейлинг стоп. Или авто тейк
Мои попытки решить этот вопрос пока не успешны.

//TrailingStopLoss(0,15, SignalPriceType.DeltaFromAveragePrice) не работает
//BreakingStop(0.5, 2.0, SignalPriceType.DeltaFromAveragePrice) не работает

// Если доход по поз болше чем Тейк, закрываем позицию (не работает вроде бы...)
if ( profit > Take)
{
ClosePosition();
CancelActiveOrders(false);
}


}

TrailingStopLoss и BreakingStop будут работать только если позиция открыта самим роботом (или вы явно указали ему позицию при создании робота)
Те же проблемы у вас , скорее всего , и с прибылью , если вы ее считаете через CurrentPL()

Вообще в скриптовом движке для роботов у альфы прошито куча ограничений. Шаг в право или влево от базовой логики и вы сразу в них упретесь . Они видно хотели сделать софт для домохозяек , но домохозяики таки не пришли , а проблемы простым разработчикам они создали серьезные.А EnterShortStop - это просто костыль , который позволяет несколько расширить функционал и выити за рамки базовой логики. До EnterShortStopTrailing и EnterShortStopBreaking пока видно еще не добрались , как и до возможности одновременно иметь заявки разной направленности количеством более 1 , полноценного доступа к стакану (а не тоько к лучшей цене), доступа к разным инструментам и тайфреймам , срабатыванию скрипта на события ресайза в стакане и еще многого другого.

den11112
Сообщения: 1
Зарегистрирован: 20 окт 2020, 12:18

Re: Выставление стопа к позиции роботом

Непрочитанное сообщение den11112 » 20 окт 2020, 12:36

Так же хотелось спросить на счет робота который будет автоматически подтаскивать стоп лосс (по пунктам) и по шортам и по лонгу?

Stanislav
Сообщения: 5
Зарегистрирован: 16 янв 2021, 18:00

Re: Выставление стопа к позиции роботом

Непрочитанное сообщение Stanislav » 21 фев 2021, 08:11

попробовал поставить стоплосс на уровне 1% но робот зарывает сделку и тут же открывает новую т.к. по стратегии сигнал на открытие позиции есть.
Что не так?
Вообще хочу стоплосс поставить на уровне цены открытия но он тогда на каждой свече открывает и закрывает

Volant
Сообщения: 2
Зарегистрирован: 23 мар 2021, 13:53
Благодарил (а): 2 раза

Re: Выставление стопа к позиции роботом

Непрочитанное сообщение Volant » 23 мар 2021, 14:03

oxi писал(а):Робот, который выставляет стоп к открытой позиции лонг по инструменту (для шорта надо дописать аналогично)
Запускаем робот по 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;
}


Добрый день. Скажите, а можно выставить стопсигнал, при наличии активной заявки, будь-то ручной или автоматической, от цены закрытия бара? Благодарю.

Volant
Сообщения: 2
Зарегистрирован: 23 мар 2021, 13:53
Благодарил (а): 2 раза

Re: Выставление стопа к позиции роботом

Непрочитанное сообщение Volant » 22 май 2022, 17:36

Добрый день. Скажите, а можно выставить стоп сигнал на покупку инструмента после закрытия бара, скажем со смещением плюс 100 пунктов. Активной позиции пока нет. Или нужно использовать другой тип заявки. Можно ли это как-то реализовать с помощью конструктора в альфе. Благодарю.


Вернуться в «Стратегии и роботы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей