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



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

СообщениеДобавлено: Вс Май 17, 2009 8:49 pm Ответить с цитатой Вернуться к началу

Замечание понял! Спасибо за помощь. Very Happy

Что же делать с циклом шортового трейлинга?
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Май 18, 2009 7:54 am Ответить с цитатой Вернуться к началу

Teema писал(а):
Замечание понял! Спасибо за помощь. Very Happy

Что же делать с циклом шортового трейлинга?


Если честно я его посмотрел. но т.к. и сам с циклами на Вы, то причину не догнал, хотя косяк на графике явно виден.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

СообщениеДобавлено: Пн Май 18, 2009 8:29 am Ответить с цитатой Вернуться к началу

Кстати говоря. В первоночальном коде тоже ошибка. Вот тут
Код:
stoplevel = BuyPrice[i] - st[i-1];

Надо брать
Код:
BuyPrice[i - 1]

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



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

СообщениеДобавлено: Пн Май 18, 2009 8:47 am Ответить с цитатой Вернуться к началу

И это тоже интересно выглядит
stop[i] = L[i]; // массиву стоп присваиваем значение лоу текущего бара

наверно надо
stop[i] = L[i-1]; // массиву стоп присваиваем значение лоу пред-го бара


Сижу с циклами разбираюсь. Cool
Если не получится, буду только лонг торговать!
(ну позже получится!)
Олег! Интересно, в твоем роботе можно выполнить условия входа
при пробитии уровня, входа на открытии бара и выхода на закрытии
бара? как 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
Откуда: от "Верблюда"

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

Teema писал(а):
И это тоже интересно выглядит
stop[i] = L[i]; // массиву стоп присваиваем значение лоу текущего бара

наверно надо
stop[i] = L[i-1]; // массиву стоп присваиваем значение лоу пред-го бара


Сижу с циклами разбираюсь. Cool


А вот это не обязательно, т.к. дальше ты сравниваеш текущий уровень с прошлым.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
000
Site Admin


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

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

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

СообщениеДобавлено: Пн Май 18, 2009 10:02 am Ответить с цитатой Вернуться к началу

2commenced
Как на текущем баре программа узнает ЛОУ?
В реальной торговле как это прокатит?
Олег, спасибо.
Стратегию отработаю, протестирую за робота возьмусь.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Май 18, 2009 10:21 am Ответить с цитатой Вернуться к началу

Teema писал(а):
2commenced
Как на текущем баре программа узнает ЛОУ?
В реальной торговле как это прокатит?
Олег, спасибо.
Стратегию отработаю, протестирую за робота возьмусь.


Возьмет текущий который будет изменяться в течении бара. Ты посмотри как ты сравниваеш уровень стопа и поймеш что я прав. просто если L ниже предыдушего бара ему автоматом присвоится значение предыдушего (у тебя так в коде написано) и произайдет сработка стопа.

_________________
Юра
Посмотреть профиль Отправить личное сообщение Отправить e-mail
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Пн Май 18, 2009 10:24 am Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Пн Май 18, 2009 10:37 am Ответить с цитатой Вернуться к началу

Разницу понял.
Попробую робота запустить. Посмотреть надо как все эти вещи
в реальности работают.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Teema



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

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

Вот часть кода.
Вопрос. Как тестер отработает условие закрытия позиции
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

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

Teema писал(а):
Вот часть кода.
Вопрос. Как тестер отработает условие закрытия позиции
Cover по цене CoverPrice[i] =stoplevel2.
Конкретно вижу противоречие:
предположим,цена закрытия пока неизвестна, а текущая стала цена
стала выше stoplevel2-произойдет ли покупка?
Предположим цена опять упала ниже stoplevel2 - покупка прошла?
Если цена колебалась выше-ниже stoplevel2 как тестер это
отработает.

А никак. Тестер работет на истории, а на истории никакого "плавающего" закрытия небывает. Все бары сформированы полностью.

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



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

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

Понял. Только реальная торговля избавит от иллюзий.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
commenced
Советник


Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"

СообщениеДобавлено: Вт Май 19, 2009 7:24 am Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Вт Май 19, 2009 7:49 am Ответить с цитатой Вернуться к началу

Юра!
Посмотрел код, всё вроде работает. Внимательно всё изучу.
Попробую сделать повторные входы.
Небольшая идея (не по теме, а по системе):
после срабатывания стопа, Dopen перенести на уровень стопа, для последующего входа в направлении пробоя. Можно сюда вернуться
http://amisite.ru/phpBB2/viewtopic.php?t=89&start=60
ps
А говорил:
"Если честно я его посмотрел. но т.к. и сам с циклами на Вы, то причину не догнал, хотя косяк на графике явно виден."
Скромность! Very Happy Спасибо за участие.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen