[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 578

 

Здравствуйте.

Такой вопрос, можно ли в пользовательском индикаторе вызвать стандартный индикатор, но чтобы стандартный индикатор рассчитывался не на основе цены, а на основе другого пользовательского индикатора?

Спасибо.

 
Что в коде стандартного заложено, на основе того он и будет расчитываться. Т.е. нельзя.
 

Что в коде стандартного заложено, на основе того он и будет расчитываться. Т.е. нельзя.

Если конечно не "OnArray"
 
valenok2003 >>:
Что в коде стандартного заложено, на основе того он и будет расчитываться. Т.е. нельзя.
но можно использовать алгоритм, идентичный стандартному индикатору..
 
SergNF >>:

Если конечно не "OnArray"
Как это выглядит в коде?
 
trader_fx писал(а) >>
Как это выглядит в коде?


Вы заполняете массив, а потом на него натравливаете "стандартный индикатор" (RSIOnArray, CCIOnArray и т.п. - около 7 штук).

Крайнее упоминание на форуме , а вообще F1, учебник и т.п.

 
парни кто обьяснит Pyxlik2009 писал(а) >>

Все слава богу написал но вот сталкнулся с такой проблемой тестится тестится а потом тупо встанет и стоит в чем проблема?

и можно как нибудь увеличить скорость тестирования а то у меня не один так советник долго не тестится )))


 
Pyxlik2009 >>:
парни кто обьяснит Pyxlik2009 писал(а) >>

Все слава богу написал но вот сталкнулся с такой проблемой тестится тестится а потом тупо встанет и стоит в чем проблема?

и можно как нибудь увеличить скорость тестирования а то у меня не один так советник долго не тестится )))


Если оптимизировать на большом таймфрейме - Н4 или D1, по методу всех тиков и на длинном отрезке времени, то это случается. Надо оптимизировать код, убрать все лишние циклы, уменьшить размеры бафферов, массивов (там где нет необходимости). Еще лучше писать Советник под цены открытия. Убедиться что осталось достаточное количество свободной памяти. В прошлом бывали и совсем странные баги - например обильное использование комментирований типа [/* ... */] сильно тормозило тестирование, а после их удаления начинало бежать.

 

вот код подскажите новичку плиз.

//+------------------------------------------------------------------+
//|                                          Arrows and Curves EA.mq4 |
//|           Простой эксперт использующий индикатор Стрелки и Линии |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006"
#property link      "kolas@list.ru"

// Параметры торговли для H4 EURUSD
extern double TrailingStop = 30;
extern double TakeProfit   = 30;
extern double StopLoss     = 80;

// Параметры  моего индикатора индикатора 
extern int MA_Period=13;
extern int MA_Shift=0;
extern int MA_Method=0;
extern int SSP             = 6; 

// Параметры MM
extern double Slippage     = 3;
extern bool PropotinalLots = false; // Реинвестирование
extern double MinDepo      = 100;   // Минимальный депозит
extern double FixedLots    = 0.1;   // Фиксированный размер ордера
extern double PercentLots  = 10;    // Процент реинвестирования

// Идентификация эксперта
extern string NameEA       = "Arrows and Curves";
extern int MAGICNUM        = 123;

double Lots;
double Sloss, Tprof;
bool Buy = false, Sell = false;
static int PrevBar = 0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() 
  {return(0);}
  
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() 
  {return(0);}
  
//+------------------------------------------------------------------+
//|  Получение сигналов на покупку и продажу                         |
//+------------------------------------------------------------------+
void Indicators() 
   {                  
      Buy = (iCustom(Symbol(),0,"BBANDS~1", MA_Period, MA_Shift, MA_Method,  2, 2) > 0) &&  (Time[0] != PrevBar);
      Sell = (iCustom(Symbol(),0,"BBANDS~1", Length, Deviation, MoneyRisk, Signal, Line, Nbars, 3, 3) > 0) && (Time[0] != PrevBar);
   }
   
//+------------------------------------------------------------------+
//|  Вывод предупреждения об отправке ордера                         |
//+------------------------------------------------------------------+
void prtAlert(string str = "") 
  {
      Print(str);
      Alert(str);
  }
  
//+------------------------------------------------------------------+
//|  Расчет размера ордера                                           |
//+------------------------------------------------------------------+
void LotsSize()
   {
      Lots = FixedLots;
      if (PropotinalLots) Lots = MathCeil(AccountFreeMargin() / 10000 * PercentLots) / 10;
      if (Lots > 10000) Lots = 10000;
   }  
  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() 
  {
   // Проверка истории
   if(Bars < SSP) 
     {
       Print("Not enough bars for this strategy - ", NameEA);
       return(-1);
     }
   // Расчет значений индикатора
   Indicators();
   
   // Расчет желаемого размера ордера
   LotsSize();   

   // Трейлинг и разворот
   int totalOrders = OrdersTotal();
   int numPos = 0;

   for(int i = 0; i < totalOrders; i++) 
     {
       OrderSelect(i, SELECT_BY_POS);    
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICNUM) 
         {
           numPos++;
           // Проверяем покупку
           if(OrderType() == OP_BUY) 
             {
               // Закрываем при развороте
               if (Sell) 
               {
                  OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Blue); 
                  numPos--;
               }
               else
               // Трейлинг стоп
               if(TrailingStop > 0) 
                 {
                   if(Bid - OrderOpenPrice() > TrailingStop*Point) 
                     {
                       if(OrderStopLoss() < (Bid - TrailingStop*Point))
                           OrderModify(OrderTicket(), OrderOpenPrice(), 
                                       Bid - TrailingStop*Point, OrderTakeProfit(), 0, Blue);
                     }
                 }
               
             } 
           else 
             // Проверяем продажу
             {
               // Закрываем при развороте
               if (Buy) 
               {
                  OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Red);
                  numPos--;
               }
               else
               // Трейлинг стоп
               if(TrailingStop > 0) 
                 {
                   if(OrderOpenPrice() - Ask > TrailingStop*Point)
                     {
                       if(OrderStopLoss() == 0 || OrderStopLoss() > Ask + TrailingStop*Point)
                           OrderModify(OrderTicket(), OrderOpenPrice(), 
                                       Ask + TrailingStop*Point, OrderTakeProfit(), 0, Red);
                     }           
                 }
             }
         }
     }
     
   // Открываем новые ордера
   if(numPos < 1)
     {   
       // Если размер депозита устраивает
       if(AccountFreeMargin() < MinDepo)
         {
           Print("Not enough money to trade ", Lots, " lots. Strategy:", NameEA);
           return(0);
         }
       // Если есть сигнал на покупку
       if (Buy)
         {
           Sloss = Ask - StopLoss * Point;
           Tprof = Bid + TakeProfit * Point;
           PrevBar = Time[0];
            OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Sloss, Tprof, NameEA + CurTime(), 
                     MAGICNUM, 0, Green);
           prtAlert("Buying"); 
         }
       // Если есть сигнал на продажу
       if (Sell) 
         {
           Sloss = Bid + StopLoss * Point;
           Tprof = Ask - TakeProfit * Point;
           PrevBar = Time[0];
            OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, Sloss, Tprof, NameEA + CurTime(), 
                     MAGICNUM, 0, Red);
           prtAlert("Selling"); 
         }
     } 

   return(0);
  }
 
Pyxlik2009 >>:

вот код подскажите новичку плиз.

все уже понял почему так долго тетсится ))))
Причина обращения: