Реально торгующий советник.

 

Выкладываю код реально торгующего полнофункционального советника.

Поскольку предполагается сделать его основой следующей версии конструктора советиков BlueDream, выкладываю код здесь а не в кодобазе так как версия не окончательная, но очень хочется обсудить его недостатки.

Используемые советником индикаторы - стандартный стохастик, несколько изменённый BigTrend и как разворотный - i-Regr.

С благодарностью приму все отзывы и пожелания.

зы: хотелось бы получить замечания по библиотекам, в данном случае они включены в код, особенно по локированию ордеров. Почему-то локи иногда перестают тралится вне зависимости от логики советника, однако при переустановке подтягиваются до заданных значений.

Советник нужно ставить на минутку, хотя это не пипсовщик.

Файлы:
 
BigTrend
Файлы:
 
i-Regr
Файлы:
i-regr.mq4  5 kb
 

Основной модуль логики находится в функции signals_generator()

Советник устанавливает ордера по сигналам суммы 6-ти стохастиков и BigTrend -а.

i-Regr используется как индикатор разворота.

Открытые ордера локируются (можно отключить).

 
valenok2003:

Основной модуль логики находится в функции signals_generator()

Советник устанавливает ордера по сигналам суммы 6-ти стохастиков и BigTrend -а.

i-Regr используется как индикатор разворота.

Открытые ордера локируются (можно отключить).


А где стейт?
 
Europa:

А где стейт?

Это открытый код советника, куда вы можете заложить любую свою логику. Если этот код станет основой следующей версии конструктора BlueDream, то это будет доступно и не программистам. В данном случае меня интересует вопрос не столько прибыльности, сколько функциональности кода. Хотя в полуавтоматическом режиме получилась такая картинка за две недели на демо.

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

Может кто-нибудь возьмётся за его оптимизацию?

 
Вы забыли выложить: Cannot open file \experts\indicators\iSWOL_for_ex.ex4
 
valenok2003:

Выкладываю код реально торгующего полнофункционального советника.

Поскольку предполагается сделать его основой следующей версии конструктора BlueDream, выкладываю код здесь а не в кодобазе так как версия не окончательная, но очень хочется обсудить его недостатки.

Используемые советником индикаторы - стандартный стохастик, несколько изменённый BigTrend и как разворотный - i-Regr.

С благодарностью приму все отзывы и пожелания.



Молодца! Тема очень понравилась, на первый взгляд... :-))) Как время будет, обязательно поинтересуюсь.
 
NEKSUS_:
Вы забыли выложить: Cannot open file \experts\indicators\iSWOL_for_ex.ex4

выкладываю
Файлы:
 
постоянно сыпет ошибка 
2011.08.16 15:48:50 2011.01.06 08:49 eProect_V3 EURUSD,H1: OrderSend error 131
2011.08.16 15:48:50 2011.01.06 08:49 eProect_V3 EURUSD,H1: H1|EURUSD|Expert_V3:set_order_sellstop():_Lot= 0.01000000(131)Неправильный объем

  При любым выставленном лоте и риске (У дц на котором гоняю в тестере, мин. лот 0.1)
 

ошибка возникает в модуле установки локирующих ордеров - set_lock()

не могу найти в чём причина.

Логика такая - вычисляем разницу лотов и доливаем стоп-приказы компенсируя разницу, однако почему-то лоты не сравниваются корректно

может кто-то увидит, в чём ошибка?

      if(_Lot_SELL > _Lot_BUY+_Lot_BUYSTOP) {
         _Price = NormalizeDouble((High[iHighest(Symbol(),TF_Cnt_Bar_for_Lock,MODE_HIGH,_Bars_PP_OP_BUYSTOP,0)]+ Dist_For_Top*Point),Digits);
         if(_Price - Ask < Dist_For_Top*Point) {
            _Bars_PP_OP_BUYSTOP *=2;
            _RESET_Bars_PP_OP_BUYSTOP = false;
            return;
         }
         _Lot = _Lot_SELL-_Lot_BUY-_Lot_BUYSTOP;
   //Alert(_Lot+" "+_Lot_SELL+" "+_Lot_BUY+" "+_Lot_BUYSTOP);         
         if(_Lot >= 0.01)  _Lot = 0.01;
         if(_Lot >= 0.1)   _Lot = 0.1;
         if(_Lot >= 1.0)   _Lot = 1.0;
         if(_Lot >= 10.0)  _Lot = 10.0;
         if(_Lot < 0.01)   _Lot = 0;
         if(_Lot != 0)  {
            if(set_order_buystop(_Price, _Lot, _Txt_Lock+Comment_Order)!= -1) {
               _RESET_Bars_PP_OP_BUYSTOP = true;
            }
         }
      }
      else if(_Lot_BUY < _Lot_SELL+_Lot_SELLSTOP) {
         for(_i=OrdersTotal()-1; _i>=0; _i--){  
            // RefreshRates(); 
            OrderSelect(_i, SELECT_BY_POS, MODE_TRADES);
            if(OrderSymbol() == Symbol() && OrderCloseTime()<=0 
            && OrderMagicNumber() == Magic && (OrderType() == OP_SELLSTOP))  {
               if(OrderLots() > _Lot_Order_For_Del) {
                  _Lot_Order_For_Del = OrderLots();
                  _Ticket_Order_For_Del = OrderTicket();
               }
            }
         }
         if(OrderSelect(_Ticket_Order_For_Del,SELECT_BY_TICKET))   {
            if(OrderCloseTime()<= 0) {
               output_alert_ERR(_Function+"вызываем close_for_ticket() для закрытия OP_SELLSTOP");
               if(!close_for_ticket(_Ticket_Order_For_Del)) return;
               _Ticket_Order_For_Del = 0; 
            }
         }        
      }
//-----------------
      if(_Lot_BUY > _Lot_SELL+_Lot_SELLSTOP) {
         _Price = NormalizeDouble((Low [iLowest (Symbol(),TF_Cnt_Bar_for_Lock,MODE_LOW, _Bars_PP_OP_SELLSTOP,0)]- Dist_For_Boot*Point),Digits);
         if(Bid - _Price < Dist_For_Boot*Point) {
            _Bars_PP_OP_SELLSTOP *=2;
            _RESET_Bars_PP_OP_SELLSTOP = false;
            return;
         }
         _Lot = _Lot_BUY-_Lot_SELL-_Lot_SELLSTOP;
         if(_Lot >= 0.01) _Lot = 0.01;
         if(_Lot >= 0.1)  _Lot = 0.1;
         if(_Lot >= 1.0)  _Lot = 1.0;
         if(_Lot >= 10.0) _Lot = 10.0;
         if(_Lot < 0.01)   _Lot = 0;
         if(_Lot != 0)  {
            if(set_order_sellstop(_Price, _Lot, _Txt_Lock+Comment_Order)!= -1){
               _RESET_Bars_PP_OP_SELLSTOP = true;
               _Lot = 0;
            }
         }
      }
      else if(_Lot_SELL < _Lot_BUY+_Lot_BUYSTOP) {
         for(_i=OrdersTotal()-1; _i>=0; _i--){  
            // RefreshRates(); 
            OrderSelect(_i, SELECT_BY_POS, MODE_TRADES);
            if(OrderSymbol() == Symbol() && OrderCloseTime()<=0 
            && OrderMagicNumber() == Magic && (OrderType() == OP_BUYSTOP))  {
               if(OrderLots() > _Lot_Order_For_Del) {
                  _Lot_Order_For_Del = OrderLots();
                  _Ticket_Order_For_Del = OrderTicket();
               }
            }
         }
         if(OrderSelect(_Ticket_Order_For_Del,SELECT_BY_TICKET))   {
            if(OrderCloseTime()<= 0) {
               output_alert_ERR(_Function+"вызываем close_for_ticket() для закрытия OP_BUYSTOP");
               if(!close_for_ticket(_Ticket_Order_For_Del)) return;
               _Ticket_Order_For_Del = 0; 
            }
         }        
      }
Причина обращения: