Четверг, 28.03.2024, 21:10
Игрушки от Vinin
Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Форум » Советники и индикаторы » Игрушки » Адаптивный советник (Адаптивный советник)
Адаптивный советник
ivandurakДата: Понедельник, 16.11.2009, 19:03 | Сообщение # 16
Рядовой
Группа: Проверенные
Сообщений: 17
Репутация: 2
Статус: Offline
на сколько удалось понять ваш код функции Analiz(), идет пересчет набора машек ( пусть будет для выработки самой идеи ). Затем считается профит в вашем случае по 1000 сделок для каждой стратегии , возвращается номер стратегии которая принесла макс профит .
Имхо не очень , если сделки прокалибровать под постоянный лот , нужно сделать анализ на линейность эквити , к тому же 1000 сделок для ответа многовато .Нечто подобное сам изобретаю , у мну получилось что для анализа достатточно до 100 сделок этот параметр оптимизируется , при условии , что на каждый сигнал открывается по несколку позиций , реальное число сделок для анализа в районе 10-30 .
 
vininДата: Понедельник, 16.11.2009, 19:05 | Сообщение # 17
Admin
Группа: Администраторы
Сообщений: 299
Репутация: 12
Статус: Offline
Quote (ivandurak)
на сколько удалось понять ваш код функции Analiz(), идет пересчет набора машек ( пусть будет для выработки самой идеи ). Затем считается профит в вашем случае по 1000 сделок для каждой стратегии , возвращается номер стратегии которая принесла макс профит .
Имхо не очень , если сделки прокалибровать под постоянный лот , нужно сделать анализ на линейность эквити , к тому же 1000 сделок для ответа многовато .Нечто подобное сам изобретаю , у мну получилось что для анализа достатточно до 100 сделок этот параметр оптимизируется , при условии , что на каждый сигнал открывается по несколку позиций , реальное число сделок для анализа в районе 10-30 .

У меня оптимальное количество сделок получалось 25-30.
Но сам анализ ни к черту не годится. Взял для примера самый простой вариант.

 
GlobeДата: Понедельник, 16.11.2009, 19:44 | Сообщение # 18
Рядовой
Группа: Проверенные
Сообщений: 13
Репутация: 0
Статус: Offline
Quote (vinin)
Модуль виртуальной торговли можно полностью заменить.
а вот подскажите, ув. Vinin, эти самые модули виртуальной торговли, более рационально заменяющие собой периодическую автооптимизацию (я их назначение сейчас именно так себе представляю) - они могут быть прикручены совершенно к любой ТС или только к самой простой - как на машках, например. Под сложной ТС я подразумеваю полный мультик: несколько фреймов, несколько валют, несколько стратегий, подающих сигналы, динамические стопы, сложным MM. Не превратится ли написание модуля виртуальной торговли для такой ТС в задачу, сопоставимую по трудоемкости с самой ТС? Или можно тут можно вполне обойтись и малой кровью. Не подступался к такому модулю еще - хотелось бы прежде услышать Мнение, стоит ли стремглавь пускаться во все тяжкие?
 
vininДата: Понедельник, 16.11.2009, 19:47 | Сообщение # 19
Admin
Группа: Администраторы
Сообщений: 299
Репутация: 12
Статус: Offline
Quote (Globe)
ти самые модули виртуальной торговли, более рационально заменяющие собой периодическую автооптимизацию (я их назначение сейчас именно так себе представляю) - они могут быть прикручены совершенно к любой ТС или только к самой простой - как на машках, например. Под сложной ТС я подразумеваю полный мультик: несколько фреймов, несколько валют, несколько стратегий, подающих сигналы, динамические стопы, сложным MM. Не превратится ли написание модуля виртуальной торговли для такой ТС в задачу, сопоставимую по трудоемкости с самой ТС? Или можно тут можно вполне обойтись и малой кровью. Не подступался к такому модулю еще - хотелось бы прежде услышать Мнение, стоит ли стремглавь пускаться во все тяжкие?

Что бы ответить надо знать Вашу ТС. Если есть сигналы на вход и выход то можно сделать аналогичную систему. И особых проблем она не должна вызывать. Логика то уже у Вас есть.

 
GlobeДата: Понедельник, 16.11.2009, 19:56 | Сообщение # 20
Рядовой
Группа: Проверенные
Сообщений: 13
Репутация: 0
Статус: Offline
Quote (ivandurak)
нужно сделать анализ на линейность эквити

Алексей, а вот подскажите - каким образом это делаете: 1) в модули виртуальной торговли; 2) в Тестере (в отчете ведь нет показателя, который бы отображал равномерность распределения прибыли по сделкам - вариант посмотреть глазками на кривую не подходит)
 
vininДата: Понедельник, 16.11.2009, 20:02 | Сообщение # 21
Admin
Группа: Администраторы
Сообщений: 299
Репутация: 12
Статус: Offline
Я попытаюсь ответить, хотя и мне задано. Я использую свой критерий оптимизации иногда. Добавляется несколько функций, которые мне делают нужные расчеты. Если результат устраивает, то идет запись в файл.
Потом остается файл отчета проанализировать и принять решение.
Да, получается менее удобно, но пользоваться можно.
 
ivandurakДата: Понедельник, 16.11.2009, 20:31 | Сообщение # 22
Рядовой
Группа: Проверенные
Сообщений: 17
Репутация: 2
Статус: Offline
Вот мой критерий оценки ТС . Работа далеко не окончена . Это пристрелочный вариант , но вполне работоспособна .

double AnalisEquty(int magic_analis,int position_analis)
{
// Должна расчитать качество ТС по последним Totalanalis сделкам по алгоритму 1. формируется массив
// по последним Totalanalis сделкам вида сд1,сд1+сд2,сд1+сд2+сд3, и тд 2. По полученному массиву
// строится линейная регрессия 2. расчитывается хитрая десперсия (вместо среднего значения берется
// линия регрессии) 3. Угол наклона линейной регрессии делим на кол-во сделок (Totalanalis) и на хитрую
// дисперсию чем больше получаемое значение, тем лучше качество ТС .
double Profit;
int x ,i,j ;
double Summ_x,Summ_y,Summ_xy,Summ_x_2,b,CumProfit,a,Sredn_y ,AC;
double Pi=3.14159265358979 ,Deviation,StdDeviation;
for (i=OrdersHistoryTotal()-1 ; i >= 0; i--) // формирование массива последних position_analis сделок
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) ;
if ((OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderMagicNumber()==magic_analis)
{
if( OrderType() ==OP_BUY )
{ Profit=(OrderClosePrice()-OrderOpenPrice())*OrderLots()*AccountLeverage( ) ;}// считаем профиты для лонг
if( OrderType() ==OP_SELL )
{ Profit=(OrderOpenPrice()-OrderClosePrice())*OrderLots()*AccountLeverage( ) ;}// и шорт позиций
Analis[position_analis-j]=Profit ; // в самом большом индексе последняя сделка .Чем меньше индекс тем старше результат сделки.
if (j == position_analis) // масив Analis[] на глобальном уровне
{ break ;}
j++ ;
}
}
for (i=1; i < position_analis ;i++)
{
CumProfit=Analis[i] ;
Analis[i]=CumProfit+Analis[i-1];
}
// Print("Cумма последних ",position_analis," равна ",Analis[position_analis-1]) ;
for ( x=0 ;x < Totalanalis ; x++) // расчет линейной регрессии на массив сделок
{
Summ_x=Summ_x+x;
Summ_y=Summ_y+Analis[x];
Summ_xy=Summ_xy+x*Analis[x];
Summ_x_2=Summ_x_2+MathPow(x,2);
}
b=((Totalanalis-1)*Summ_xy-Summ_x*Summ_y)/((position_analis-1)*Summ_x_2-MathPow(Summ_x,2));
a=(Summ_y-b*Summ_x)/(position_analis-1);
for ( x=0 ;x < position_analis ; x++) // расчет хитрой дисперсии
{
if ( b >0 )
{
AC= MathAbs(Analis[x]-(b*x+a))*MathSin(Pi/2-MathArctan(b)) ; //расстояние от линии лин регрессии до результата сделки
} // при положительном угле
if ( b<0 )
{
AC=MathAbs(Analis[x]-(b*x+a))*MathSin(MathArctan(b)-Pi/2) ; //расстояние от линии лин регрессии до результата сделки
} // // при отрицательном угле
Deviation=Deviation+ MathPow(AC,2) ;
}
StdDeviation=MathSqrt(Deviation/position_analis);
return((b/position_analis)/StdDeviation*10000) ; // вычисляем коээфициент пригодности
// return(b) ;
}

Добавлено (16.11.2009, 20:31)
---------------------------------------------

Quote (Globe)
Не подступался к такому модулю еще - хотелось бы прежде услышать Мнение, стоит ли стремглавь пускаться во все тяжкие?

Тут есть примеры виртуальной торговли , можете прикинуть работу http://codebase.mql4.com/ru/
У мну вертуал с ограничением по одному таймфрейму и одному инструменту , с поддержкой торговых функций как в MQL код около 1000 строк .

 
vininДата: Понедельник, 16.11.2009, 21:11 | Сообщение # 23
Admin
Группа: Администраторы
Сообщений: 299
Репутация: 12
Статус: Offline
Расписал функцию фиртуальной торговли

//------------------------------------------------------------------
// Функция виртуальной торговли
//------------------------------------------------------------------
void VirtualTrade(int pos){
int Id, tmpBar;
// формирование массива значений машки на текущем баре (1) и предыдущем
for (int i=0;i<N;i++) {
if (Bars-pos<MA_Period[i]) continue;
MA_Value[i,1]=MA_Value[i,0];
MA_Value[i,0]=iMA(NULL,0,MA_Period[i],0,MA_Mode,MA_Price,pos+1);
}
// Поиск пересечений
for (i=0;i<N-1;i++) {
// Проверка на пересечение
if ((MA_Value[i,0]-MA_Value[i,1])*(MA_Value[i+1,0]-MA_Value[i+1,1])<0) { // Если одна разница машек положительна, а другая отрицательно то было пересечение машек
if (CandleId[i]>=0) { // Проверка были ранее сделки по этой паре
Id=i*CountOrder+CandleId[i]; // Расчет индекса массива
Candle[Id,3]=Open[pos]; // Цена закрытия виртуальной позиции
Candle[Id,7]=Time[pos]; // Время закрытия виртуальной позиции
tmpBar=iBarShift(NULL,0,Candle[Id,6]); // Поиск бара открытия виртуальной позиции
Candle[Id,1]=High[iHighest(NULL,0,MODE_HIGH,tmpBar-pos,pos)]; // Максимальная цена
Candle[Id,2]=Low[ iLowest( NULL,0,MODE_LOW, tmpBar-pos,pos)]; // Минимальная цена
}
CandleId[i]++; // Увеличиваем Индекс пары
if (CandleId[i]==CountOrder) { // Если индекс равен расчетному количеству позиций,
CandleId[i]=0; // то начнем сначала
bCandle[i]=true; // Отметим, что по данной паре сделан полный расчет (круг прошли)
}
Id=i*CountOrder+CandleId[i]; // Расчет временного индекса
Candle[Id,0]=Open[pos]; // Цена открытия виртуальной позиции
Candle[Id,6]=Time[pos]; // Время открытия виртуальной позиции
Candle[Id,4]=iif((MA_Value[i,0]-MA_Value[i,1])>0,1,-1); // Тип виртуальной позиции (1 - Бай, -1 - Селл)
}
}
}

 
vininДата: Понедельник, 16.11.2009, 21:18 | Сообщение # 24
Admin
Группа: Администраторы
Сообщений: 299
Репутация: 12
Статус: Offline
Модуль анализа

//======================================================================================================
// Функция анализа виртуальной торговли
//======================================================================================================
int Analiz(){
// Проверка готовности (по каждой паре машек должен был быть получен сигнал готовности.
// Если данных недостаточно, то прервать обработку и вернуть -1
bool bStart=true;
for (int i=0;i<N-1;i++) bStart=bStart && bCandle[i];
if (!bStart) return(-1);

// Все нормально, проводим анализ
int Id;
double MaxProfit;
for (i=0;i<N-1;i++) {
for (int j=0;j<CountOrder;j++) {
Id=i*CountOrder+j; // Временный индекс
if (Candle[Id,4]>0) { // Сделка БАЙ
Profit[i,0]+=(Candle[Id,3]-Candle[Id,0]); // Считаем профит/убыток
Profit[i,1]+=(Candle[Id,1]-Candle[Id,0]); // возможная прибыль
Profit[i,2]+=(Candle[Id,2]-Candle[Id,0]); // Просадка
} else if (Candle[Id,4]<0) { // Сделка СЕЛЛ
Profit[i,0]+=(Candle[Id,0]-Candle[Id,3]); // Профит/убыток
Profit[i,1]+=(Candle[Id,0]-Candle[Id,2]); // возможная прибыль
Profit[i,2]+=(Candle[Id,0]-Candle[Id,1]); // Просадка
}
}
}
for (i=0;i<CountOrder;i++)
for (j=0;j<3;j++)
Profit[i,j]=Profit[i,j]/CountOrder; // считаем среднее
// Ищем максимально прибыльную среднюю сделку
MaxProfit=Profit[0,0];
Id=0;
for (i=1;i<CountOrder;i++)
if (MaxProfit<Profit[i][0]) {
MaxProfit=Profit[i][0];
Id=i;
}

// Возвращаем номер найденной пары
return(Id);
}

 
vininДата: Понедельник, 16.11.2009, 21:32 | Сообщение # 25
Admin
Группа: Администраторы
Сообщений: 299
Репутация: 12
Статус: Offline
Если что в приведенном коде не ясно, то объясню
 
riderДата: Вторник, 17.11.2009, 00:53 | Сообщение # 26
Сержант
Группа: Группа 1
Сообщений: 34
Репутация: 1
Статус: Offline
Quote (vinin)
Quote (Globe)вот VictorArt c mql-коммунити расхваливал свой адаптивный советник UmnikTrader http://www.umnick.com/rus/fxsignals/default.asp но что-то его запатентованный цифровой мозг сплоховал и на ПАММе советник слил депозит вдрыск http://www.alpari.ru/ru/pamm/intro/login/56465/partner/58767/ Не хочу как-то комментировать его разработку. Не вижу в этом никакого смысла (для себя).

Возможно смысла комментировать и нет, но адаптивности в его, не советнике, подходе больше, чем в виртуализации торговли.
Если все правильно понял, про виртуальность, то мы берем две машки (для примера), оптимизируем их параметры на каком-то участке истории до получения "достоверного" результата, а затем используем эти параметры при торговле. Только используются при этом не штатные средства терминала, а специально написанные, не самые простые, функции. И чем это отличается от автооптимизации или той же ручной оптимизации? Где адаптация к текущему состоянию рынка, а не к истории?

Сегодня набросок примитивного эксперта сделал. Принцип почти сумасшедший (как и название :)))):
- первая поза открывается в направлении Close 2-х последних баров
- через заданные интервалы времени анализируется суммарный OrderProfit, если растет - добавляем позицию, начинает падать - закрываем все и открываемся в противоположном направлении
Оптимизируемый параметр один - интервал анализа.
О прибыльности в таком виде речь не идет.
Я к тому, что принцип адаптивности, это, прежде всего, реакция ТС (или обратная связь - недавно уже писал об этом) на текущий рынок, а не на прошлые его состояния. Мне, кажется, что копать нужно в этом направлении.
Все что нам нужно, это в каждый момент времени выбрать один из трех вариантов действий: купить-продать-отсидеться на заборе..... история ответа не подскажет.
Имхо, разумеется.
PS Код на всякий случай выложу. Только не пинайте - все на скорую руку smile

Прикрепления: Madness_v1.0.mq4 (25.1 Kb)


"А правильно я вчера переделал, то что сделал позавчера?"
 
vininДата: Вторник, 17.11.2009, 06:01 | Сообщение # 27
Admin
Группа: Администраторы
Сообщений: 299
Репутация: 12
Статус: Offline
Для меня адаптация заключается, что для работы ищутся машки, которые в текущий момент дают максимальную прибыльность. На самом делел это сродни оптимизации, но которая делается автоматом в советнике. Я конечно могу и ошибаться. Но опять же механизм принятия решения (какие машки использовать) может быть отличным.

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

 
riderДата: Вторник, 17.11.2009, 07:34 | Сообщение # 28
Сержант
Группа: Группа 1
Сообщений: 34
Репутация: 1
Статус: Offline
Ловлю на слове smile
Витя, тогда рацуха к виртуализации.
Виртуальная торговля используется только при первом запуске для набора необходимой статистики. В дальнейшем для подстройки используются результаты реальной торговли. Правильно?
Тогда ничто не мешает при запуске эксперта использовать штатную оптимизацию, только в автоматическом режиме, и использовать ее результаты.....

PS Кстати, у меня твой эксперт почему-то не открыл ни одной позы. История глубокая, Альпари.


"А правильно я вчера переделал, то что сделал позавчера?"
 
vininДата: Вторник, 17.11.2009, 07:50 | Сообщение # 29
Admin
Группа: Администраторы
Сообщений: 299
Репутация: 12
Статус: Offline
Но только сперва вариант Алексея Федорова (ivandurak) адаптировать надо еще.
 
riderДата: Вторник, 17.11.2009, 08:14 | Сообщение # 30
Сержант
Группа: Группа 1
Сообщений: 34
Репутация: 1
Статус: Offline
Как топикстартер, ты не хочешь эту ветку здесь отрекламировать: http://forum.mql4.com/ru/27523/page11 ?

"А правильно я вчера переделал, то что сделал позавчера?"
 
Форум » Советники и индикаторы » Игрушки » Адаптивный советник (Адаптивный советник)
  • Страница 2 из 6
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • »
Поиск:

Copyright MyCorp © 2024Бесплатный конструктор сайтов - uCoz