Автор |
Сообщение |
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
Всем привет!
подскажите код для простого алгоритма:
Buy если первый час торгов отторговали в плюс. Вход по уровню закрытия этого часа;
Short если первый час торгов отторговали в минус. Вход по уровню закрытия этого часа;
Выход по Close дня. или по стопу на уровне Open дня.
Вот нашел уже составляющие части кода:
Sell = Cover = Day() != Ref(Day(), 1); // выход на последнем баре дня
SellPrice = CoverPrice = C; // выход по цене закрытия
DOpen = TimeFrameGetPrice( "O", inDaily, 0, expandFirst); // сегодняшнее открытие
Спасибо |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Всетаки есть вопросы.
1. Определяем отторговали в + или - от сегодняшнего открытия или от вчерашнего закрытия
2. Какой фрейм? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
Олег здравствуй!
Не важно закрытие предыдущего дня. Важно как прошел первый час торгов.
Допустим, Открытие 1ого часа торгов (а значит открытие дня)по 100 рублей а его закрытие 98.
Значит шорт по 98 со стопом 100. и наоборот, если закрытие 102 то лонг по 102 со стопом 100.
Закрытие позиции в конце дня.
Ну и видимо однозначно используем часовой фрейм |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
FirstBarInDay = Day() != Ref(Day(), -1);
Buy = C > O AND FirstBarInDay;
Short= C < O AND FirstBarInDay;
BuyPrice = ShortPrice = C;
Sell = Cover = Day() != Ref(Day(), 1);
SellPrice = CoverPrice = C;
ApplyStop(stopTypeLoss, stopModePoint, 100, ExitAtStop = 1, Volatile = False);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
Олег спасибо! Но есть проблемка и видимо в первой строчке.
Тест покупает на последнем часе предыдущего дня. И определение направления рынка определяется по нему же
Вернее, он считает что последний час дня это час который закончился в 23-30, соответственно он берет следущий час (якобы первый час следущего дня), который расчитывает с 23-30 до 00-30...а он конечно дает в итоге закрытие предыдщего дня (по последним 20 минутам)
Где-то настройки нужно может поменять? |
Последний раз редактировалось: Orange2000 (Вт Май 04, 2010 8:54 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Проверяй настройки тестера. У меня все нормально
Цитата: |
Ticker,Trade,Date,Price,Ex. date,Ex. Price,% chg,Profit,% Profit,Shares,Position value,Cum. Profit,# bars,Profit/bar,MAE,MFE,Scale In/Out,
GAZP,Long,11.01.2010 10:00:00,193.64,11.01.2010 18:00:00,194.5,0.44%,265.74,0.44%,309,59834.76,265.74,9,29.53,-1.36%,1.68%,0/0
GAZP,Long,12.01.2010 10:00:00,194.45,12.01.2010 18:00:00,191.8,-1.36%,-824.15,-1.36%,311,60473.95,-558.41,9,-91.57,-2.01%,0.69%,0/0
GAZP,Long,13.01.2010 10:00:00,189.87,13.01.2010 18:00:00,189.3,-0.30%,-176.70,-0.30%,310,58859.70,-735.11,9,-19.63,-0.33%,1.05%,0/0
GAZP,Short,14.01.2010 10:00:00,191.02,14.01.2010 18:00:00,190.83,-0.10%,58.14,0.10%,306,58452.12,-676.97,9,6.46,-0.23%,1.12%,0/0
GAZP,Long,15.01.2010 10:00:00,190.06,15.01.2010 18:00:00,187.86,-1.16%,-677.60,-1.16%,308,58538.48,-1354.57,9,-75.29,-1.16%,1.07%,0/0
GAZP,Long,18.01.2010 10:00:00,188.3,18.01.2010 18:00:00,190.4,1.12%,638.40,1.12%,304,57243.20,-716.17,9,70.93,-0.90%,1.12%,0/0
GAZP,Short,19.01.2010 10:00:00,189.67,19.01.2010 18:00:00,189.76,0.05%,-27.72,-0.05%,308,58418.36,-743.89,9,-3.08,-0.33%,1.22%,0/0
GAZP,Short,20.01.2010 10:00:00,188.6,20.01.2010 18:00:00,185.98,-1.39%,812.20,1.39%,310,58466.00,68.31,9,90.24,-0.69%,1.39%,0/0
GAZP,Short,21.01.2010 10:00:00,186.34,21.01.2010 18:00:00,182.76,-1.92%,1152.76,1.92%,322,60001.48,1221.07,9,128.08,-0.46%,1.92%,0/0
GAZP,Long,22.01.2010 10:00:00,181.51,22.01.2010 18:00:00,181.5,-0.01%,-3.44,-0.01%,344,62439.44,1217.63,9,-0.38,-1.65%,0.82%,0/0
GAZP,Long,25.01.2010 10:00:00,180.2,25.01.2010 18:00:00,182.85,1.47%,916.90,1.47%,346,62349.20,2134.53,9,101.88,-0.70%,2.33%,0/0
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
Нашел причину.
В preferences на вкладке Intraday убрал галочку с Align minute bars.... и все считает теперь правильно!
Еще раз спасибо! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
А еще про стоп. В коде я так понял просто стоп 100 пунктов. а как сделать что бы стопом был Open дня?
использовать:
DOpen = TimeFrameGetPrice( "O", inDaily, 0, expandFirst); ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
настырный
Зарегистрирован: 15.06.2008
Сообщения: 67
|
Orange2000 писал(а): |
А еще про стоп. В коде я так понял просто стоп 100 пунктов. а как сделать что бы стопом был Open дня?
использовать:
DOpen = TimeFrameGetPrice( "O", inDaily, 0, expandFirst); ? |
Скорее всего так:
Код: |
FirstBarInDay = Day() != Ref(Day(), -1);
Buy = C > O AND FirstBarInDay;
Short= C < O AND FirstBarInDay;
BuyPrice = ShortPrice = C;
DOpen = TimeFrameGetPrice( "O", inDaily);
Sell = Day() != Ref(Day(), -1) OR L<=DOpen;
Cover = Day() != Ref(Day(), -1) OR H>=DOpen;
SellPrice = IIF(L<=DOpen, DOpen, C);
CoverPrice = IIF(H>=DOpen, DOpen, C);
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
Все работает, только видимо опечатка в
Код: |
Sell = Day() != Ref(Day(), -1) OR L<=DOpen;
Cover = Day() != Ref(Day(), -1) OR H>=DOpen; |
нужно "-1" на "1" поменять!
Ещераз спасибо за помощь Олег!! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Orange2000 писал(а): |
А еще про стоп. В коде я так понял просто стоп 100 пунктов. а как сделать что бы стопом был Open дня?
использовать:
DOpen = TimeFrameGetPrice( "O", inDaily, 0, expandFirst); ? |
Проще всего так
Код: |
FirstBarInDay = Day() != Ref(Day(), -1);
Buy = C > O AND FirstBarInDay;
Short= C < O AND FirstBarInDay;
BuyPrice = ShortPrice = C;
Sell = Cover = Day() != Ref(Day(), 1);
SellPrice = CoverPrice = C;
ApplyStop(stopTypeLoss, stopModePoint, abs(C - O), ExitAtStop = 1, Volatile = False);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Тут вот в чем тонкость. Если в ApplyStop Volatile = False то размер стопа "фиксируется" в момент сделки и в дальнейшем, пока стоп не сработает или пока сделка не закроется по другой причине не меняется. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Orange2000
Зарегистрирован: 15.10.2009
Сообщения: 185
|
000 писал(а): |
Тут вот в чем тонкость. Если в ApplyStop Volatile = False то размер стопа "фиксируется" в момент сделки и в дальнейшем, пока стоп не сработает или пока сделка не закроется по другой причине не меняется. |
Ну так и должно быть вроде!? Работает как и ожидалось, спасибо.
Сорри, не сразу заметил, что первый вариант написал НастырныйПривык, что только Олег тут помогает В том первом коде неудобно лишь что в ходе теста не видно в сделках когда по стопу выход был. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
настырный
Зарегистрирован: 15.06.2008
Сообщения: 67
|
Orange2000 писал(а): |
000 писал(а): |
Тут вот в чем тонкость. Если в ApplyStop Volatile = False то размер стопа "фиксируется" в момент сделки и в дальнейшем, пока стоп не сработает или пока сделка не закроется по другой причине не меняется. |
Ну так и должно быть вроде!? Работает как и ожидалось, спасибо.
Сорри, не сразу заметил, что первый вариант написал НастырныйПривык, что только Олег тут помогает В том первом коде неудобно лишь что в ходе теста не видно в сделках когда по стопу выход был. |
Я просто сразу старался без ApplyStop сделать код. Т.к. наверняка Вы потом робота будете писать. А на сколько я понял, в роботах ApplyStop не применяется. (Я их еще не писал и не эксплуатировал, увы).
Я тут бываю набегами, да и знаний афл у меня по-меньше, чем у Олега.
Как говорится, чем могу, тем помогу. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
ApplyStop можно в роботе использовать. Только надо обязательно функцию Equity() потом вставлять. И желательно в коде установить минимальный сайз позиции и следить чтобы денег хватало. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|