Автор |
Сообщение |
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
Вот такой код я написал. Здесь реализовано добавление с перестановкой стопа при добавлении.
Код: |
for(i=1;i<BarCount;i++)
{
if(Short[i])// поступил сигнал шорт
{
if(pos_short[i-1])// проверяю: нахожусь ли я уже в позиции
{
Short[i]= 0; //если я в позиции, то сигнал на шорт игнорирую
pos_short[i]= pos_short[i-1]; // позиция сохраняется
stop_short[i]= stop_short[i-1]; // стоп-приказ остается там, где я его поставил
my_priceatshort[i]= my_priceatshort[i-1];
my_atr_short[i]= my_atr_short[i-1];
my_lowsinceshort[i]= Min(L[i],my_lowsinceshort[i-1]);
}
else
{
pos_short[i]= 1;//если я не в позиции, то // вхожу в рынок
stop_short[i]= ShortPrice[i]+my_atr[i]*2; // ставлю стоп-лосс на уровень 2 атр
my_priceatshort[i]= ShortPrice[i];
my_atr_short[i]= my_atr[i];
my_lowsinceshort[i]= L[i];
SetPositionSize (0.01/my_atr,spsPercentOfEquity);
}
}
else// сигнал шорт не поступил
{
pos_short[i]= pos_short[i-1]; // позиция сохраняется
stop_short[i]= stop_short[i-1]; // стоп-приказ остается там же где и стоял
my_priceatshort[i]= my_priceatshort[i-1];
my_atr_short[i]= my_atr_short[i-1];
if(pos_short[i-1])
{
my_lowsinceshort[i]= Min(L[i],my_lowsinceshort[i-1]);
}
else
{
my_lowsinceshort[i]= 0;
}
}
if(pos_short[i]) // Если нахожусь в позиции, то
{
if(H[i]>=stop_short[i]) // Проверяю стоп-приказ
{
Cover[i]= 1;
CoverPrice[i]= stop_short[i]+spread;
pos_short[i]= 0;
my_priceatshort[i]= 0;
my_lowsinceshort[i]= 0;
my_atr_short[i]= 0;
stop_short[i]= 0;
}
else
{
if(H[i-1]<my_hhv_exit[i-1] AND H[i]>=my_hhv_exit[i]) // Проверка сигнала на выход из рынка
{
Cover[i]= 1;
CoverPrice[i]= my_hhv_exit[i-1]+spread;
pos_short[i]= 0;
my_priceatshort[i]= 0;
my_lowsinceshort[i]= 0;
my_atr_short[i]= 0;
stop_short[i]= 0;
}
else
{
if(scale_1)
{
if( my_lowsinceshort[i-1] > my_priceatshort[i]-2*my_atr_short[i-1] AND // Добавление №1
my_lowsinceshort[i] <= my_priceatshort[i]-2*my_atr_short[i]) //
{
Short[i]= sigScaleIn;
ShortPrice[i]= my_priceatshort[i]-2*my_atr_short[i];
my_scale_1[i]= 1;
stop_short[i]= my_priceatshort[i];
SetPositionSize (100,IIf(Short==sigScaleIn AND my_scale_1[i],spsPercentOfPosition,spsNoChange));
}
}
if(scale_2)
{
if( my_lowsinceshort[i-1] > my_priceatshort[i]-4*my_atr_short[i] AND // Добавление №2
my_lowsinceshort[i] <= my_priceatshort[i]-4*my_atr_short[i]) //
{
Short[i]= sigScaleIn;
ShortPrice[i]= my_priceatshort[i]-4*my_atr_short[i];
my_scale_2[i]= 1;
stop_short[i]= my_priceatshort[i]-2*my_atr_short[i];
SetPositionSize (50,IIf(Short==sigScaleIn AND my_scale_2,spsPercentOfPosition,spsNoChange));
}
}
if(scale_3)
{
if( my_lowsinceshort[i-1] > my_priceatshort[i]-6*my_atr_short[i] AND // Добавление №3
my_lowsinceshort[i] <= my_priceatshort[i]-6*my_atr_short[i]) //
{
Short[i]= sigScaleIn;
ShortPrice[i]= my_priceatshort[i]-6*my_atr_short[i];
my_scale_3[i]= 1;
stop_short[i]= my_priceatshort[i]-4*my_atr_short[i];
SetPositionSize (25,IIf(Short==sigScaleIn AND my_scale_3,spsPercentOfPosition,spsNoChange));
}
}
}
}
}
} |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Dymytry
Зарегистрирован: 28.12.2008
Сообщения: 21
|
Спасибо, ID!
Кстати твой код как я понял не решает этой проблемы тоже. Например, у тебя не может быть так чтобы система сначала докупилась а потом вылетела по стоп-лоссу на одном и том же баре. В твоем случае она вылетит с недокупленным сайзом и расчетный убыток будет меньше.
Таймфрейм меньше для меня - это тики Если тестировать хотя бы за год то это жесть. Пока накачал с финама на месяц. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
На одном баре нельзя и купить и добавиться. Надо брать более мелкий фрейм чтобы разделить покупку и добавление на разные бары. То же самое и с выходом. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Кстати. Тут были еще сообщения, а теперь их нет. А я ответ уже написал. Пусть будет, а то жалко...
Цитата: |
Хочу воочию убедиться в том о чем говорили многие гуры - что усреднятся вредно
|
Цитата: |
Странно другое: усреднения не ухудшают результат, а улучшают его
|
Усредняться безусловно вредно, если усреднение является основой торг системы. Т.н. если торг система получает прибыль ТОЛЬКО за счет усреднения, то её надо срочно на помойку.
Онако в некоторых случаях усреднение безусловно может улучшить качество системы. Вопрос только в том, что часто такое бывает если система не окончательно доведена до ума (но не всегда). |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Dymytry
Зарегистрирован: 28.12.2008
Сообщения: 21
|
Цитата: |
Кстати. Тут были еще сообщения, а теперь их нет. А я ответ уже написал. Пусть будет, а то жалко... |
Воистину, велик Админ сайта, который отвечает даже на удаленные сообщения!
Только вот как понять улучшит ли усреднение твою систему если сама необходимость разнести по барам усреднение и стоп-лосс уже ее скорее всего ухудшит.. т.к. не получится выйти по "мгновенному" стопу.
А что ты думаешь про усреднения прибыльной позиции, Олег?
***
А у меня вот еще какой вопрос. Можно ли в Амиброкер ввести свои входы-выходы? Наверняка есть какая-нибудь функция которая считает сделки из текстового файла, и далее загнав их в массив Buy циклом я их обработаю. Но может есть способ попроще? Было бы крайне интересно ввести в Ами свои "ручные" сделки и поиграться со стопами. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Dymytry писал(а): |
А что ты думаешь про усреднения прибыльной позиции, Олег?
|
Думаю прибыльную добавлять хорошо только при достаточно длительном удержании позиции и торговле тренд фоловинг.
Dymytry писал(а): |
А у меня вот еще какой вопрос. Можно ли в Амиброкер ввести свои входы-выходы? Наверняка есть какая-нибудь функция которая считает сделки из текстового файла, и далее загнав их в массив Buy циклом я их обработаю. Но может есть способ попроще? Было бы крайне интересно ввести в Ами свои "ручные" сделки и поиграться со стопами.
|
Попадался мне однажды код который из текстовика сделки брал. Проще по моему никак. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
Цитата: |
А что ты думаешь про усреднения прибыльной позиции |
Система с добавкой при движении цены в нужном направлении в разы увеличивает доходность при маленьком увеличении макс просадки. Это касается трендследующих систем как заметил Олег |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Саня
Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва
|
Приветствую участников форума!
Это моё первое сообщение.
Хочу поднять вопрос про отображение на графике мест срабатывания системы, т.е. покупок и продаж. У меня похоже не отображаются стрелками срабатывания trailing stop. Как такое может быть и как исправить?
Второй вопрос тоже про стрелочки. Как их настроить, чтобы не пропадали (убирать их самому)? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А стрелки откуда? Поясню. Вариантов отображения стрелок в принципе 2
1. Написать код и в этом коде вывести сигналы покупки продажи в виде стрелок при помощи ф-ции PlotShape();
2. После теста правой кнопкой на списке сделок и там выбрать Show arrows for actual trades
Если второе, то как убрать отображение стрелок я к сожалению не знаю. Можно только зайти в настройки графика (правой кнопкой мыши -> Parameters) и на закладке Axis & greed поставить show trading arrows - No
В первом случае для срабатывания стопов и отображения их на чарте необходимо использовать ф-цию Equity(); При этом надо иметь ввиду, что при срабатывании стопа в массивы сделок закрытия сделок Sell и Cover будет записана 4 (не 1)
Во втором случае стрелки обязательно должны быть... Да и в списке сделок должно быть написано что сделка закрылась по трейлингу (trail) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Саня
Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва
|
Спасибо, вроде получилось.
Использую вот такой код:
PlotShapes( Buy OR Sell, IIf( Buy, colorGreen, colorRed ), 0, IIf( Buy, Low, High ) );
Пытался добавить с торговую систему условие для определения дневной сессии.
day_session = Hour() > 18;
Не работает и могу понять, что не так |
|
|
Посмотреть профиль Отправить личное сообщение |
|
commenced
Советник
Зарегистрирован: 08.04.2008
Сообщения: 643
Откуда: от "Верблюда"
|
Саня писал(а): |
Спасибо, вроде получилось.
Использую вот такой код:
PlotShapes( Buy OR Sell, IIf( Buy, colorGreen, colorRed ), 0, IIf( Buy, Low, High ) );
Пытался добавить с торговую систему условие для определения дневной сессии.
day_session = Hour() > 18;
Не работает и могу понять, что не так |
Ты знак не правильно поставил, либо под дневной ты имееш ввиду вечерку. day_session = Hour() < 18; |
_________________ Юра |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Саня писал(а): |
Спасибо, вроде получилось.
Использую вот такой код:
PlotShapes( Buy OR Sell, IIf( Buy, colorGreen, colorRed ), 0, IIf( Buy, Low, High ) );
Пытался добавить с торговую систему условие для определения дневной сессии.
day_session = Hour() > 18;
Не работает и могу понять, что не так |
Вообщето правильнее смотреть стрелки по результатам ткста (способ 2)
На счет дневной сессии. Странно, что не работает. Только одно но. Почему Hour() > 18; ? Может надо < по идее дневная сессия вероятно до 18 часов... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Саня
Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва
|
Со знаком ошибка была |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Саня писал(а): |
Со знаком ошибка была |
Так заработало или нет? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Dymytry
Зарегистрирован: 28.12.2008
Сообщения: 21
|
И снова Здравствуйте!
Хочу обратиться к своему старому вопросу который в прошлый раз не добил.
Я хочу сделать код, который будет считывать мои входы из отчета брокера и заносить их в массивы Buy Sell Ami для дальнейшего анализа.
1) может кто знает где лежит готовый код?
2) если нет то что не так в моем:
Цитата: |
i=0;
fh = fopen( "c:\\test.txt", "r");
if( fh )
{
while( ! feof( fh ) )
{
//buy-sell, price, time
theaction[i]=StrExtract(fgets( fh ),0);
theprice[i]=StrExtract(fgets( fh ),1);
thetime[i]=StrExtract(fgets( fh ),2);
i=i+1;
}
}
else
{
printf("ERROR: file can not be found (does not exist)");
}
I=i;
TheTimes=TimeNum();
for( j = 0; j < BarCount; j++ )
{
//thetest[j]=theprice[1];
for(i=0;i<I;i++)
{
if(thetime[i]==TheTimes[j] AND theaction[i]=="B")
{
Buy[j] = 1;
BuyPrice[j]=theprice[i];
}
if(thetime[i]==TheTimes[j] AND theaction[i]=="S")
{
Short[j] = 1;
ShortPrice[j]=theprice[i];
}
}//second for
}//first for
|
Проблема в том что я даже не понимаю как мне проверить занеслись ли данные из файла в мои массивы. Я не понимаю куда выводит данные printf, где их искать? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|