Ошибки, баги, вопросы - страница 270

 
Rosh:

Запустите такой индикатор, и все увидите сами:

То есть в 

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

open[] тоже не является тайм серией?

 

 

Ничего не понимаю, приведите пожалуйста пример тайм-серии.

 
Voodoo_King:

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

параметры экспертов не восстанавливаются на установленные после закрытия/открытия терминала.

точнее, у какой-то части могут восстановиться (например у 3 из 6), а у остальных сбрасываются на параметры по умолчанию. вобщем, своя жизнь.


билд 381. НИЧЕГО НЕ ИЗМЕНИЛОСЬ !!!

каждый раз при перезапуске терминала, эксперты инициализируются с разными параметрами (какими угодно).

Неправильная инициализация параметров экспертов

 
AlexSTAL:

Эта функция проверяет направление, а не меняет.

1) Без инициализации

2) С инициализацией

3) Вышеописанный код, только с функцией получения направления индексации массива ArrayGetAsSeries

В сервис-деске я ошибся с именем функции просто


Да, выяснилась ошибка компилятора. Спасибо за сообщение. Исправление будет в следующем билде.
 
BoraBo:

То есть в 

open[] тоже не является тайм серией?

 

 

Ничего не понимаю, приведите пожалуйста пример тайм-серии.

 

 

Ну не является опен ТС и что? Установите его через Set в тайм серию, и будет он ТС. Вы что первый раз терминал запускаете? Что для вас это такая прям новость. Помоему давеча, кто-то как раз писал, что надо какбы для себя определиться как работать в своих программах - с ТС или просто с масивами.
 
joo:


Поэтому я в OnCalculate() делаю так:

 

Вы помогите сделать так, что бы  ArrayGetAsSeries(low) выдавала бы true

 
BoraBo:

 

Вы помогите сделать так, что бы  ArrayGetAsSeries(low) выдавала бы true

 

 

Да достало уже :)) установите как вам надо и привет. Что проверять-то. :))
 
BoraBo:

То есть в 

open[] тоже не является тайм серией?

Ничего не понимаю, приведите пожалуйста пример тайм-серии.

open[] и все остальные массивы в OnCalculate  являются таймсериями. И в самом начале, когда язык MQL5 писался, ArrayGetAsSeries() возвращала для них true и индексация для них была именно как для таймсерии - то есть задом наперед.

Но потом оказалось очень неудобно и противоестественно писать расчеты индикаторных буферов в стиле MQL4, и оставался один выход - каждый раз переворачивать индексацию этих таймсерий, чтобы ими было удобно пользоваться. Начали писать пользовательские индикаторы в таком духе:

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread)
{
//---- переворачиваем все таймсерии, чтобы ими было удобно пользоваться, как обычными массивами
   ArraySetAsSeries(open,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
   ArraySetAsSeries(time,false);
   ArraySetAsSeries(tick_volume,false);
   ArraySetAsSeries(volume,false);
   ArraySetAsSeries(spread,false);
   ArraySetAsSeries(open,false);
.... остальной код
}

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

 
BoraBo:

 Вы помогите сделать так, что бы  ArrayGetAsSeries(low) выдавала бы true

Она и выдает true, просто из-за ошибки компилятора ее значение в качестве параметра выводится неверно. Проверьте таким образом:

#property script_show_inputs
input bool isTimeSeria=true;


double Ups[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

//--- установим для массивов признак таймсерии
   Print("Установим для массивов признак таймсерии как ",isTimeSeria);
   ArraySetAsSeries(Ups,isTimeSeria);

//--- Проверим таймсерии
   if(ArrayGetAsSeries(Ups))
     {
      Print("1:  ArrayGetAsSeries(Ups)=true");
      Print("2:  ArrayGetAsSeries(Ups)=",ArrayGetAsSeries(Ups));
     }
   else
     {
      Print("ArrayGetAsSeries(Ups)=true!!!");
     }
  }
//+------------------------------------------------------------------+


Результат:


 
Rosh:

Она и выдает true, просто из-за ошибки компилятора ее значение в качестве параметра выводится неверно. Проверьте таким образом:


Результат:


 Спасибо, разобрался. 

ArrayIsSeries() и ArrayGetAsSeries() в условном операторе if() работают как описано, но на Print() всегда выводят false.

 


 

Разработчикам.

1. проверьте плиз подгрузку в тестер истории (тестирование запускается впервые).

Провожу тестирование пары EURUSD при помощи стандартного MACD Sample на H1 с интервалом "последний месяц".

Закачка дошла до 57% и успешно зависла, при этом в журнале только эта строчка

2011.01.19 17:16:23	Tester	EURUSD: history preliminary downloading started

2. Можно сделать так чтобы в новых билдах в тестере плечо 1:200 и 1:500 было постоянно?

Я понимаю что не у всех ДЦ такие плечи, тем более в МТ5, но в тестере наверное нужно это оставить, поскольку стратегии тестировать в любом случае удобней на новой платформе.

Причина обращения: