Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Возможно ли такое написать ? Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Июл 23, 2015 7:45 am Ответить с цитатой Вернуться к началу

Ок. Если читал учебник, то должен был обратить внимание, что в настройках тестера есть опция Futures mode
Для тестирования фьючей надо включить ее.
Теперь по ГО.
В Ами у каждого символа есть свои настройки меню Symbol -> Information. Там есть поле Margin deposit. Вот туда надо вписать ГО фьюча. Если вписать положительную цифру, то это постоянная стоимость контракта. Т.е. не зависимо от котировки ГО постоянно. А вот если вписать отрицательное число, то это будет ГО % от котировки контракта.. Т.е пишем -10. При котировке фьюча 100000 ГО будет 10000, а при котировке 10000 ГО 1000.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Ср Июл 29, 2015 9:58 am Ответить с цитатой Вернуться к началу

А как корректно перенести готовую базу с десятком загруженных символов на другой компьютер. Нужно просто взять каталог с базой и скопировать в папку с программой на другой компьютер ? А там потом просто открыть ее ? Или надо сначала на другом компе создать пустую базу, а потом в каталог этой пустой базы скопировать ?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Июл 29, 2015 10:05 am Ответить с цитатой Вернуться к началу

home30 писал(а):
А как корректно перенести готовую базу с десятком загруженных символов на другой компьютер. Нужно просто взять каталог с базой и скопировать в папку с программой на другой компьютер ? А там потом просто открыть ее ? Или надо сначала на другом компе создать пустую базу, а потом в каталог этой пустой базы скопировать ?

просто переноси

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Чт Июл 30, 2015 4:46 pm Ответить с цитатой Вернуться к началу

А вот еще задачка для меня пока невыполнимая. Есть такой горизонтальный индикатор камарилья. Суть его проста. Берем вчерашнюю дневную свечу, точнее H,L,C вчерашней дневной свечи. Первая группа уровней откладывается вверх от цены закрытия вчерашней торговой сессии. Обозначается H (от слова «high»). Вторая группа уровней откладывается вниз от цены закрытия вчерашней сессии. Обозначается буквой L (от “Low”). Считаем уровни по формулам:
H1= c + (h-l)*1.1 /12
H2= c + (h-l)*1.1 /6
H3= c + (h-l)*1.1 /4
H4= c + (h-l)*1.1 /2
H5 = (h/l)*c

L1= c — (h-l)*1.1 /12
L2= c — (h-low)*1.1 /6
L3= c — (h-l)*1.1 /4
L4= c — (h-l)*1.1 /2
L5 = c — (H5 — c)

где:

с - цена закрытия
h -максимальная цена
l - минимальная цена
Соответственно для тестирования стратегии нужно обращаться сразу к двум графиками одного инструмента - дневной график,откуда читать вчерашнюю дневную свечу и сегодняшний график - минутка - для совершения сделок.
На qpile такое я написал. Там все достаточно просто. Создаешь два графика - дневной и минутный и присваиваешь разные идентификаторы одной бумаге на разных графиках. А тут как ?
Как реализовать в тестере простую стратегию с этими уровнями. Например, покупаем на L3, продаем на H3. Направь на пусть истинный. Читал про парный трейдинг тут http://www.amisite.ru/begin/afl_2trade.php, но это немного не то. Инструмент то один, но работать надо одновременно с разными таймфреймами.
И как вообще, если у меня в базу загружены только минутки. Еще отдельно грузить дневные свечи ?
Для наглядности привел графики из квика.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Июл 30, 2015 5:58 pm Ответить с цитатой Вернуться к началу

Глянь тут
http://amisite.ru/phpBB2/viewtopic.php?t=1511&highlight=timeframeset

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Вт Авг 11, 2015 10:31 am Ответить с цитатой Вернуться к началу

Да, спасибо, разобрался. Еще вопрос по поводу расчета кол-ва контрактов при тестировании. Сейчас я знаю два варианта - задать фиксированное число контрактов через SetPositionSize, либо убрать эту функцию, тогда он будет открывать не все имеющиеся деньги пропорционально заданному ГО на контракт. А вот если мне нужно посчитать, чтобы на ГО использовалась только часть депозита.
Пример. ГО 12 000. Стартовый депозит 100 000. Постепенно депозит растет .Нужно, чтобы каждый раз позиция открывалась количеством контрактов, ну скажем, не более чем на 70% от текущего остатка по депозиту.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Авг 11, 2015 2:46 pm Ответить с цитатой Вернуться к началу

SetPositionSize( size, method )
RETURNS ARRAY
FUNCTION This function allows to control trade (position) size in four different ways, depending on 'method' parameter.
Parameters:

size (ARRAY) defines desired trade size

method (ARRAY) defines how 'size' is interpreted

spsValue (=1) - dollar value of size (as in previous versions)
spsPercentOfEquity (=2) - size expressed as percent of portfolio-level equity (size must be from ..100 (for regular accounts) or .1000 for margin accounts)
spsShares (=4) - size expressed in shares/contracts (size must be > 0 )
spsPercentOfPosition (=3) - size expressed as percent of currently open position (for SCALING IN and SCALING OUT ONLY)
spsNoChange (=0) - don't change previously set size for given bar

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Пт Авг 14, 2015 12:00 am Ответить с цитатой Вернуться к началу

Понял.Спасибо. Вот еще мучает вопрос, но наверно на него нет ответа. Как бороться с проскальзыванием в реальной торговле по сравнению с историей во время выхода из позиции ? Вход отрабатывается четко, т.к. рассчитывается уровень и ставится лимитированная заявка. А вот выход происходит на открытии второй свечи после сигнала на выход (на второй свечке после перескока параболика. Получается, что Ами считает идеальную ситуацию, что мы вышли ровно по открытию. Но в жизни это не так.Пока квик неторопливо пошлет заявку, пока она исполнится, цена может улететь на несколько десятков пунктов (бывает, что в нужную сторону).
Как добиться максимально близких значений в тестах с реалом ?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Авг 14, 2015 12:10 am Ответить с цитатой Вернуться к началу

Я не знаю как там тормозит квик, но по моему опыту цена может как улететь, так и прилететь. В общем в среднем на сделке теряется 2-3 спреда при небольшом сайзе. При тестировании стратегии надо это учитывать. Типа если торгуем сбер а средняя сделка на одном лоте +5 копеек, то систему в помойку или на доработку.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Вс Авг 16, 2015 11:04 pm Ответить с цитатой Вернуться к началу

Привет. Нужно, чтобы в качестве уровня входа запоминался лоу свечи в момент пересечения параболика и SMA. А вход был, когда на последующих свечах,когда будет перелоу этого уровня. Вот написал, не открывает сделок вообще.
Код:

TradeTime = TimeNum() >= 100500 AND TimeNum() <= 184400;
Parab = SAR(0.02,0.2);
SMA = MA(C,21);
direction = Flip(Cross(C, Parab), Cross(Parab, C));
BuyLevel=direction == 0 AND Ref(direction, -1) == 0 AND Cross(SMA,Parab) AND Ref(Parab>C,-1) AND TradeTime;
Buy=Cross(BuyLevel,L) AND TradeTime;
BuyPrice=BuyLevel;
Sell = Cross(Open,Parab) AND Ref(Parab>C,-1) OR TimeNum()>184400;
SellPrice=C;

Если так, тогда работает, но в качестве входа указывает лоу свечи, на которой произошло пересечение.Вот так:
Код:

...
Buy=direction == 0 AND Ref(direction, -1) == 0 AND Cross(SMA,Parab) AND Ref(Parab>C,-1) AND TradeTime;
BuyPrice=L;
Sell = Cross(Open,Parab) AND Ref(Parab>C,-1) OR TimeNum()>184400;
SellPrice=C;

Пробовал через ValeuWhen запомнить лоу свечи, получается какая-то фигня:
Код:

...
BuyLevel=ValueWhen(direction == 0 AND Ref(direction, -1) == 0 AND Cross(SMA,Parab) AND Ref(Parab>C,-1) AND TradeTime,L);
Buy=Cross(BuyLevel,L) AND TradeTime;
BuyPrice=BuyLevel;
Sell = Cross(Open,Parab) AND Ref(Parab>C,-1) OR TimeNum()>184400;
SellPrice=C;

В этом варианте сделки открывает, но берет какие-то непонятные уровни.
Короче, не догоняю, как тут правильно запоминать лоу свечки, на которой произошло пересечение.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вс Авг 16, 2015 11:24 pm Ответить с цитатой Вернуться к началу

Для начала делаешь вот такой код

Код:
Parab = SAR(0.02,0.2);
SMA = MA(C,21);

Plot(C, "", colorBlack, styleCandle);
Plot(Parab, "", colorRed);
Plot(SMA, "", colorBlue);

level = ValueWhen(Cross(SMA,Parab), L);
Plot(level, "", colorGreen);

Кидаешь его на график и смотришь что надо изменить и добавить. Потом собираешь в сигналы Buy/Sell.

Попробуй сам. Не получится - пиши.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Вс Авг 23, 2015 11:46 am Ответить с цитатой Вернуться к началу

Почему-то пропускает сделки иногда. Правило входа. Если разница между нижним и верхним боллинджером больше определенного значения (по умолчанию 200), и закрытие выше/ниже боллинджера, тогда входим по закрытию текущей свечи. Выход на ближайшем параболике. Вот код:
Код:

TradeTime = TimeNum() >= 100400 AND TimeNum() <= 184400;
Parab = SAR( 0.02, 0.2 );
period_bb=Optimize("period_bb",15,10,30,1);
width_bb=Optimize("width_bb",2,2,2,0.05);
BBT=BBandTop( Close, period_bb, width_bb);
BBB=BBandBot( Close, period_bb, width_bb);
razn=Optimize("razn",200,200,1000,50);
Buy=Sell=Cover=Short=0;
Buy = (BBT-BBB)>razn  AND Cross(BBB,C) AND  Ref(Parab > C, -1) AND TradeTime;
BuyPrice =C;
Sell = Cross(Open,Parab) AND Ref(Parab>C,-1) OR TimeNum()>184400;
SellPrice=C;
Short = (BBT-BBB)>razn AND Cross(C,BBT) AND Ref(Parab < C, -1) AND TradeTime;
ShortPrice =C;
Cover = Cross(Parab,Open) AND Ref(Parab<C,-1) OR TimeNum()>184400;
CoverPrice =C;
Plot(BBT, "", colorGreen);
Plot(BBB, "", colorGreen);

PlotShapes( Buy*shapeUpArrow, colorGreen, 0, L );
PlotShapes( Cover*shapeUpArrow, colorGreen, 0, L );
PlotShapes( Sell*shapeDownArrow, colorRed, 0, H );
PlotShapes( Short*shapeDownArrow, colorRed, 0, H );



Не пойму, в чем дело. Почему пропускает вход ?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вс Авг 23, 2015 12:14 pm Ответить с цитатой Вернуться к началу

Код не смотрел. Просто универсальный совет. Для начала надо проверить есть ли там сигнал. Если сигнал есть, но не входит, значит надол смотреть настройки тестера, а если сигнала нет, то косяки в коде.

Наличие сигнала можно проверить двумя способами.
1. Вывести сигналы на график. Или PlotShape или Plot(... StyyleOwnScale);
2. Включить в настройках АА Detailed log http://www.amisite.ru/begin/bk_set5.php

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
home30



Зарегистрирован: 17.06.2015
Сообщения: 105

СообщениеДобавлено: Вс Авг 23, 2015 10:29 pm Ответить с цитатой Вернуться к началу

Разобрался в чем причина. В коде, где пишу условие входа (для шорта, например, закрытие свечи выше верхней линии боллинджера) надо писать не Cross (C,BBT), а C>BBT. Так вроде сделки все считает.
В чем тогда разница между Cross и оператором сравнения в данном случае ? Ведь это условие C>BBT может выполняться несколько свечей подряд. Чтобы сделки не дублировались, для этого мы используем ExRem ?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вс Авг 23, 2015 10:36 pm Ответить с цитатой Вернуться к началу

Cross() это пересечение. В твоем случае Cross (C,BBT) надо чтобы закрытие предыдущейй свечки было ниже BBT а текущей выше. Судя по картинке у тебя как раз предыдущая тоже выше BBT и Cross не выполняется.
ExRem не надо использовать. Тестер сам уберет "лишние" сигналы (когда сделка уже открыта остальные сигналы тестер игнорирует).

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen