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



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

СообщениеДобавлено: Вт Фев 07, 2012 3:17 pm Ответить с цитатой Вернуться к началу

Доброго времени суток!
Код такой:
SetChartOptions(0,chartShowArrows|chartShowDates);
Plot( Close, "Price", colorBlack, styleCandle); //рисуем бары цены
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));

_SECTION_BEGIN("EMA"); //даём параметры EMA
P = ParamField("Price field",-1);
Periods = Param("Periods", 15, 2, 300, 1, 10 );
Plot( EMA( P, Periods ), _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") );
_SECTION_END();

//ИЗМЕНЯЕМ ТАЙМФРЕЙМ
TimeFrameSet(in5Minute); // переключаемся на 5мин таймфрейм(сжимаем бары)
Close_5mim = C ;
Mov_5mim = EMA(Close, 15);
TimeFrameRestore(); // Томаш рекомендует каждый раз восстанавливать фрейМ
Close_5mim = TimeFrameExpand(Close_5mim, in5Minute);
Mov_5mim = TimeFrameExpand(Mov_5mim, in5Minute);

//УСЛОВИЯ ВХОДА В СДЕЛКУ
BuyCond = Cross(Close_5mim, Mov_5mim);
BuyCondPrice = ValueWhen(BuyCond, Low);// цена покупки
BuyTimeCond = BarsSince(BuyCond) < 2; // на протяжении скольки баров ждем достижения цены покупки
Buy = Cross(BuyCondPrice, Low) AND BuyTimeCond;
BuyPrice = BuyCondPrice;
Sell = Cross( EMA(Close,(15)) , Close); // продажа при пересечении ема(1мин) с ценой(1мин)
SetPositionSize( 1, spsShares ); // торговля одной бумагой

Смотрю открытие позиции по 5мин. таймфрейму( нижний график), и вижу что лоу выделенной свечи(которая пересекла емашку) 438.1. Соответственно коду цена открытия позиции должна быть 438.1, но при открытии позы вижу что цена 442.5. Такое впечатление что берётся не лоу свечи(которая пересекла емашку), а хай.
Скажите где я ошибся, и как нужно правильно составить код.
Спасибо.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
000
Site Admin


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

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

Ошибка твоя тут
BuyCond = Cross(Close_5mim, Mov_5mim);
BuyCondPrice = ValueWhen(BuyCond, Low);// цена покупки

Получается, что ты смотришь пересечение не на 5 минутках, а на минутках.
Соответственно в момент пересечения у тебя смотрится low не 5мин свечки, а минутной.
Чтобы понять лучше вот такой код на минутный график кинь.

Код:

TimeFrameSet(in5Minute); // переключаемся на 5мин таймфрейм(сжимаем бары)
 Close_5mim = C ;
 Mov_5mim = EMA(Close, 15);
TimeFrameRestore(); // Томаш рекомендует каждый раз восстанавливать фрейМ
Close_5mim = TimeFrameExpand(Close_5mim, in5Minute);
Mov_5mim = TimeFrameExpand(Mov_5mim, in5Minute);

BuyCond = Cross(Close_5mim, Mov_5mim);
BuyCondPrice = ValueWhen(BuyCond, Low);// цена покупки

Plot(C, "", colorBlack, styleCandle);
Plot(Close_5mim, "Close_5mim", colorRed);
Plot(Mov_5mim, "Mov_5mim", colorBlue);
Plot(BuyCondPrice, "BuyCondPrice", colorGreen);

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



Зарегистрирован: 29.04.2010
Сообщения: 729
Откуда: Moscow

СообщениеДобавлено: Ср Фев 08, 2012 11:34 am Ответить с цитатой Вернуться к началу

000 писал(а):
Ошибка твоя тут

Йода!! Laughing
Посмотреть профиль Отправить личное сообщение ICQ Number
vadimal



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

СообщениеДобавлено: Ср Фев 08, 2012 1:18 pm Ответить с цитатой Вернуться к началу

Прорисовка к сожалению внесла больше вопросов чем ответов.
Итого: что я вижу,
1. Сигнал на вход получен по 5 мин свече клоуза 11-25 (соответственно это диапазон 11-21 по 11-25 по минуткам)
2. Лоу в этом диапазоне по 5 мин. получается 414, а в диапазоне по 1мин. почему то 412.9. Почему не могу понять. Правильно ли я выделил диапазон свечей на мин. таймфрейме(верхний график)?
3. Как я понимаю код
BuyCond = Cross(Close_5mim, Mov_5mim); - УСЛОВИЯ ПОКУПКИ = ПРИ ПЕРЕСЕЧЕНИИ (СНИЗУ ВВЕРХ) 5МИН.СВЕЧИ С 5МИН ЕМА.(ПО ЗАКРЫТИЮ, С ДИАПАЗОНОМ 15)
BuyCondPrice = ValueWhen(BuyCond, Low);// цена покупки - УСЛОВИЕ ПОКУПКИ ПО ЦЕНЕ = ЛОУ СВЕЧИ КОГДА БЫЛО ПЕРЕСЕЧЕНИЕ (СНИЗУ ВВЕРХ) 5МИН.СВЕЧИ С 5МИН ЕМА.(ПО ЗАКРЫТИЮ, С ДИАПАЗОНОМ 15).

Где я ошибаюсь?
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
vadimal



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

СообщениеДобавлено: Ср Фев 08, 2012 1:21 pm Ответить с цитатой Вернуться к началу

to spitfire

Как понимать твоё высказывание:
1. "Мастер ЙОДА"
2. Залить мне мозг Йодом, я думаю это мне не поможет Smile
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
000
Site Admin


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

СообщениеДобавлено: Ср Фев 08, 2012 3:06 pm Ответить с цитатой Вернуться к началу

vadimal писал(а):

1. Сигнал на вход получен по 5 мин свече клоуза 11-25 (соответственно это диапазон 11-21 по 11-25 по минуткам)

Не факт, что с 11-21 по 11-25.
Ами может присваивать время начала интервала (по умолчанию именно так) тогда с 11-25 по 11-30 и время конца интервала.
vadimal писал(а):

2. Лоу в этом диапазоне по 5 мин. получается 414, а в диапазоне по 1мин. почему то 412.9. Почему не могу понять. Правильно ли я выделил диапазон свечей на мин. таймфрейме(верхний график)?

Это зависит от настроек. Раз не совпадает лоу, то вероятно не правильно.

3. Как я понимаю код
BuyCond = Cross(Close_5mim, Mov_5mim); - УСЛОВИЯ ПОКУПКИ = ПРИ ПЕРЕСЕЧЕНИИ (СНИЗУ ВВЕРХ) 5МИН.СВЕЧИ С 5МИН ЕМА.(ПО ЗАКРЫТИЮ, С ДИАПАЗОНОМ 15)
BuyCondPrice = ValueWhen(BuyCond, Low);// цена покупки - УСЛОВИЕ ПОКУПКИ ПО ЦЕНЕ = ЛОУ СВЕЧИ КОГДА БЫЛО ПЕРЕСЕЧЕНИЕ (СНИЗУ ВВЕРХ) 5МИН.СВЕЧИ С 5МИН ЕМА.(ПО ЗАКРЫТИЮ, С ДИАПАЗОНОМ 15).

Где я ошибаюсь?[/quote]
BuyCond все правильно с поправкой, что ты смотришь это пересечение на минутных свечках. 5 минутные мувинг и закрытие на минутных свечках.
BuyCondPrice - да. С условием что это low минутной свечки на которой состоялось пересечение 5мин мувинга и 5мин закрытия.

Посмотри. Там у тебя на картинке очень хорошо видно пересечение черной ломаной линии Close_5min и синей ломаной линии Mov_5min
А так же хорошо видно зеленую линию BuyCondPrice.

Пока я не понял зачем ты используешь в коде переход на другой фрейм. Если тея интересует low именно 5 минутки, то и тестируй эту систему на 5 мин по простому. Зачем этот огород с переключением с минуток на 5 мин и обратно????

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



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

СообщениеДобавлено: Ср Фев 08, 2012 6:30 pm Ответить с цитатой Вернуться к началу

Изначально логика была такая:
База минутная
1. Вход пересечение ема с клоузом (всё на 5мин таймфрейме).
2. Сигнал на выход (на 5мин таймфрейме) пересечение клоуза с ема.
3. Сам выход не на следующей 5мин. свече после получения сигнала на выход, а на минутной свече.
Ну и соответственно визуальный контроль на разных таймфреймах правильности исполнения кода.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
000
Site Admin


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

СообщениеДобавлено: Ср Фев 08, 2012 9:11 pm Ответить с цитатой Вернуться к началу

А ну да. На выход внимания не обратил...
Будут еще вопросы - спрашивай.

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



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

СообщениеДобавлено: Вс Мар 18, 2012 4:52 pm Ответить с цитатой Вернуться к началу

Олег! Я не смог разрешить свои непонятки по ValueWhen.
Чтоб более предметно разобраться с этой функцией, я упростил систему и взял таймфрейм 1мин.(проще некуда)

_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();

MA1 = MA(C, 5 );
MA2 = MA(C, 60 );
BuyCond = Cross (MA1, MA2) ; // условие покупки
BuyCondPrice = ValueWhen(BuyCond, Low);// цена условия покупки
BuyTimeCond = BarsSince(BuyCond) < 3 ; // на протяжении скольки баров ждем достижения цены покупки
Buy = Cross(BuyCondPrice, Low) AND BuyTimeCond; // покупка
BuyPrice = BuyCondPrice; //покупка по цене
Sell = ( RSI(14 ) > 100); //выход будет по стопу (профит или лосс), поэтому стоит нереальное значение
SetPositionSize( 1, spsShares ); // торговля одной бумагой
//СТОПЫ
ApplyStop(stopTypeLoss, stopModePercent, Optimize( "max. loss stop level", 3.5, 1, 5, 0.25 ), True ); //выходим всегда по стопу
ApplyStop(stopTypeProfit , stopModePercent, Optimize( "max. take profit", 1, 1, 5, 0.25 ), True ); ////выходим всегда по стопу
//ПОСТАНОВКА ЛИНИЙ ДЛЯ ДАЛЬНЕЙШЕГО ОТОБРАЖЕНИЯ В ГРАФИКЕ
Equity(1); // Убираем лишние стрелочки входов-выходов из графика
BP = ValueWhen(Buy,BuyPrice ); // Задаём начало линии показывающей цену покупки
//Рисование
Plot(BuyCondPrice, "BuyCondPrice", colorGreen);
Plot(MA1, "MA1", colorBlue);
Plot(MA2, "MA2", colorRed);
И что я в итоге вижу( поправь если я не прав)
1.
а) 12-40 MA1 пересекает снизу вверх MA2.
б) на этой же свече получаем сигнал на вход
в) на этой же свече получаем цену по которой будем заходить (106.33)
2. По моему (т.к. в настройках backtester у меня стоит лонг по открытию свечи на следующем баре) на этой свече должен быть вход в лонг по цене 106.33 (т.к. такая цена на этой свече была). Но по факту входа в лоне на этой свече нет. Почему?
3. Почему то на этой свече получили вход в лонг и по цене (106.35) то есть выше чем должно быть.
Итого: линия BuyCondPrice = ValueWhen(BuyCond, Low) рисуется правильно, но вход осуществляется игнорируя это условие.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вс Мар 18, 2012 9:07 pm Ответить с цитатой Вернуться к началу

Сигнал на покупку на самом деле возник на свече 2
Код:
Buy = Cross(BuyCondPrice, Low) AND BuyTimeCond; // покупка

Из за того, что в настройках тестера стоит сдвиг на одну свечу он перенесен на свечу 3
При этом цена сделки установлена 106.33, но на свече 3 такой цены нет (её low 106.35) а Ами это проверяет и смещает цену до той, которая реально была.

В общем в настройках тестера сделай покупку на той свечке где был сигнал и всего делов.

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



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

СообщениеДобавлено: Пн Апр 02, 2012 11:37 am Ответить с цитатой Вернуться к началу

Спасибо!(Комп. не работал, поэтому только сейчас благодарю.)
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen