?

Log in

No account? Create an account

jc_trader


JC-TRADER. Биржевые игры. Системные Спекуляции.


Previous Entry Поделиться Next Entry
Вопрос знатокам Амиброкера.
jc_trader
Вот скрипт для примера. Когда прогоняю в Explore на портфеле акций (чтобы получить сигналы на покупку на завтрашний день), то выдает не только нужные сигналы, но и те, по которым уже открыты позиции (например, вчера, позавчера и т.д.). А как сделать чтобы проигнорировать повторные сигналы. Имею в виду что, например, позавчера уже была открыта позиция по акциям ХХХ. Но так как условие на вход до сих пор действует, то и сегодня получаем сигнал на покупку ХХХ. А как сделать чтобы этого сигнала уже не было, так как позиция по ХХХ уже открыта и повторного входа не предусмотрено.

SetPositionSize(10, spsPercentOfEquity);
SetOption("MaxOpenPositions", 10);
SetOption("InitialEquity", 100000);
SetOption("UsePrevBarEquityForPosSizing", 1);
Equity(1, 0);
SetTradeDelays(0,1,0,0);
RoundLotSize = 1;

///////////////////////

Setup = BarCount > 20 AND
Close < MA(Close, 5);

lim = Close - ATR(10);
prior = ATR(10);

Buy = Ref(Setup, -1) AND Low < Ref(Lim, -1);
BuyPrice = Min(Ref(Lim, -1), Open);
PositionScore = prior;

Exit = Close > MA(Close, 5) AND BarCount > 20;
Sell = Exit;

////////////////////////
buy = ExRem( buy, sell );
sell = ExRem( sell, buy );

Filter = Setup;
Shares = 100000/Lim;

//AddColumn(Filter, "Buy", 1);
AddColumn(Lim, "LimitPrice");
AddColumn(Shares, "Shares", 1.0);
AddColumn(PositionScore, "Priority", 1.5);
Метки:

  • 1

Проверка предыдущих условий

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

Re: Проверка предыдущих условий

В том то и дело что позиция может быть открыта не только вчера, но и 10 дней назад, и больше, и меньше.

1. можно спроситьу Олега (000) тут www.amisite.ru
2. если движок ами не позволяет решить проблему штатно
опишем в виде универсального подхода

если система не различает какие-то ситуации,
то делаем конечный автомат

2.1. вводим дополнительные два признака и конструируем пространство состояний
{первичный, повторный} = {1,0} = {Истина, Ложь}
{не исполненный, исполненный} = {1,0}={Истина, Ложь}

создаем пространство состояний автомата путем декартового прямого произведения множества признаков

{первичный, повторный} * {не исполненный, исполненный}
{1,0}*{1,0}

т.е. пространство состояний описывается так
(0,0) = повторный не исполненный => ничего не делаем ??? или таки входим?
(0,1) = повторный исполненный => ничего не делаем
(1,0) = первичный не исполненный => размещаем ордер
(1,1) = первичный исполненный => ничего не делаем

мы выписали пространство состояний и пространство действий
осталось закодировать автомат )

:) Легче тогда заново тестер написать на питоне или R. Амиброкер ведь уже готовая программа, а не среда программирования. Должна быть какая-то кнопка чтобы просто выбрать опции и чтобы все работало как надо. Например, в WL, TS, да и других программах ордера на следующий бар -- это уже входит в систему ордер-менеджмента и выдает ордера автоматически.

твой пост дал мне инфоповод поумничать )

Как-нибудь так?

Filter = Status("lastbarinrange") and Setup and BarsSince(sell) < BarsSince(buy);

Да, это сработало!!!!!! Супер! :)
Спасибо.



Edited at 2017-01-31 07:02 (UTC)

Еще одно решение от Олега(000) с паука:

inMark = Flip(Buy, Sell);
Filter = Setup AND !inMark;

на тему всяких алго-сред: http://www.algotrader.com/
оно правда стоит 2К баксов в год что ли

  • 1