Автор |
Сообщение |
vadimal
Зарегистрирован: 02.02.2011
Сообщения: 78
|
Доброго времени суток!
Код такой:
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
|
Ошибка твоя тут
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
|
000 писал(а): |
Ошибка твоя тут
|
Йода!! |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
vadimal
Зарегистрирован: 02.02.2011
Сообщения: 78
|
Прорисовка к сожалению внесла больше вопросов чем ответов.
Итого: что я вижу,
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
|
to spitfire
Как понимать твоё высказывание:
1. "Мастер ЙОДА"
2. Залить мне мозг Йодом, я думаю это мне не поможет |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
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
|
Изначально логика была такая:
База минутная
1. Вход пересечение ема с клоузом (всё на 5мин таймфрейме).
2. Сигнал на выход (на 5мин таймфрейме) пересечение клоуза с ема.
3. Сам выход не на следующей 5мин. свече после получения сигнала на выход, а на минутной свече.
Ну и соответственно визуальный контроль на разных таймфреймах правильности исполнения кода. |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А ну да. На выход внимания не обратил...
Будут еще вопросы - спрашивай. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
vadimal
Зарегистрирован: 02.02.2011
Сообщения: 78
|
Олег! Я не смог разрешить свои непонятки по 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
|
Сигнал на покупку на самом деле возник на свече 2
Код: |
Buy = Cross(BuyCondPrice, Low) AND BuyTimeCond; // покупка |
Из за того, что в настройках тестера стоит сдвиг на одну свечу он перенесен на свечу 3
При этом цена сделки установлена 106.33, но на свече 3 такой цены нет (её low 106.35) а Ами это проверяет и смещает цену до той, которая реально была.
В общем в настройках тестера сделай покупку на той свечке где был сигнал и всего делов. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
vadimal
Зарегистрирован: 02.02.2011
Сообщения: 78
|
Спасибо!(Комп. не работал, поэтому только сейчас благодарю.) |
|
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|