Здравствуйте, гость ( Вход | Регистрация )

17 страниц V  1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Автоматические торговые системы, Идеи, эксперименты...
leonid553
сообщение 26.5.2007, 8:46
Сообщение #1





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



С некоторых пор пришел к выводу, что, например, для меня более целесообразна автоматическая (в т.ч. "портфельная") торговля! Эксперты работают без эмоций, и при моем скромном опыте такая торговля оказывается более выгодной, чем "вручную" !
К сож. мой стаж на форексе - чуть более полутора лет, а вникать в MQL4 я начал всего лишь несколько месяцев назад.
Поэтому многие изложенные мысли могут показаться наивными. Но я их не навязываю, - а всего лишь предлагаю к рассмотрению всем, кому интересно.

Для начала выложу одно из первых моих "творений" - советник для пары GBPUSD, H1.
Сработан при реализации идей Ю.Решетова в адресе:
http://www.tradersforum.net.ru/forum/index.php?showtopic=629
При этом в советнике предусмотрен0:

1. Работа по "ЦЕНАМ ОТКРЫТИЯ" баров, и тесты следует делать тоже только в этом режиме! - тест идет доли секунды даже на многолетней истории, и качество модулирования почти не страдает от некорректных котировок!
2. Ограничение по дате использования до 22 июля с.г.
3. Советник находится в рынке постоянно, - т.е. работает не закрытием позиций, а их переворотом!
4. Используется индикатор Стохастик, период которого можно изменять в параметрах.
5. Используется библиотека расчета лотов (ММ), кот. следует положить в папку experts/include
6. Работать строго по паре GBPUSD, H1

В закачке ниже приложена библиотека b-lots, без которой советник не будет работать.
Тесты выполнялись на параметрах подобранных на МТ4 Метаквотов


Прикрепленные файлы
Прикрепленный файл  ________.rar ( 5.82 килобайт ) Кол-во скачиваний: 29884
Прикрепленный файл  b_Lots.rar ( 857 байт ) Кол-во скачиваний: 29966
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 26.5.2007, 9:06
Сообщение #2





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Я рекомендую делать тесты на МТ4 Метаквотов, т.к. чемпионат Роботов проводится на их котировках.
http://championship.mql4.com/ru/
При указанных ниже параметрах за 2 года истории
-----------------------------------------------------------------
Символ GBPUSD Период 1 Час (H1) (2005.05.05 - 2007.04.01)
Модель По ценам открытия (быстрый метод на сформировавшихся барах)
Параметры :
Stochastic_period=6;
a=88;
b=129;
c=103;
sl=91;
Параметры модуля расчёта лота
LotsWayChoice=0; (при =1 =2 =3 - включается ММ )
Lots=0.1;
LotsPercent=10;
LotsDeltaDepo=500;
LotsDepoForOne=500;
LotsMax=1000;
-------------------------------------------------------------
получены следующие результаты -

Начальный депозит 1000
Чистая прибыль 6165
Абсолютная просадка 267
Максимальная просадка 721
Относительная просадка 721

Всего сделок 855
Короткие позиции (% выигравших) 434 (70.05%)
Длинные позиции (% выигравших) 421 (72.68%)
Прибыльные сделки (% от всех) 610 (71.35%)
Убыточные сделки (% от всех) 245 (28.65%)
Самая большая прибыльная сделка +330
убыточная сделка -95
Средняя прибыльная сделка +42
убыточная сделка -80
Максимальное количество непрерывных выигрышей (прибыль) =18 (725.03)
непрерывных проигрышей (убыток) =5 (-377.81)
Средний непрерывный выигрыш 3
непрерывный проигрыш 1

Вот график баланса (эквити):


Эскизы прикрепленных изображений
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 26.5.2007, 10:07
Сообщение #3





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Для участия в чемпионате Роботов у этого автомата слтшком большая просадка, и график баланса слишком неровный. Нужно "спрямить" график . Не увеличением конечной прибыли, а хотя бы уменьшением относительной просадки.
Повторю свой пост из ветки "Нейрошелл".
Идея вот какая.
Чтобы поиметь максимальный профит, мы должны прикупить на минимуме, а продать на максимуме цены.
Предположим у нас есть некая (апроксимир или иная) функция, описывающая движение цены.
Сглаженная. Как на графике ниже. И которая не перерисовывается .
Хотя ладно, - пусть она перерисовывается, - но не более чем на последнем баре!
Подберем такой индикатор !
Это может быть осциллятор, - под графиком(желт).
Либо инертная кривая, - прямо на графике(син).
В данном случ. у меня стоит логарифмич. функция от МА-34
Не суть.
Но как бестолковая программа подаст нам сигнал на вход?
В знач. большинстве случаев нам предлагается входить по направлению индикатора, и еще каким ниб. фильтром .
но при этом не гарантируется, - что мы войдем в рынок на переломе цены!
В лучшем случае мы застанем половину движения.
А между тем, - из графика видно - что пользуясь сигналами (стрелки на графике - ВРУЧНУЮ расставил),мы могли бы до дна вычерпывать движение!
Однако, если мы вспомним мaтематику, - то там сказано что вторая производная функции меняет знак на переломах!
И не надо никаких больше фильтров!
Нужно чтобы программа в режиме "ПО ЦЕНАМ ОТКРЫТИЯ" расчитавала знак второй производной F(x), и при смене знака давала нам вход !
Для МТ4 я вроде реализовал (примитивно)этот алгоритм.
-----------------------------------------------------------------------------------
Прежде, чем привести кусочек кода для реализации идеи, отмечу, что я (как сумел) вставил его в исходный код вышевыложенного советника. Подобрал параметры и получил результат за тот же период истории (2 года) -
Начальный депозит 1000.00
Чистая прибыль 7007
Абсолютная просадка 232
Относительная просадка 465.


Эскизы прикрепленных изображений
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 26.5.2007, 17:01
Сообщение #4





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



За тот же период истории (2 года) -

Начальный депозит 1000.00
Чистая прибыль 7007
Абсолютная просадка 232
Относительная просадка 465.

Всего сделок 838
Короткие позиции (% выигравших) 424 (69.58%)
Длинные позиции (% выигравших) 414 (73.67%)
Прибыльные сделки (% от всех) 600 (71.60%)
Убыточные сделки (% от всех) 238 (28.40%)
Самая большая прибыльная сделка +330
убыточная сделка -95
Средняя прибыльная сделка +43
убыточная сделка -80
Максимальное количество непрерывных выигрышей (прибыль) 15 (674.18)
непрерывных проигрышей (убыток) 4 (-338.24)
----------------------------------------------------------------
Как видим - прибыль увеличилась с 6135 до +7007 пипсов
а относительная просадка уменьшилась с 731 до 465 !!!!!!!!!!!
Вот для сравнения графики балансов до и после реализации идеи:
Видно что кривая заметно спрямилась!


Эскизы прикрепленных изображений
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 26.5.2007, 17:27
Сообщение #5





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



ЧТОБЫ поймать момент входа на переломе кривой индикатора, (а значит и цены) можно задать три точки (по соседним барам ), и по их величине относительно друг друга определить, имеется пик либо впадина на этом участке. Но при этом нет гарантиии, что на следующем баре мы опять получим экстремум ,- уже в другом направлении.
Появилась мысль взять сразу три группы соседних баров, - вычислить среднюю величину для каждой группы, и сравнить эти средние величины между собой, на предмет обнаружения пика или впадины.
Например взять бары 0-1-2 и 2-3-4 и 3-4-5 после чего вычислить среднее значение показания индикатора на каждой из этих групп.
Тогда имеем:
Код
double a()
{  double  a1=iCustom(NULL,0,"FTLM-STLM",0,0,0);
  double   a2=iCustom(NULL,0,"FTLM-STLM",0,0,1);
  double   a3=iCustom(NULL,0,"FTLM-STLM",0,0,2);
        return ((a1+a2+a3)*0.33);}
    double b()  
{ double  b1=iCustom(NULL,0,"FTLM-STLM",0,0,3);
  double  b2=iCustom(NULL,0,"FTLM-STLM",0,0,4);
  double  b3=iCustom(NULL,0,"FTLM-STLM",0,0,5);
      return ((b1+b2+b3)*0.33);}
  
      double c()    
{ double  c1=iCustom(NULL,0,"FTLM-STLM",0,0,6);
  double  c2=iCustom(NULL,0,"FTLM-STLM",0,0,7);
  double  c3=iCustom(NULL,0,"FTLM-STLM",0,0,8);
      return ((c1+c2+c3)*0.33);}    

После чего, видно, что покупка и продажа соответственно будут :
Код
//  покупка   (   a()>b() && a()>c() && c()>b())
      //  продажа (   a()<b() && a()<c() && c()<b())

Я не знаю, - может специалисты предложат более лучiшее программное воплощение идеи. Здесь использован STLM из цифрового индикатора FTLM-STLM .
Добавлю, - что при попытке использовать "чистый" STLM - почему - то глючит алгоритм.


Эскизы прикрепленных изображений
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cr@sh
сообщение 27.5.2007, 6:17
Сообщение #6





Группа: Активный участник
Сообщений: 155
Регистрация: 29.4.2006
Пользователь №: 105
Спасибо сказали: 0 раз(а)



Классная идея ))...к сожалению я не программер но чем смогу если надо будет помогу!...Леня, у меня только одна просьба выложи пожалуйста индюки и осцилятор который у тя на рисунке.
Спасибо
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 27.5.2007, 10:37
Сообщение #7





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Да, конечно.
В закачке, - вся группа цифровых индикаторов. Впрочем, эти индикаторы есть на форуме - в ветке "Архив 163 индикаторов".
Ниже, - в закачке сглаженный индикатор МА.(что у меня на графике).
Из своего опыта отмечу - что наиболее выгодно использовать его на тф Н4 при length=34/55.
Параметр NL_length - коэф. сглаживания
Параметр Color =1 - ЦВЕТ движения вниз/вверх.


Эскизы прикрепленных изображений


Прикрепленные файлы
Прикрепленный файл  Finware.rar ( 43.05 килобайт ) Кол-во скачиваний: 955
Прикрепленный файл  NonLagMA_v5.rar ( 1.53 килобайт ) Кол-во скачиваний: 937
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 29.5.2007, 6:47
Сообщение #8





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



U. Reshetov , forum MQ :

"А что касаемо граалей, дык тут большого ума не надо. Надо лишь выполнить ряд условий:

1. Система должна открывать позиции либо вообще без стоплоссов, либо со стоплоссами на очень большом расстоянии, так чтобы вероятность их срабатывания была близка к 0
2. Воткнуть мощный фильтр на базе нескольких индикаторов с условиями срабатывания разделенными по логическому И (&&). И вытащить множество входных параметров этих самых индикаторов во внешние настройки МТС, так чтобы за несколько лет исторических данных на тестах открылось всего несколько позиций.
3. Ко всему этому добавить управление капиталом и риском с задранной фракцией."
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 29.5.2007, 10:47
Сообщение #9





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Насколько соответствуют действительности эти положения?Попробуем сейчас же "состряпать" на скорую руку такой (ну почти...) "Грааль".
Но при более разумном подходе. Исключим из этих правил пункт № 1.
Сделаем Ст/лосс примерно равным Т/профиту. Пусть эти параметры будут примерно = 100 пипсам !
В качестве фильтра возьмем индикатор NonLagMA_v5.rar (см. пост выше).
Пусть у нас будет медленная МА и быстрая МА.
Вход в BUY - пересечение быстрой МА медленной снизу вверх.
Вход в Sell - пересечение быстрой Ма медленной сверху вниз.
Для надежности - поставим условие - вход только по тренду!
Т.е. когда медленная МА - синяя - только покупаем.
Когда медленная МА - красная - только продаем!


Эскизы прикрепленных изображений
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 29.5.2007, 11:07
Сообщение #10





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Для удобства предусмотрем работу советника по ценам открытия.
Возьмем пару GBPUSD, и тф Н4.
тогда получим -
Код
//+------------------------------------------------------------------+
//|                                                                  |
//|                                  Copyright © 2007, Tradersforum. |
//|                                  http://www.tradersforum.net.ru/ |
//|                                     Leonid553                    |
//+------------------------------------------------------------------+

#property copyright "Leonid553  http://www.tradersforum.net.ru/forum/"
#property link      "http://www.tradersforum.net.ru/"
//---- input parameters
extern int     NL_length=98;
extern int     NL_l=9;

extern double sl = 86;
extern double tp = 86;
extern double lots = 0.1;
extern int    MagicNumber = 888;
static int    prevtime = 0;
static int    spread = 3;


//-- Подключаемые модули --
//#include  <b-Lots.mqh>  //Переменный лот

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   return(0);
  }

int deinit()
  {
   return(0);
  }
int start()
  {
   if(Time[0] == prevtime)
       return(0);  
   prevtime = Time[0];

   if(IsTradeAllowed())
     {
       spread = MarketInfo(Symbol(), MODE_SPREAD);
     }
   else
     {
       prevtime = Time[1];
       return(0);
     }
     int ticket = -1;
     int total = OrdersTotal();  
    if(total<1)
    { double NLa=iCustom(NULL,0,"NonLagMA_v5",0,NL_l,1,0,0,0,0,0,0);
      double NLb=iCustom(NULL,0,"NonLagMA_v5",0,NL_l,1,0,0,0,0,0,1);  
    //-----------------------------------------------------------------  
  
   if   (   na()>nb() && nb()>nc()&& NLa >na()&& NLb <na() )
     {
       //покупаем
       ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - sl * Point, Ask+tp*Point,
                      "ST", MagicNumber, 0, Blue);
       if(ticket < 0)
         {
           Sleep(30000);
           prevtime = Time[1];
         }
     }
  if  (   na()<nb() && nb()<nc() && NLa <na()&& NLb >na())
     {
       // продаем
       ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Ask + sl * Point, Bid-tp*Point,
                      "ST", MagicNumber, 0, Red);
       if(ticket < 0)
         {
           Sleep(30000);
           prevtime = Time[1];
         }
        }
       }
   return(0);
  }

//----------------------------------------------------------------------------      
   double na()
  {double NL0=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,0);
   double NL1=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,1);
     return ((NL0+NL1)*0.5);}

       double nb()
   {double NL2=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,2);
    double NL3=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,3);
     return ((NL3+NL2)*0.5);}
    
        double nc()
   {double NL4=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,4);
    double NL5=iCustom(NULL,0,"NonLagMA_v5",0,NL_length,1,0,0,0,0,0,5);
     return ((NL4+NL5)*0.5);}      
      
      //  покупка   (   na()>nb() && na()>nc() && nc()>nb())
      //  продажа (   na()<nb() && na()<nc() && nc()<nb())
        
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

17 страниц V  1 2 3 > » 
Ответить в эту темуОткрыть новую тему

 



- Текстовая версия Сейчас: 15.3.2025, 8:38