Страница 1 из 3

Покупка/продажа лимитными приказами по определённой цене.

Добавлено: 31 янв 2022, 18:20
Anik
Здравствуйте.
Подскажите, а есть ли готовый робот на покупку/продажу лимитными приказами по определённой цене?
Пример: акции SBER - покупка по 253 - продажа по 258 - если продалось, то автоматически выставляется тот же самый приказ на тоже самое кол-во акций.
Вроде бы простой алгоритм, но в библиотеке не нашёл его реализацию. Если такого готового робота нет, то есть ли возможность написать?
Алгоритмы в стиле invest_grid и step by step смотрел, изучил, по-тестил - не совсем то что хочется.

Re: Покупка/продажа лимитными приказами по определённой цене.

Добавлено: 31 янв 2022, 21:35
evge
Приветствую!

Упрощенно, вход сразу в позицию т.к. цена была ниже с точки отсчета (500 баров тестирования).
Но можно и это учесть.

SimpleTrade-01.png
SimpleTrade-01.png (26.59 КБ) 17723 просмотра

Код: Выделить всё

function Initialize()
{
   StrategyName = "SimpleTrade";
   AddParameter("BuyPrice", 253, "", 1);
   AddParameter("SellPrice", 258, "", 1);
   AddParameter("Lot", 1000, "", 1);
   AddInput("Input1", Inputs.Candle, 5, true, "SBER=МБ ЦК");
   LongLimit = 1000;
   ShortLimit = -1000;
   AddGlobalVariable("NeedClose", Types.Boolean, false);
}

function OnUpdate()
{
   //evge 31.01.2022 https://alfadirect4.ru
   
   var CP = CurrentPosition();
   
   if (CP != 0 && NeedClose) { CloseLongLimit(SellPrice, Lot); NeedClose = false; }
   if (CP == 0 && !NeedClose) { EnterLongLimit(BuyPrice, Lot); NeedClose = true; }
   
}

Re: Покупка/продажа лимитными приказами по определённой цене.

Добавлено: 06 янв 2023, 17:00
A.M.
Добрый день!

Вопрос.
1.сразу две, или более (4-10- 100 заявок) лимитных можно выставить?
2.при следующей итерации удалить все неисполненные?
3.после пересчета позиции перевыставить несколько лимитных (неограниченное количество)?

Спасибо.

Re: Покупка/продажа лимитными приказами по определённой цене.

Добавлено: 07 янв 2023, 18:34
_E_V_N_
К сожалению одним роботом нельзя. Можно запустить несколько роботов (по числу необходимых заявок).

Re: Покупка/продажа лимитными приказами по определённой цене.

Добавлено: 08 янв 2023, 09:51
A.M.
Понятно. Идея была выставить сразу лимитную пару сверху и снизу. На инструментах с низкой ликвидностью мой "боевой" робот пропускает шпильки или исполняет в рынок по невыгодной цене.
С двумя роботами возникнет проблема значения текущей позиции, у каждого будет своя, как я понимаю?

Re: Покупка/продажа лимитными приказами по определённой цене.

Добавлено: 08 янв 2023, 13:26
_E_V_N_
" Идея была выставить сразу лимитную пару сверху и снизу. На инструментах с низкой ликвидностью мой "боевой" робот пропускает шпильки или исполняет в рынок по невыгодной цене.
С двумя роботами возникнет проблема значения текущей позиции, у каждого будет своя, как я понимаю?"
Если выставить лимитку, то сделка произойдет при достижении указанной цены, а не по лучшей.
В рынок исполнится заявка если робот выставил маркет, а не лимит.
Робот выставляет заявку на первом тике следующей свечи, что бы не пропускать "шпильки" нужно предусмотреть условие, что бы выставить заявку заранее.
Выставить лимитную пару сверху и снизу система точно не позволит, единственный вариант, это выставить лимитку и стоп. Лимитку и стоп одновременно можно.
Проблемы текущей позиции нет, она надуманная. Если в роботах вы лимит покупки будете выставлять одинаковый, то общий баланс у вас по счету будет нормальный, даже если один робот будет вам показывать Шорт реально шорта по счету не будет за счет покупок другого робота. Там единственная проблема в выставлении лимитных заявок, от какой базовой цены их выставлять.

Re: Покупка/продажа лимитными приказами по определённой цене.

Добавлено: 08 янв 2023, 18:57
A.M.
"Выставить лимитную пару сверху и снизу система точно не позволит, единственный вариант, это выставить лимитку и стоп. Лимитку и стоп одновременно можно."

Пример. Цена сейчас ~100. Учитывая текущую позицию, согласен продать по 101, 102 и т.д., или купить по 99, 98, 97... В роботе реализуем приказ:

CloseLongLimit(101, Lot);

EnterLongLimit(99, Lot);

И данная простая схема не работает? Даже не спрашиваю, проверял. Не работает. ПОЧЕМУ?

Как это будет выглядеть через "выставить лимитку и стоп"?

Про два робота думаю. На тесте не проверить.

Re: Покупка/продажа лимитными приказами по определённой цене.

Добавлено: 09 янв 2023, 13:22
_E_V_N_
"Пример. Цена сейчас ~100. Учитывая текущую позицию, согласен продать по 101, 102 и т.д., или купить по 99, 98, 97... В роботе реализуем приказ:

CloseLongLimit(101, Lot);

EnterLongLimit(99, Lot);

И данная простая схема не работает? Даже не спрашиваю, проверял. Не работает. ПОЧЕМУ?"
Конечно данная схема работать не будет, потому как если у вас нет позиции в роботе, то CloseLongLimit(101, Lot); не сработает, потому как по команде нечего закрывать. Или у вас все же есть позиция купленная за 100?
В вашем варианте правильнее будет
CloseShortLimit(101, Lot);
EnterLongLimit(99, Lot);

"Про два робота думаю. На тесте не проверить."
А почему вам вообще то StepByStep не подходит? по тому принципу что вы описываете он и работает, что конкретно в нем вас не устраивает? Если нужны заранее выставленные лимитки его нужно чуть модернизировать и всего дел.

Re: Покупка/продажа лимитными приказами по определённой цене.

Добавлено: 09 янв 2023, 22:15
A.M.
StepByStep - наверное подходит. Кажется ещё был Invest_Grid. Что-то у меня с него начиналось. ))
Сегодня запустил робота, выставляющего лимитки то с одной, то с другой стороны. На каждом OnUpdate() смена направления. Он может и не очень грамотный, но работает.

Re: Покупка/продажа лимитными приказами по определённой цене.

Добавлено: 09 янв 2023, 23:05
_E_V_N_
"StepByStep - наверное подходит. Кажется ещё был Invest_Grid. Что-то у меня с него начиналось. ))
Сегодня запустил робота, выставляющего лимитки то с одной, то с другой стороны. На каждом OnUpdate() смена направления. Он может и не очень грамотный, но работает."
Invest_Grid отличается от StepByStep тем, что при большой просадке он добирает позиции на заданный шаг, а вот StepByStep может отставить при просадке "дырки" в уровнях, потом когда продаст акуцию перед "дыркой" сразу купит и возможно дороже чем только, что продал.
На каждом OnUpdate() перевыставлять заявку нет смысла, лучше введите один уровень №1 между ценой по которой уже купили акцию и ценой предпологаемой продажи, и еще уровень №2 между ценой по которой уже купили акцию и ценой предпологаемой покупки. И выставляйте заявки если текущая цена пересечет уровень №1 лимитку на продажу и лимитку на покупку когда цена пересечет уровень №2. лимитки выставляйте по ценам вашей покупки и продаже.