Вопрос чайника.

 

Уважаемые. Пишу советника.

В зависимости от всякой определенной фигни советник у меня на каждом тике пересчитывает значение iADX, но период при каждом обращении разный.

Соответственно для каждого периода Метатрейдер пересчитывает индикатор чем катастрофически укорачивает свободную память.

Я бы и не против, только

1. Память всё же не резиновая.

2. После нажатия кнопки остановке тестера начинается создание подокон индикатора ( причем со значениями только 12 окон, остальные пустые), что вселенски парит :-)

Что я хочу :

1.Освобождать память динамически, но тогда интересует алгоритм обращения к индюку .

2. По возможности индикаторами считать не весь график, а последние N баров (N <300)

3. запретить(контролировать) отрисовку индикаторов в тестере и создание окон индикаторов.

Эксперты! Поясните плз, чайнику! Заранее спасибо...

Upd.: Да совсем забыл . MQL4

 

А как вы его вызываете (индюк) ? Приведите кусок кода.

Да, какая версия терминала ?

 
napaceHok:

Уважаемые. Пишу советника.


Код шибко секретный?
 
FAQ:

А как вы его вызываете (индюк) ? Приведите кусок кода.

Да, какая версия терминала ?

Эта функция выполняется при каждом тике:
void DrawLastOrderSellAdx()
{
// сначала определяем последний ордер Sell
  int LastOrderSell = 0;
  int BarsShift = 0;
  double AdxPLUSDI = 0;
  double AdxMINUSDI = 0;
  double LevelNext = Ask;
  double LevelClose = Ask;

  if (cnts != 0) 
  {
      LastOrderSell = TicketS[0];
      OrderSelect(LastOrderSell,SELECT_BY_TICKET);    
      BarsShift = iBarShift(Symbol(), 0, OrderOpenTime(), -1);
// теперь вычисляем Adx и рисуем на графике  
      AdxPLUSDI = iADX(Symbol(), 0, BarsShift, PRICE_MEDIAN, MODE_PLUSDI,0);
      AdxMINUSDI = iADX(Symbol(), 0, BarsShift, PRICE_MEDIAN, MODE_MINUSDI,0);
      LevelNext = OrderOpenPrice() + (MathRound(AdxPLUSDI) * Point) ;
      LevelClose = OrderOpenPrice() - (MathRound(AdxMINUSDI) * Point);
      
  } 
  Text("z_LastSellOrder","Последний Sell ордер : " + DoubleToStr(LastOrderSell,0),9,"Arial", 0, 100, White);
  Text("z_LastSellOrderBars","Столько баров назад : " + DoubleToStr(BarsShift,0),9,"Arial", 0, 120, White);
  Text("z_LastSellAdxPlus","DI+ : " + DoubleToStr(AdxPLUSDI,2),9,"Arial", 0, 140, White);
  Text("z_LastSellAdxMinus","DI- : " + DoubleToStr(AdxMINUSDI,2),9,"Arial", 0, 160, White);
  Text("z_LevelPlus","Level Next Order : " + DoubleToStr(LevelNext,4),9,"Arial", 0, 180, White);
  Text("z_LevelMinus","Level Close Price : " + DoubleToStr(LevelClose,4),9,"Arial", 0, 200, White);
}

void Text рисует объекты.

За HideTestIndicators спасибо. Собственно 3-й вопрос отпадает :-)

Теримнал Version 4.0 build 509

 
napaceHok:
Эта функция выполняется при каждом тике:

void Text рисует объекты.

За HideTestIndicators спасибо. Собственно 3-й вопрос отпадает :-)

Теримнал Version 4.0 build 509


впало сразу в глаза - если используете функцию в тестере - то тестер не моделирует значения аска и бида, кажись.
 
napaceHok:
Эта функция выполняется при каждом тике:

void Text рисует объекты.

За HideTestIndicators спасибо. Собственно 3-й вопрос отпадает :-)

Теримнал Version 4.0 build 509


сделайте вход в расчеты только на новом баре


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

 

Еще один вопрос, смотри картинку.

Как в таком случае закроется ордер ?

 

При изменении периода, Ваш основной индикатор полностью пересчитывается, хотя Вам это не надо, нужен только текущий участок. Отсюда и тормоза, от этого и уходите.

Я включил-бы код индикатора в советник.

ЗЫ Оп-па, да мы уже неделю сами с собою разговариваем(:

Ну, да и ладно, если зачинщик беспорядков сюда еще заглянет, то от меня напоминание по вопросу 1: это функция JCL (языка управления заданиями), публикации которого я не видел и вряд-ли когда-нибудь увижу.

 
fozi:

Еще один вопрос, смотри картинку.

Как в таком случае закроется ордер ?


Странный ТР для такого ордера, да и байстоп вроде нельзя поставить ниже цены.
 
Дайте мне ДЦ который позволит такой ТП выставить..!)№*?@
 
ну конечно там селл-стоп...он просто перепутал... :-)))
Причина обращения: