Автор |
Сообщение |
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
Замечание понял! Спасибо за помощь.
Что же делать с циклом шортового трейлинга? |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Teema писал(а): |
Замечание понял! Спасибо за помощь.
Что же делать с циклом шортового трейлинга? |
Если честно я его посмотрел. но т.к. и сам с циклами на Вы, то причину не догнал, хотя косяк на графике явно виден. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Кстати говоря. В первоночальном коде тоже ошибка. Вот тут
Код: |
stoplevel = BuyPrice[i] - st[i-1]; |
Надо брать |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
И это тоже интересно выглядит
stop[i] = L[i]; // массиву стоп присваиваем значение лоу текущего бара
наверно надо
stop[i] = L[i-1]; // массиву стоп присваиваем значение лоу пред-го бара
Сижу с циклами разбираюсь.
Если не получится, буду только лонг торговать!
(ну позже получится!)
Олег! Интересно, в твоем роботе можно выполнить условия входа
при пробитии уровня, входа на открытии бара и выхода на закрытии
бара? как commenced подсказал: (Спасибо!)
либо так
Buy = H >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = Max(O, BuyLevel);// по цене уровня покупки
Short = L<= ShortLevel;
ShortPrice = Min(O, ShortLevel);
либо так
Buy = Ref(C,-1) >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = O;// по цене уровня покупки
Short = Ref(C,-1)<= ShortLevel;
ShortPrice = O;
Какой из этих вариантов предпочтительнее для робота?
С уважением! |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Teema писал(а): |
И это тоже интересно выглядит
stop[i] = L[i]; // массиву стоп присваиваем значение лоу текущего бара
наверно надо
stop[i] = L[i-1]; // массиву стоп присваиваем значение лоу пред-го бара
Сижу с циклами разбираюсь. |
А вот это не обязательно, т.к. дальше ты сравниваеш текущий уровень с прошлым. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Teema писал(а): |
Олег! Интересно, в твоем роботе можно выполнить условия входа
при пробитии уровня, входа на открытии бара и выхода на закрытии
бара? как commenced подсказал: (Спасибо!) |
Запросто. В роботе можно вообще любые условия выполнять. Основа там ( в роботе ) это запись заявки в tri. А уж когда она будет подана вопрос кодирования.
Teema писал(а): |
Buy = H >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = Max(O, BuyLevel);// по цене уровня покупки
Short = L<= ShortLevel;
ShortPrice = Min(O, ShortLevel);
либо так
Buy = Ref(C,-1) >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = O;// по цене уровня покупки
Short = Ref(C,-1)<= ShortLevel;
ShortPrice = O;
Какой из этих вариантов предпочтительнее для робота?
С уважением! |
Это все равно. Эти код для тестирования.
Просто если надо действительно смотреть пробитие закрытием на торгуемом периоде, то С > BuyLevel и сигнал надо брать с предыдущего бара чтобы он выполнился сразу после закрытия старого/открытия нового бара. А если любой пробой ценой уровня (типа сделка по ордеру), то H >= BuyLevel.
И BuyPrice роботу не нужен. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
2commenced
Как на текущем баре программа узнает ЛОУ?
В реальной торговле как это прокатит?
Олег, спасибо.
Стратегию отработаю, протестирую за робота возьмусь. |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Teema писал(а): |
2commenced
Как на текущем баре программа узнает ЛОУ?
В реальной торговле как это прокатит?
Олег, спасибо.
Стратегию отработаю, протестирую за робота возьмусь. |
Возьмет текущий который будет изменяться в течении бара. Ты посмотри как ты сравниваеш уровень стопа и поймеш что я прав. просто если L ниже предыдушего бара ему автоматом присвоится значение предыдушего (у тебя так в коде написано) и произайдет сработка стопа. |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
000 писал(а): |
Teema писал(а): |
Олег! Интересно, в твоем роботе можно выполнить условия входа
при пробитии уровня, входа на открытии бара и выхода на закрытии
бара? как commenced подсказал: (Спасибо!) |
Запросто. В роботе можно вообще любые условия выполнять. Основа там ( в роботе ) это запись заявки в tri. А уж когда она будет подана вопрос кодирования.
Teema писал(а): |
Buy = H >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = Max(O, BuyLevel);// по цене уровня покупки
Short = L<= ShortLevel;
ShortPrice = Min(O, ShortLevel);
либо так
Buy = Ref(C,-1) >= BuyLevel;// покупка если максимум выше уровня покупки
BuyPrice = O;// по цене уровня покупки
Short = Ref(C,-1)<= ShortLevel;
ShortPrice = O;
Какой из этих вариантов предпочтительнее для робота?
С уважением! |
Это все равно. Эти код для тестирования.
Просто если надо действительно смотреть пробитие закрытием на торгуемом периоде, то С > BuyLevel и сигнал надо брать с предыдущего бара чтобы он выполнился сразу после закрытия старого/открытия нового бара. А если любой пробой ценой уровня (типа сделка по ордеру), то H >= BuyLevel.
И BuyPrice роботу не нужен. |
Тут Олег малость неправ разница очень существенна на открытии дня, просто и так тоже можно, но вход будет существенно отличаться от Buy = H >= BuyLevel; или Buy = Ref(H >= BuyLevel,-1); |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
Разницу понял.
Попробую робота запустить. Посмотреть надо как все эти вещи
в реальности работают. |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
Вот часть кода.
Вопрос. Как тестер отработает условие закрытия позиции
Cover по цене CoverPrice[i] =stoplevel2.
Конкретно вижу противоречие:
предположим,цена закрытия пока неизвестна, а текущая цена
стала выше stoplevel2-произойдет ли покупка?
Предположим цена опять упала ниже stoplevel2 - покупка прошла?
Если цена колебалась выше-ниже stoplevel2 как тестер это
отработает.
if(C[i] >stoplevel2)
{
Cover[i] = 1;
CoverPrice[i] =stoplevel2 ;
pos = 0; // в массив pos записываем значение 0
stoplevel2 = 0;
} |
Последний раз редактировалось: Teema (Вс Авг 16, 2009 7:47 am), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Teema писал(а): |
Вот часть кода.
Вопрос. Как тестер отработает условие закрытия позиции
Cover по цене CoverPrice[i] =stoplevel2.
Конкретно вижу противоречие:
предположим,цена закрытия пока неизвестна, а текущая стала цена
стала выше stoplevel2-произойдет ли покупка?
Предположим цена опять упала ниже stoplevel2 - покупка прошла?
Если цена колебалась выше-ниже stoplevel2 как тестер это
отработает.
|
А никак. Тестер работет на истории, а на истории никакого "плавающего" закрытия небывает. Все бары сформированы полностью. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
Понял. Только реальная торговля избавит от иллюзий. |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Teema писал(а): |
Понял. Только реальная торговля избавит от иллюзий. |
Еще как избавит.
Выбросил длинный стоп и переписал короткий.
Код: |
x =Optimize("Уровень", 0.01, 0.01, 1, 0.01);//определяет уровень buy/short, дефолт 60% от вчерашнего диапазона
DH = TimeFrameGetPrice( "H", inDaily,-1,expandFirst);//Максимум вчерашнего дня
DL = TimeFrameGetPrice( "L", inDaily,-1,expandFirst);//минимум вчерашнего дня _закрытие
DOpen = TimeFrameGetPrice( "O", inDaily, 0, expandFirst); // сегодняшнее открытие
Range = DH - DL; // вчерашний диапазон
BuyLevel = DOpen + Range*x;//уровень покупки
ShortLevel = DOpen -Range*x;//уровень шорта
Buy = Cross(H,BuyLevel) ;
Short = Cross(ShortLevel,L);
Sell=0;
Cover=0;
trailARRAY = Null;
trailstop = 0;
for( i = 1; i < BarCount; i++ )
{
if( trailstop == 0 AND Buy[ i ] )
{
trailstop = L[ i ];
}
else Buy[ i ] = 0; // remove excess buy signals
if( trailstop > 0 AND Low[ i ] < trailstop )
{
Sell[ i ] = 1;
SellPrice[ i ] = Min(O[i],trailstop);
trailstop = 0;
}
if( trailstop > 0 )
{
trailstop = Max( L[ i ], trailstop );
trailARRAY[ i ] = trailstop;
}
}
trailARRAY1 = Null;
trailstop1 = 0;
for( i = 1; i < BarCount; i++ )
{
if( trailstop1 == 0 AND Short[ i ] )
{
trailstop1 = H[ i ];
}
else Short[ i ] = 0; // remove excess buy signals
if( trailstop1 > 0 AND H[ i ] > trailstop1 )
{
Cover[ i ] = 1;
CoverPrice[ i ] = Max(O[i],trailstop1);
trailstop1 = 0;
}
if( trailstop1 > 0 )
{
trailstop1 = Min( H[ i ], trailstop1 );
trailARRAY1[ i ] = trailstop1;
}
}
BuyPrice = IIf(Cover==1,Max(CoverPrice,BuyLevel),Max(O,BuyLevel));
ShortPrice = IIf(Sell==1,Min(SellPrice,ShortLevel),Min(O,ShortLevel));
Equity(1);
Plot( Close,"Price",colorBlack,styleBar);
Plot( BuyLevel, "BuyLevel", colorGreen );
Plot( ShortLevel, "ShortLevel", colorRed );
Plot( DOpen, "Open", colorRed );
Plot( trailARRAY,"trailing stop level", colorRed );
Plot( trailARRAY1,"trailing stop level", colorBlue );
PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorGreen, 0,L, Offset=-45);
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone),colorOrange, 0,H, Offset=-45);
PlotShapes(IIf(Short, shapeDownArrow, shapeNone),colorBlack, 0,L, Offset=-45);
PlotShapes(IIf(Cover, shapeUpArrow, shapeNone),colorBlue, 0,H, Offset=-45); |
|
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
Teema
Зарегистрирован: 01.04.2009
Сообщения: 184
|
Юра!
Посмотрел код, всё вроде работает. Внимательно всё изучу.
Попробую сделать повторные входы.
Небольшая идея (не по теме, а по системе):
после срабатывания стопа, Dopen перенести на уровень стопа, для последующего входа в направлении пробоя. Можно сюда вернуться
http://amisite.ru/phpBB2/viewtopic.php?t=89&start=60
ps
А говорил:
"Если честно я его посмотрел. но т.к. и сам с циклами на Вы, то причину не догнал, хотя косяк на графике явно виден."
Скромность! Спасибо за участие. |
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|