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

26 страниц V « < 7 8 9 10 11 > »   
Ответить в эту темуОткрыть новую тему
> Perceptron, Нейронная сеть
NoName
сообщение 16.4.2007, 15:03
Сообщение #81





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



Приведу, пожалуй, основной код: ShortOnly

Код

#property copyright "NoName"
#property link      "http://www.tradersforum.net.ru/forum/"
//---- input parameters---------
extern double    x1=88;
extern double    x2=123;
extern double    x3=20;
extern double    x4=107;
//-----------
extern int       iPeriod=10;
extern int       StopLoss=60;
//--------
extern string _Parameters_Trailing = "----- Параметры Трейлинга -----";
extern bool UseTrailing    = false;   // Использовать трейлинг
extern bool ProfitTrailing = false;   // Включать трейлинг когда получен профит
extern int  TrailingStop   = 30;      // Фиксированный размер трала
extern int  TrailingStep   = 2;       // Шаг трейлинга
//========================================================================
//-- Подключаемые модули --
#include  <b-Lots.mqh>
//========================================================================
int      Prefix=1; //для Sell
//------------------------------
color    clModifyBuy  = Green;
color    clModifySell = Blue;
//------------------------------
int  Magic;
int  ExpertBars;
int  Slippage=2;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
Magic=GetMagic()*10+Prefix;
ExpertBars=Bars;                       //при запуске советника записываем кол-во баров в терминале
//----                                         //в переменную ExpertBars
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  
//----
   return(0);
  }
  
//+------------------------------------------------------------------+
double perceptron()
  {
   double w1 = x1 - 100;
   double w2 = x2 - 100;
   double w3 = x3 - 100;
   double w4 = x4 - 100;
   double a1 = iStochastic(NULL, 0, iPeriod, 3, 2, MODE_SMA, 0, MODE_MAIN, 0)-50;
   double a2 = iStochastic(NULL, 0, iPeriod, 3, 2, MODE_SMA, 0, MODE_MAIN, 7)-50;
   double a3 = iStochastic(NULL, 0, iPeriod, 3, 2, MODE_SMA, 0, MODE_MAIN, 14)-50;
   double a4 = iStochastic(NULL, 0, iPeriod, 3, 2, MODE_SMA, 0, MODE_MAIN, 21)-50;
   return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//---------------------                        //| здесь проверяется появление нового бара.
bool isNewBar=false;                      //| когда появится новый бар значения ExpertBars
if (ExpertBars !=Bars)                     //| и Bars не совпадут.  isNewBar станет true
  { ExpertBars=Bars;      
    isNewBar=true; }
//---------------------
if (isNewBar) {                    //если  появился новый бар
bool isExpertSellOrder=false;
int spread= MarketInfo(Symbol(),MODE_SPREAD);    
int _OrdersTotal=OrdersTotal();
for (int i=0; i<_OrdersTotal; i++) {                                       //пробегаем по открытым ордерам
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {        //если ордер успешно выбран
      if (OrderSymbol()==Symbol()) {                                     //если ордер на данном инструменте
        if (OrderMagicNumber()==Magic) {                               //если ордер принадлежит данному эксперту
          if (OrderType()==OP_SELL) {                                     //если ордер на продажу
            isExpertSellOrder=true;                                            // говорим что ордер эксперта присутсвует
            if (Ask < (OrderStopLoss() - (StopLoss * 2  + spread)* Point)) { //если мы имеем прибыль превышающую величину 2-х стоплоссов от уровня текущего стоплосса
                if (perceptron() > 0) {                               //если перцептрон больше 0
                   ClosePosition(1); // закрываем Sell         //закрываем позицию
                  
                 }
               }  
             }    
           }
         }
       }
     }
if (!isExpertSellOrder) {                  // если ордера эксперта не нашлись
  if (perceptron() < 0) Sell();          //  если перцептрон меньше 0 - продаём
}
}

// здесь трал по алгоритму Игоря Кима

return(0);
  }



P.S. Советники заменил на подправленные. Перекачайте.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 16.4.2007, 16:01
Сообщение #82





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



Тоже исправил шкалу.
Но у меня ещё до исправления - и после исправления
при компиляции есть:
0 error(s), 1 warning(s)
Function "Sell" is not referenced and will be removed from exp-file
в обеих версиях - одно и тож
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 16.4.2007, 16:06
Сообщение #83





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



это не ошибка а предупреждение о том что функция Sell не используется и она не будет включена в exp-файл. На работе это не сказывается. В тех советниках, что выложил выше, лишние функции убрал.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 16.4.2007, 18:14
Сообщение #84





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



никак не могу добиться в шорте профитных результатов!
Тестирую с 2004г.
Или стохастик здесь принципиально не годится для этого режима?
Или против тренда молотит.
Или в конце треда - в лучшем случае вход!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 16.4.2007, 19:31
Сообщение #85





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



С двухполярным стохастиком результат однозначно хуже. Так Long так и Short.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 22.4.2007, 8:29
Сообщение #86





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



Андрей!
По вопросу защиты текущей прибыли в момент подтягивания стоплосса.
Назовем идею - ОТСЕЧКОЙ
Я всё-таки думаю, - что проще будет сделать так:
Самая Первая сделка советника - пусть идет так, как заложено в алгоритме советника.
А уже далее пусть советник начинает реализовывать ОТСЕЧКУ - причем не двумя сделками - как мы вчера планировали, - а лотами !
Вот смотри :
----------------------------------------------------------------------------------------------------------------
/* long position is opened -длинная позиция открылась
далее проверяется условие - ЕСЛИ НА МОМЕНТ ОТКРЫТИЯ НОВОГО БАРА ПОЛУЧЕННЫЙ ПРОФИТ
БОЛЬШЕ РАЗМЕРА СТОПЛОССА И ЗНАЧЕНИЕ ПЕРЦЕПТРОНА <0 - ПЕРЕВОРАЧИВАЕМСЯ */
// check profit
if(Bid > (OrderStopLoss() + (sl * 2 + spread) * Point))
{
if(perceptron() < 0)
{
// reverse
ticket = OrderSend(Symbol(), OP_SELL, lots * 2, Bid, 3,
Ask + sl * Point, 0, "F1", MagicNumber,
0, Red);
------------------------------------------------------------------------------------------------------------------
Обрати внимание, - что переворот здесь реализуется удвоенным лотом (lots * 2)- в результате чего -текущая длинная позиция закрывается а встречная короткая открывается!
Так зачем нам вводить лишнюю сделку, - когда мы можем реализовать ОТСЕЧКУ здесь же, - если заменим (lots * 2) на (lots * 3) !

Далее вводим дополнительное условие - ЕСЛИ НА МОМЕНТ ОТКРЫТИЯ НОВОГО БАРА ПОЛУЧЕННЫЙ ПРОФИТ БОЛЬШЕ РАЗМЕРА подтянувшегося СТОПЛОССА - закрываем один лот из текущих двух!
Но лучше конечно закрыть его ,по тейку. Причем предусмотреть ТП во внешних параметрах! - Для экспериментов по оптимизации.
Так возможно будет проще...
Ещё есть мысль использовать трехступеньчатую систему выходов Виктора, - описанную и реализованную в советнике Игоря Кима, - но это в перспективе....
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 22.4.2007, 9:13
Сообщение #87





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



Ещё вот сейчас посмотрел. Кроме стохастика для реализации Отсечки оч. хор. подходит версия с индикаторм Фишера. Версия в открытом доступе есть на стр. 3 в этой ветке - с результатами теста.

Символ GBPUSD (Great Britan vs US Dollar)
Период 1 Час (H1) 2004.06.16 - 2007.03.27
Начальный капитал 1000.00
Чистая прибыль 6222.84
Максимальная просадка 1315.32 (19.24%)
Относительная просадка 26.64% (356.44)
Всего сделок 767
Прибыльные сделки (% от всех) 458 (59.71%)
Убыточные сделки (% от всех) 309 (40.29%

Это при стоплосс=67.
458-309=149 smile.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 23.4.2007, 13:24
Сообщение #88





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



Поставил версию с Отсечкой.
Но работает некорректно. С трудом вникаю в код.
Позиция в Селл открывается - но реагирует только на свой собственный стоплосс. И больше ни на что!
Профит игнорирует!
Навскидку, - вот такое обьяснение:
Видимо, надо ставить уровень отсечки не на линии
(sl * 2 + spread)
а чуть ближе - на пару пипсов хотя-бы!
Тогда программа не будет путаться, - одновременно вычисляя и закрытие лота , и условия на подтяжку стлосса, или переворот!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 24.4.2007, 10:48
Сообщение #89





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



to NoName:
Прогнал исправленную версию с отсечкой.
Работает удовлетворительно, но прибыль показалась мне меньше расчетной, - предполагаемой!
Стал разбираться.
Так и есть! Число сделок не соответствует пропорции с контрольной версией! - без отсечки.
Вот, например, евроиена:
------дата----поз---№---лот--цена 0ткр--ст/лосс--прибыль
09.27 14:00 buy ---11-- 0.10-- 136.05-- 135.34
.09.27 14:00 buy ---12 --0.10-- 136.05-- 135.34
.10.06 02:00 close --11 -0.10--- 137.05 --135.34 +93.39
.10.06 03:00 modify-12- 0.10--- 136.05--- 136.22
.10.06 17:00 sell---- 13-- 0.20--- 137.71--- 138.42
.10.06 17:00 sell ----14-- 0.10--- 137.71--- 138.42
.10.06 17:00 close by-13--0.10---136.05--138.42--- +149.01

В 14-00 открыты два ордера в бай №12 и №11
Затем 10.06 в 2-00 ордер №11 закрылся +93.39
Но он должен был закрыться раньше!!!!!
Ведь стлосс здесь по этой паре = 67 пипсов
И значит примерно с таким же профитом ордер №11 и должен был закрыться - но никак не +93 !!!
Далее смотрим!
10.06 в 17-00 фиксация прибыли оставшегося ордера (+149) - переворотом поз 13-14-13
Вот где нестыковка!
По первому ордеру - стоплосс работает вроде бы как надо, - а по второму - отсечка запаздывает!

Символ EURJPY (Euro vs Japanese Yen)
Период 1 Час (H1) 2005.09.09 05:00 - 2007.04.20 22:59
Параметры Stochastic_period=8; slowing=3; x1=175; x2=89; x3=17; x4=68; sl=67; lots=0.1; MagicNumber=888;

Начальный депозит 1000.00
Чистая прибыль 4195.17
Матожидание выигрыша 9.78
Абсолютная просадка 806.04
Всего сделок 429
Короткие позиции (% выигравших) 222 (52.70%)
Длинные позиции (% выигравших) 207 (64.73%)
Прибыльные сделки (% от всех) 251 (58.51%)
Убыточные сделки (% от всех) 178 (41.4


Т.е. шаг трала в коде для отсечки заложен с ощибкой!
Пож. напиши в коде комментарии, - по всем строкам ,- где ты вносил дополнения и изменения. Иначе трудновато вникать...
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 24.4.2007, 14:44
Сообщение #90





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



Цитата
В 14-00 открыты два ордера в бай №12 и №11
Затем 10.06 в 2-00 ордер №11 закрылся +93.39
Но он должен был закрыться раньше!!!!!
Ведь стлосс здесь по этой паре = 67 пипсов
И значит примерно с таким же профитом ордер №11 и должен был закрыться - но никак не +93 !!!


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

Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

26 страниц V « < 7 8 9 10 11 > » 
Ответить в эту темуОткрыть новую тему

 



- Текстовая версия Сейчас: 9.7.2024, 16:16