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

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

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

Непрочитанное сообщение 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

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


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

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

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