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



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

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

Контррендовая торговля по параболику. Для примера рассмотрим торговлю в лонг. В момент перескока цены параболиком на шорт запоминаем в переменные два значения SAR1 и SAR2.Далее из этих двух значений вычисляем уровень входа в лонг (против тренда) и храним его в переменной. Ну для примера формула: Buy=SAR1-(SAR2-SAR1). Как только цена дошла до этого значения, то покупаем.
Выход из позиции по обратному пересечению параболика.
Соответсвенно, выходя из лонга, тут же считаем уровни для входа в шорт, обнуляем значение Buy, ну и т.д.
Реальный трейд виден на графике.
Мне бы примерный код в AFL. Направьте, пожалуйста,на путь истинный, дальше уж сам допилю.
Заранее спасибо.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Типа так
Код:

Parab = SAR( 0.02, 0.2 );
SAR2 = ValueWhen( Cross(Parab, C), Parab);
SAR1 = ValueWhen( Cross(Parab, C), Ref(Parab, -1));

BuyLevel = SAR1-(SAR2-SAR1);

Buy = Cross(H, BuyLevel);
BuyPrice = Max(BuyLevel, O);

Sell = Cross(C, Parab);

// для посмотреть на графике

Plot(C, "", colorBlack, styleCandle);
Plot(Parab, "", ColorRed);
Plot(SAR1, "", ColorBlue);
Plot(SAR2, "", ColorGreen);
Plot(BuyLevel, "", colorOrange);

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



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

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

Ого ! Так просто ? А вот еще вопрос. Чтобы результаты теста были более точными (вход не на открытии следующей свечи, а прямо на текущей свече, как только дошли до BuyLevel), как мне получить все значения минутной свечи ? Правильно ли я понимаю, что надо с Финама скачать тиковые значения, а в настройках тестера указать 1 минута ? Или это ничего не даст ?
Посмотреть профиль Отправить личное сообщение
home30



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

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

Короче, написал так:
Код:

TradeTime = TimeNum() >= 100400 AND TimeNum() <= 184400;
Parab = SAR( 0.02, 0.2 );
SAR2 = ValueWhen( Cross(Parab, C), Parab);
SAR1 = ValueWhen( Cross(Parab, C), Ref(Parab, -1));
BuyLevel = SAR1-(SAR2-SAR1);
Buy = Cross(L, BuyLevel) AND TradeTime;
BuyPrice = Min(BuyLevel, C);
Sell = Cross(C, Parab) AND TradeTime;

// Для графика

Plot(C, "", colorBlack, styleCandle);
Plot(Parab, "", colorRed);
Plot(SAR_100L, "", colorBlue);
Plot(SAR_0L, "", colorGreen);
Plot(BuyLevel, "", colorOrange);


Но почему-то при тестировании вот такие ошибки (см. картинку). Что не так ?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

home30 писал(а):
Ого ! Так просто ? А вот еще вопрос. Чтобы результаты теста были более точными (вход не на открытии следующей свечи, а прямо на текущей свече, как только дошли до BuyLevel), как мне получить все значения минутной свечи ? Правильно ли я понимаю, что надо с Финама скачать тиковые значения, а в настройках тестера указать 1 минута ? Или это ничего не даст ?

Это ничего не даст. В коде и так написано входить по уровню BuyLevel а не по закрытию или открытию. За это отвечает строка
Код:
BuyPrice = Max(BuyLevel, O);

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


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

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

Надо немного поправить код.
Вот эту строку
Код:
Buy = Cross(L, BuyLevel) AND TradeTime;

исправь на
Код:
Buy = Cross(L, BuyLevel) AND TradeTime AND Ref(Parab > C, --1);


Это исправит ошибку "тут входит хотя не надо".
А вот с "тут не входит" сложнее. Сначала следует выяснить есть ли сигнал.
В настройках тестера на закладке Report включи Detailed log.
http://www.amisite.ru/begin/bk_set5.php
Протестируй и ищи в отчете эту свечку по дате времени. Если сигнал есть (скорее всего он есть), то следует разбираться почему не открыта поза.
Скорее всего что то типа
http://www.amisite.ru/begin/bk_set6.php

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



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

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

Заработало, когда написал так:
Код:

Buy = Cross(BuyLevel,L) AND  Ref(Parab > C, -1) AND TradeTime;

Теперь входит там, где нужно. Вопрос остался по формированию цены входа. Если пишу так:
Код:

BuyPrice = Min(L,BuyLevel) AND TradeTime;

Тогда в тестере в качестве цены входа он показывает Low свечки, которая пересекла BuyLevel. Пробовал вот так:
Код:

BuyPrice=BuyLevel

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


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

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

home30 писал(а):

Теперь входит там, где нужно. Вопрос остался по формированию цены входа. Если пишу так:
Код:

BuyPrice = Min(L,BuyLevel) AND TradeTime;

Тогда в тестере в качестве цены входа он показывает Low свечки, которая пересекла BuyLevel. Пробовал вот так:
Код:

BuyPrice=BuyLevel


Скорее всего у тебя в настройках тестера установлена Задержки исполнения сделок (delay)
http://www.amisite.ru/begin/bk_set3.php
В таком случае цена свечки может быть дальше укровня покупки. В таком случае Ами "сдвигает" цену сделки до реальной на рынке.
В общем поставь делэй 0.

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



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

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

Разобрался.
По невнимательности написал
Код:

BuyPrice = BuyLevel and TradeTime;

Убрал TradeTime и стало входить точно по уровню.
Мучаю теперь шорт. Написал так:
Код:

TradeTime = TimeNum() >= 100400 AND TimeNum() <= 184400;
Parab = SAR( 0.02, 0.2 );
SAR_100 = ValueWhen( Cross(Parab, C), Ref(Parab, -1));
SAR_0 = ValueWhen( Cross(Parab, C), Parab);

ShortLevel = Тут формула;
Short = Cross(H,ShortLevel) AND Ref(Parab > C, -1) AND TradeTime;
ShortPrice = ShortLevel;
Cover = Cross(Parab,Open);
CoverPrice = Min(Ref(Parab, -1),Open);



// Для графика

//Plot(C, "", colorBlack, styleCandle);
//Plot(Parab, "", colorRed);
//Plot(SAR_100, "", colorBlue);
//Plot(SAR_0, "", colorGreen);
//Plot(ShortLevel, "", colorOrange);

Не работает тест. Пишет Error 701. Missing buy/sell variable assignments.
Тут что не так, подскажи.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Наверное в настройках тестера стоит не только шорт.
В любом случае допиши в начало кода
Код:
Buy = 0;
Sell = 0;

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



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

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

Да точно, в настройках тестера не указал, что торгуем и лонг и шорт. Было только лонг. Исправил, заработало. Теперь вопрос по стопу. Он у меня вычисляемый по формуле. Написал так:
Код:

stopLevelLong=формула вычисления уровня стопа;
ApplyStop(stopTypeLoss,stopModePoint,stopLevelLong,True);

Не работает. Не выходит по стопам. А вот если пишу stopLevelLong=500 (т.е. явно указываю в пунктах), тогда в таблице сделок видны стопы, все по 500 пунктов. Что не так то ? В формуле нет ошибки. Даже если просто вот так написать:
Код:

stopLevelLong=BuyPrice-500;
ApplyStop(stopTypeLoss,stopModePoint,stopLevelLong,True);

то все равно не работают стопы.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

В ApplyStop() надо писать не уровень стопа, а его размер. Типа BuyPrice - stopLevelLong

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



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

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

В настройках тестера есть три параметра на закладке Report. А можно как-то вывести что-то вроде трейд листа, но свернутого по дням. Понятно, что можно проводить расчет за период, но это надо вручную каждый день вводить и куда-то в табличку выписывать.
И еще попутный вопрос. В трейд листе (когда выводятся все сделки) есть столбец Cum.Profit. Это прибыль с начала периода нарастающим итогом. Бывают дни, когда прибыль достигает какого-то максимума, а потом до конца дня может откатиться. Можно ли посчитать такие максимумы по прибыли внутри дней и как-то вывести их в отчет ? Если определить такую величину, можно добавить ее в роботов и останавливать расчет до конца дня при достижении нужного уровня маржи.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Проще всего взять отчет как он есть экспртировать в эксель и там уже над ним работать подобным образом. Простых штатных средств в Ами для этого нет.

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


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

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

Да хрен его знает. Трудно так по кускам кода...
Ну допиши выше
SAR1 = SAR2 = 0;

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen