Лажа с CopyOpen - страница 2

 
Integer:
В советниках только CopyBuffer совершенно полноценно работает, остальные Copy - лучше и не пытаться пока.

Можете пример привести?

А то юзаю и не подозреваю, шо оно не правильно работает.. иль я что не так делаю.

 
Swan:

Можете пример привести?

А то юзаю и не подозреваю, шо оно не правильно работает.. иль я что не так делаю.

Очевидно каким-то одним вариантом ее применения пользуетесь, наверняка с первого бара один бар копируете, или как-то помасштабней?

Проверку делаете,что функция возврщаете? А то вдруг и правда работает, хотя -1 возвращает, кто его знает... 

 

Насколько я понимаю все нормально работает.

Это код обработки тиков, сова в прицепе

void OnTick()
{
//----------------------------------------------------------------------------//
//Work variables
int ResTime,ResOpen;
datetime Time;
double   Open;
//----------------------------------------------------------------------------//
  if (TimeCurrent()==D'2011.01.04 22:15')
  {
  ResTime = CopyTime("EURUSD",Period(),0,3,ArrTime);
  ResOpen = CopyOpen("EURUSD",Period(),0,3,ArrOpen);
  
    if((ResTime==3)&&(ResOpen==3))
    {

      for(int f=0;f<3;f++)
      {
      Time = ArrTime[f];
      Open = ArrOpen[f];
      Print("Bar ID - ",f," Time ",Time," Open ",Open);
      }
    
    }
    else Print("Ощибка копирования данных");
  
  }
//----------------------------------------------------------------------------//
}

А это то что тестер дает в логе

2011.05.23 02:30:30 Core 1  2011.01.04 22:15:00   Bar ID - 2 Time 2011.01.04 21:45:00 Open 1.32979
2011.05.23 02:30:30 Core 1  2011.01.04 22:15:00   Bar ID - 1 Time 2011.01.04 22:00:00 Open 1.32969
2011.05.23 02:30:30 Core 1  2011.01.04 22:15:00   Bar ID - 0 Time 2011.01.04 22:15:00 Open 1.33023

PS

Нулевой бар тут текущий, поскольку серийность выставлена как в MT4 (кстати, ее можно один раз указать при инициализации).

Файлы:
 
Попробуйте от TimeCurrent() до 0.
 
Integer:

Очевидно каким-то одним вариантом ее применения пользуетесь, наверняка с первого бара один бар копируете, или как-то помасштабней?

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

Integer:

Проверку делаете,что функция возврщаете? А то вдруг и правда работает, хотя -1 возвращает, кто его знает... 

как-то так:

double High[1024],Low[1024];
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CopyHigh(_Symbol,PERIOD_CURRENT,0,1024,High)<1024)
      {
      Print("Не удалось получить High");
      return;
      }
   if(CopyLow(_Symbol,PERIOD_CURRENT,0,1024,Low)<1024)
      {
      Print("Не удалось получить Low");
      return;
      }
  }
в журнале ничего не принтится.
 
Integer:
В советниках только CopyBuffer совершенно полноценно работает, остальные Copy - лучше и не пытаться пока.
До недавнего времени все работало прекрасно, правда в 400-х билдах не скажу (но по тому что я вижу - работает)...
 
datetime buff[];
datetime st=0;
   if(CopyTime(_Symbol,Period(),TimeCurrent(),st,buff)==-1){
       Print("Err...");
       return(0);
   }

Вот так.

 

 
Integer:

нафига?


и точно

CopyTime(_Symbol,Period(),TimeCurrent(),st,buff)

а не

CopyTime(_Symbol,Period(),st,TimeCurrent(),buff)

?

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


зы: start_time, stop_time похоже в любом порядке можно передавать. Ошибки добицо от тестера так и не удалось. И TERMINAL_MAXBARS ограничения нет..

 
Interesting:

Насколько я понимаю все нормально работает.

Это код обработки тиков, сова в прицепе

А это то что тестер дает в логе


PS

Нулевой бар тут текущий, поскольку серийность выставлена как в MT4 (кстати, ее можно один раз указать при инициализации).

черт я ваще уже в шоке. Я запускаю ваш код, действительно все ок работает. Запускаю свою программу смещено и все тут как я рассказывал. Различий не увидел. Сразу после онтик вставил ваш код в свою программу переменные перенес. И О БОЖЕ и ваш код стал выдавать такой же смещенный бар на один при 15 минутах Я в шоке ваще. Что это может быть)))) Сейчас буду думать. 

Вот нормально все работает нулевой бар нулевой (программа interesting) interesting prog 

А вот программа интерестинга четко перекопированная в  мою видно ,что она выдает то же, что и моя результаты равны, НО они смещены на один бар как я и говорил Я В ШОКЕ. Что это может быть.

my  адская закономерность берется непонятно от куда тогда.  Разлил чашку чая, поставил всю программу лишнюю, что не относится к программеинтерестинга в коммент. Т.е. осталась только она. Название осталось от моей программы и что вы думаете. И ОПЯТЬ СМЕЩЕН на 1 бар ААААААААА я сейчас взорвусь)

 Ну вот НАКОНЕЦ  ТО нашел момент, когда правильно сменяется на неправильное. В ините в программе после закомментирования 

CopyTime(Symbol(),PERIOD_CURRENT,0,1,temp);

  ArraySetAsSeries(temp,true);

  handle=iCustom(Symbol(),PERIOD_CURRENT,"someindicator");

  handle_2=iCustom(Symbol(),PERIOD_CURRENT,"elseindicator"); 

Сразу 0 бар становится нулевым. С этим кодом в ините сразу смещается на 1.