HOME

Изначально вопрос ставился так: Можно ли в TradeStation на основе только дневных данных совершать покупки/продажи внутри текущего бара, если для формирования сигнала используется цена открытия текущего бара. Оказалось, можно.

Небольшое вступление:

1. В Омеге можно использовать четыре основных вида ордеров:

Stop – исполнение по указанной цене или хуже,

Limit – исполнение по указанной цене или лучше,

Market – исполнение по цене открытия,

Close – исполнение по цене закрытия.

При этом, если для расчета сигнала используются какие-либо компоненты текущего бара, на текущем баре может быть исполнен только Close ордер. Market ордер исполняется на открытии следующего бара, Stop/Limit ордера исполняются так же на следующих барах, когда выполнится их условие.

2. В PowerEditor можно создавать сигналы для стратегий, в которые включены все условия на вход и на выход одновременно, а можно для каждого условия создать свой сигнал, а затем в StrategyBuilder , как из кубиков, собрать стратегию из нескольких сигналов.

Для примера покупки внутри бара с учетом цены открытия я выбрал следующую стратегию: Если закрытие вчера и открытие сегодня ниже ЕМА(С,30), и цены в течение дня пересекают ЕМА вверх, то покупаются первые 50 контрактов по стоп-ордеру на уровне ЕМА+5 пунктов. Если закрытие сегодня будет выше ЕМА, то на закрытии бара покупаются вторые 50 контрактов, если закрытие сегодня окажется ниже ЕМА, то сигнал на вход считается не подтвержденным и первые 50 контрактов продаются. Если сигнал подтвердился и куплены 100 контрактов, то выход из позиции, когда цена закрытия дня пересечет ЕМА обратно вниз.

Видно, что в стратегии используется сегодняшнее открытие, поэтому если просто записать эти условия в EasyLanguage, то стоп-ордер на первую покупку не будет исполнен на текущем баре, а только на последующих, когда цены пересекут сигнальную линию.  Коллега REM «напомнил» :) , что в EL можно использовать функцию Tomorrow (кстати только для цены открытия). Теперь условие для стоп-ордера можно записать так:

If Close < XAverage(Close,30) and Open of Tomorrow < XAverage(Close,30) Then Begin

            StopOrder = XAverage(Close,30) + 5 points;

            Buy 50 Contracts at StopOrder Stop;

End;

Тогда ордер сформируется с учетом прошлых цен и текущего открытия и будет исполнен на текущем баре.

Однако, если попытаться в этот же сигнал добавить условие второй покупки по закрытию дня:

If Close Cross Over XAverage(Close,30) Then Buy 50 Contracts at Close;

То, PowerEditor «ругнется» на невозможность исполнения Close ордера с учетом «завтрашних» цен. Поэтому надо создавать два отдельных сигнала для каждого ордера. Стратегия будет состоять из трех сигналов (2 на вход и 1 на выход).

1_EntrySignal:

Vars: StopOrder(0);

If MarketPosition = 0 and Close < XAverage(Close,30) and Open of Tomorrow < XAverage(Close,30) Then Begin

            StopOrder = XAverage(Close,30) + 5 points;

            Buy 50 Contracts at StopOrder Stop;

End;

2_EntrySignal:

If C Cross Over XAverage(Close,30) Then Buy 50 Contracts at Close;

Exit_Signal:

If C < XAverage(Close,30) Then ExitLong at Close;

В настройкх стратегии (Format) необходимо указать Pyramiding Settings – Allow for different Entry…

Вот как это выглядит на графике:

В первом случае, цена вчерашнего закрытия и текущего открытия были ниже ЕМА. После открытия, цены пошли вверх и сработал стоп-ордер на покупку 50 контрактов, однако затем цены пошли вниз и закрытие дня оказалось ниже ЕМА. В результате позиция на 50 контрактов была закрыта. На следующий день сохранились те же условия для входа. При пересечении ЕМА было куплено 50 контрактов по стоп-ордеру и на закрытии дня было куплено еще 50 контрактов, т.к. закрытие было выше ЕМА. На следующий день позиция была полностью закрыта, т.к. цена закрытия пересекла ЕМА обратно вниз.

Вот, собственно и все.

Предупреждение: Выбранная стратегия и тексты сигналов не являются полноценным продуктом, готовым к применению, а использованы лишь для примера.

(c) konkop 2001

HOME

 

 

 

Hosted by uCoz