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


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

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

Вот такой код я написал. Здесь реализовано добавление с перестановкой стопа при добавлении.


Код:

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

СообщениеДобавлено: Пн Янв 26, 2009 7:00 pm Ответить с цитатой Вернуться к началу

Спасибо, ID!

Кстати твой код как я понял не решает этой проблемы тоже. Например, у тебя не может быть так чтобы система сначала докупилась а потом вылетела по стоп-лоссу на одном и том же баре. В твоем случае она вылетит с недокупленным сайзом и расчетный убыток будет меньше.

Таймфрейм меньше для меня - это тики Sad Если тестировать хотя бы за год то это жесть. Пока накачал с финама на месяц.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Янв 26, 2009 11:28 pm Ответить с цитатой Вернуться к началу

На одном баре нельзя и купить и добавиться. Надо брать более мелкий фрейм чтобы разделить покупку и добавление на разные бары. То же самое и с выходом.

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


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

СообщениеДобавлено: Пн Янв 26, 2009 11:30 pm Ответить с цитатой Вернуться к началу

Кстати. Тут были еще сообщения, а теперь их нет. А я ответ уже написал. Пусть будет, а то жалко... Smile
Цитата:

Хочу воочию убедиться в том о чем говорили многие гуры - что усреднятся вредно

Цитата:

Странно другое: усреднения не ухудшают результат, а улучшают его

Усредняться безусловно вредно, если усреднение является основой торг системы. Т.н. если торг система получает прибыль ТОЛЬКО за счет усреднения, то её надо срочно на помойку.
Онако в некоторых случаях усреднение безусловно может улучшить качество системы. Вопрос только в том, что часто такое бывает если система не окончательно доведена до ума (но не всегда).

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



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

СообщениеДобавлено: Вт Янв 27, 2009 11:03 am Ответить с цитатой Вернуться к началу

Цитата:
Кстати. Тут были еще сообщения, а теперь их нет. А я ответ уже написал. Пусть будет, а то жалко...


Воистину, велик Админ сайта, который отвечает даже на удаленные сообщения! Smile

Только вот как понять улучшит ли усреднение твою систему если сама необходимость разнести по барам усреднение и стоп-лосс уже ее скорее всего ухудшит.. т.к. не получится выйти по "мгновенному" стопу.

А что ты думаешь про усреднения прибыльной позиции, Олег?

***

А у меня вот еще какой вопрос. Можно ли в Амиброкер ввести свои входы-выходы? Наверняка есть какая-нибудь функция которая считает сделки из текстового файла, и далее загнав их в массив Buy циклом я их обработаю. Но может есть способ попроще? Было бы крайне интересно ввести в Ами свои "ручные" сделки и поиграться со стопами.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Янв 27, 2009 12:30 pm Ответить с цитатой Вернуться к началу

Dymytry писал(а):

А что ты думаешь про усреднения прибыльной позиции, Олег?

Думаю прибыльную добавлять хорошо только при достаточно длительном удержании позиции и торговле тренд фоловинг.

Dymytry писал(а):

А у меня вот еще какой вопрос. Можно ли в Амиброкер ввести свои входы-выходы? Наверняка есть какая-нибудь функция которая считает сделки из текстового файла, и далее загнав их в массив Buy циклом я их обработаю. Но может есть способ попроще? Было бы крайне интересно ввести в Ами свои "ручные" сделки и поиграться со стопами.

Попадался мне однажды код который из текстовика сделки брал. Проще по моему никак.

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


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

СообщениеДобавлено: Ср Янв 28, 2009 4:27 am Ответить с цитатой Вернуться к началу

Цитата:
А что ты думаешь про усреднения прибыльной позиции


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



Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва

СообщениеДобавлено: Ср Фев 11, 2009 9:05 pm Ответить с цитатой Вернуться к началу

Приветствую участников форума!
Это моё первое сообщение.
Хочу поднять вопрос про отображение на графике мест срабатывания системы, т.е. покупок и продаж. У меня похоже не отображаются стрелками срабатывания trailing stop. Как такое может быть и как исправить?
Второй вопрос тоже про стрелочки. Как их настроить, чтобы не пропадали (убирать их самому)?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Фев 11, 2009 9:36 pm Ответить с цитатой Вернуться к началу

А стрелки откуда? Поясню. Вариантов отображения стрелок в принципе 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
Откуда: Москва

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

Спасибо, вроде получилось.
Использую вот такой код:
PlotShapes( Buy OR Sell, IIf( Buy, colorGreen, colorRed ), 0, IIf( Buy, Low, High ) );

Пытался добавить с торговую систему условие для определения дневной сессии.
day_session = Hour() > 18;
Не работает и могу понять, что не так Question
Посмотреть профиль Отправить личное сообщение
commenced
Советник


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

СообщениеДобавлено: Чт Фев 12, 2009 7:06 pm Ответить с цитатой Вернуться к началу

Саня писал(а):
Спасибо, вроде получилось.
Использую вот такой код:
PlotShapes( Buy OR Sell, IIf( Buy, colorGreen, colorRed ), 0, IIf( Buy, Low, High ) );

Пытался добавить с торговую систему условие для определения дневной сессии.
day_session = Hour() > 18;
Не работает и могу понять, что не так Question


Ты знак не правильно поставил, либо под дневной ты имееш ввиду вечерку. day_session = Hour() < 18;

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


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

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

Саня писал(а):
Спасибо, вроде получилось.
Использую вот такой код:
PlotShapes( Buy OR Sell, IIf( Buy, colorGreen, colorRed ), 0, IIf( Buy, Low, High ) );

Пытался добавить с торговую систему условие для определения дневной сессии.
day_session = Hour() > 18;
Не работает и могу понять, что не так Question

Вообщето правильнее смотреть стрелки по результатам ткста (способ 2)
На счет дневной сессии. Странно, что не работает. Только одно но. Почему Hour() > 18; ? Может надо < по идее дневная сессия вероятно до 18 часов...

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



Зарегистрирован: 11.02.2009
Сообщения: 53
Откуда: Москва

СообщениеДобавлено: Чт Фев 12, 2009 7:28 pm Ответить с цитатой Вернуться к началу

Со знаком ошибка была Embarassed
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Фев 12, 2009 9:51 pm Ответить с цитатой Вернуться к началу

Саня писал(а):
Со знаком ошибка была Embarassed

Так заработало или нет?

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



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

СообщениеДобавлено: Сб Апр 18, 2009 3:34 pm Ответить с цитатой Вернуться к началу

И снова Здравствуйте!

Хочу обратиться к своему старому вопросу который в прошлый раз не добил.

Я хочу сделать код, который будет считывать мои входы из отчета брокера и заносить их в массивы 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, где их искать?
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen