Блог им. traderblogger

Знатоки easylanguage (Omega, tradestation)

Коллеги, а есть ли среди нас знатоки сабжа?
Те кто писал для себя или под заказ индюки на этом языке или торговые стратегии?

Есть вопросы, хотел бы пообщаться на эту тему.

ps Тимофей, не хватает какого-то общего открытого блога на общие темы. Каждый раз когда пишу новую заметку стою перед мучительным выбором — в какой же блог писать и каждый раз понимаю, что пишу не туда куда надо. 
★2
17 комментариев
Чем помочь?
avatar
oktb, и огромное спасибо за ответы.
Сейчас изучаю раздел «Торговые приказы».

Вот цитата для примера:

«Стоповые и лимитированные приказы заполняются, как только рынок затронет приказ. Такие ордера становятся рыночными приказами, когда цена символа пересекает указанную в приказе стоимость.

Это оставляет возможность для стоповых и лимитированных приказов быть не исполненными (т.е., цены никогда не пересекаются); в этом случае, ордера отменяются в момент закрытия бара.»

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

Меня именно смущает фраза: «ордера отменяются в момент закрытия бара».

А как же быть, если идет разрыв связи и робот отключается от торгов.
вроде так, но не так…
1. Скрипт Омеги выполняется (по умолчанию) один раз на Close bara.
2. По Default Омега выполняет команду купить/продать и НЕ выполняет не меняет внутренную функцию Marketposition на соответствующую текущей позе. Следовательно что бы поставить лимитные/стоп приказы необходимо руками вводить собственную переменную которая «знает» куда стоит поза.
3.Если Вы сгенерили лимит/стоп приказ и на следующем Клозе этот приказ не сработал, то омега его (приказ) оменит. Следовательно необходимо при каждом выполнении скрипта анализировать текущую позу и по новой генерить лимит/стоп приказ.
Я понятно объяснил?
avatar
oktb, Да, спасибо. Доступно. То есть ситуация печальная получается.

Получается, что войдя в позу робот должен самолично все время оберегать позу отслеживая ситуацию каждый бар. И в случае разрыва связи, зависания или иных других причин отключения от сервера позиция становится незащищенной.

Касательно вашей фразы: «Следовательно что бы поставить лимитные/стоп приказы необходимо руками вводить собственную переменную которая «знает» куда стоит поза.» — я готов этим заниматься в программе, но ведь и эти ордера будут жить либо до исполнения «тут же» либо до закрытия текущего бара.

Но ведь это абсурд, на мой взгляд — мега ненадежно.
такое «отслеживание» позы в скрипте — дело пары строк, и они совсем просты.
А разрывы связи Квика (или др. терминала) это совсем «из другой оперы» и при чем тут Омега с ее скриптами и надежность терминала?
avatar
oktb, дык я сейчас не говорю про сложность отслеживания — это то как раз вопрос решаемый. Я именно про зависимость стопов от соединения с инетом.

У меня не квик. я торгую через openecry.com. В их терминале встроена поддержка easylanguage. Хочу соответственно реализовать свою стратегию в автоматическом режиме. Начал изучать язык и тут такой трабл. Для меня это именно трабл. :-(

Ладно, буду думать в этом направлении.
еще вопрос.

Вот есть определение ордера на покупку:

«Этот торговый приказ используется, чтобы открыть длинную позицию (он закрывает ваши короткие позиции и открывает длинную позицию).»

Почему то упор делается не на просто покупке, а именно на открытии длинной позиции.

Допустим у меня нет позиций. Тогда команда:
buy («buy») 100 contracts next bar at market
купит сто контрактов.

Но теперь допустим у меня в шорте по этому инструменту 30 контрактов. В этом случае точно такая же команда к чему приведет? Будет ли также куплено всего 100 контрактов и в итоге у меня будет 70 контрактов в лонге или же это команда ИМЕННО откроет лонг на 100 контрактов, а для этого будет приобретено 130 контрактов (30 на закрытие шорта + 100 для лонга)?

Такая же картинка для шортов.
Buy = Long
Sell = Short
ExitLong и ExitShort выход из Лонга и Шорта соответственно.
Пример.
1.Позы нет
2.Приходит команда Buy 30 контрактов.
3.омега купит 30 контрактов.
4.новая поза Лонг 30
— 1.Поза Лонг — 30
2.Приходит команда Sell 50 контрактов.
3.омега продаст 80 контрактов.
4.новая поза шорт 50
— 1.Поза Лонг — 30
2.Приходит команда ExitLong all контрактов.
3.омега продаст 30 контрактов.
4.новая поза Кэш
— 1.Поза Лонг — 30
2.Приходит команда ExitLong 20 контрактов.
3.омега продаст 30 контрактов.
4.новая поза Лонг 10
— Аналогично и для шорта
avatar
oktb, ок, я понял. То есть пляшем не от количества продаваемых/покупаемых контрактов, а от итогового значения — сколько должно быть в лонге или шорте.
Ясно. Спасибо.

Необычный подход в этом EASY. :-)

Кстати, а вы давно на нем программируете?
Бывают ли ситуации, когда возможностей языка недостаточно?
уже несколько лет.
Очень часто не хватает возможностей.
особенно долго мучался с переносом из одного таймфрейма в другой разных значений/сигналов. Очень в этом помог Puls -> www.geluim.net
avatar
oktb, странно, сайт не открывается. Точно так называется?
oktb, ок, изучу.
oktb, Привет.

Можно еще вопросик.

Вот я в какой-то момент времени открыл длинную позицию. Через какой объект мне от бара к бару следить за этой позицией? К примеру у меня выход из позиции настроен на достижение какой-либо цели по цене:
выхожу из позы после взятия 70 тиков. Как мне узнать какая средняя цена открытой позиции?
Еще один вопрос есть.

Вот накропал первый пример для себя.

Inputs: med(34);
var: mylongprice(0),myshortprice(0);

if marketposition=0 then //если позиций нет никаких, то пытаемся открыть лонг или шорт
begin
mylongprice=0;myshortprice=0;
if close crosses under (XAverage(Close, med)+XAverage(Close, med)*0.0021) or
((XAverage(Close, med)+XAverage(Close, med)*0.0021)-high[1]<4 points and (XAverage(Close, med)+XAverage(Close, med)*0.0021)-close>8 points) then

begin
sell («MyShort») 1 contract next bar at market;
myshortprice=close;
end;

if close crosses over (XAverage(Close, med)-XAverage(Close, med)*0.0021) or
(low[1]-(XAverage(Close, med)-XAverage(Close, med)*0.0021)<4 points and close-(XAverage(Close, med)-XAverage(Close, med)*0.0021)>8 points) then
begin
Buy («Mylong») 1 contract next bar at market; // если цена поднимается из-за нижней границы конверта вверх
mylongprice=close;
end;
end;

if marketposition=1 then //если имеется длинная позиция
begin
sell («exitlong_bystop») 1 contract next bar at mylongprice-10 points by stop;
sell («exitlong») 1 contract next bar at mylongprice+80 points by limit;

end;

if marketposition=-1 then //если имеется короткая позиция
begin
buy («exitshort_bystop») 1 contract next bar at myshortprice+10 points by stop;
buy («exitshort») 1 contract next bar at myshortprice-80 points by limit;
end;

Почему то не открывает шорты. Только в лонг играет
traderblogger, мда, в таком формате совсем не читается.

теги блога Рустам TradeInWest.ru

....все тэги



UPDONW
Новый дизайн