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

 
aharata:
Попробуйте почитать в справке про BarsCalculated, там кстати, сразу приводиться нужный пример.

Попробуем с эти сделать. Спасибо!
 
Im_hungry:

то есть пока CopyBuffer>0 мы его рассчитываем, а новый параметр (Close())

появляются при закрытии позиции. То есть нужно через While зациклить. Выходит так.

Я бы сказал так: "пока CopyBuffer<0, повторяем обращение к этой функции".

Строчка While (vhandle>0) особой нагрузки вроде не несёт, т.к. в случае с первым же CopyBuffer<0 сработает return(0);

Я бы поработал в таком направлении:

if(!PositionSelect(Symbol1) && !PositionSelect(Symbol2))
  {
   for(uchar u=0;u<100;u++)  //запускаем цикл с ограниченным количеством шагов
    {
     if(CopyBuffer(vhandle,0,0,50,Sp1Buffer) && CopyBuffer(vhandle,1,0,50,Sp2Buffer))
      {
       return(true);  //дождались копирования буферов - выходим
      }
     else
      {
       if(u==99) //т.е. выявляем последний шаг нашего цикла for, который не принёс ожидаемых результатов
         {
          Alert("Ошибка копирования буферов индикатора номер ошибки:",GetLastError());
          return(0);
         }
       Sleep(50);  //засыпаем ненадолго (хотя я сам не сторонник использования Sleep в теле OnTick)
      }
    }
  }

В общем, что-то в этом роде, на усмотрение автора. Как правильно отмечено, справочник не помешает.

 
aharata:
Попробуйте почитать в справке про BarsCalculated, там кстати, сразу приводиться нужный пример.

Спасибо за направление сделал - работает, вроде без косяков (1 месяц протестил)

Вот мой рабочий код по 1-й паре

void OnTick()
{ 
   if (isNewBar()==true && proverkaHANDLA()==true)
     {
      if (!PositionSelect(Symbol1))
         {
          BSOpen();
         }
     }    
}
//+==================================================================+
bool proverkaHANDLA()
{
  ArraySetAsSeries(Sp1Buffer,true);
  ArraySetAsSeries(Sp2Buffer,true);
  vhandle=iCustom(NULL,0,"МТ5",Symbol1,100,Lots,1,Close());
  ResetLastError();
  int copied0=CopyBuffer(vhandle,0,0,50,Sp1Buffer);
  int copied1=CopyBuffer(vhandle,1,0,50,Sp2Buffer);
  if(copied0<=0 || copied1<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(vhandle)>0)
         break;
         Sleep(50);
        }
      copied0=CopyBuffer(vhandle,0,0,50,Sp1Buffer);
      copied1=CopyBuffer(vhandle,1,0,50,Sp2Buffer);
      if(copied0<=0 || copied1<=0)
        {
         Print("Не удалось скопировать Буфера индюков :-)",GetLastError(),
         "copied0",copied0,"copied1=",copied1);
         return (false); 
        }
       Print("Удалось скопировать Буфера :-)copied0",copied0,"copied1=",copied1);
       return (true);
     }
   Print("Удалось скопировать Буфера. Sp1Buffer=",ArraySize(Sp1Buffer),
         "Sp2Buffer=",ArraySize(Sp2Buffer));
   return (true);
}
 
Yedelkin:

Я бы сказал так: "пока CopyBuffer<0, повторяем обращение к этой функции".

Строчка While (vhandle>0) особой нагрузки вроде не несёт, т.к. в случае с первым же CopyBuffer<0 сработает return(0);

Я бы поработал в таком направлении:

В общем, что-то в этом роде, на усмотрение автора. Как правильно отмечено, справочник не помешает.

Это даже проще, посмотрим какой из этих 2 подходов лучше и быстрей - тот и возьмем,

Всем спасибо всем! пошел тестить.

 
разработчикам, обратите плиз внимание на заявку #33601 (там по поводу торгового плеча есть "замечательная особенность" в разных ОС)...
 
Interesting:
разработчикам, обратите плиз внимание на заявку #33601 (там по поводу торгового плеча есть "замечательная особенность" в разных ОС)...

Возможно, у Вас используются терминалы, изначально установленные от разных брокеров? Добавьте деталей к Вашей заявке, пожалуйста.
 
Rosh:
Возможно, у Вас используются терминалы, изначально установленные от разных брокеров? Добавьте деталей к Вашей заявке, пожалуйста.
Уточнил по поводу терминалов и того что мне в итоге нужно получить.
 

Вопрос к разработчикам.

Вот со спредами все поняно, они хранятся в барах и тестер может прогнать всю историю с учетом меняющегося спреда (если конечно история нормально загружена), а как обстоят дела со свопами?

Т.е. что будет если ДЦ/брокер возьмет да и поменяте размеры свопов или комиссии?

Понимаю, немного абсурдная ситуация, но все же.

Если я правильно понимаю сейчас тестер как и в МТ4 свопы и комиссию будет брать последние....

PS

Еще раз уточнил,теперь со скринами....

 
Interesting:

Вопрос к разработчикам.

Вот со спредами все поняно, они хранятся в барах и тестер может прогнать всю историю с учетом меняющегося спреда (если конечно история нормально загружена), а как обстоят дела со свопами?

Т.е. что будет если ДЦ/брокер возьмет да и поменяте размеры свопов или комиссии?

История свопов и комиссий не хранится, эти настройки берутся из последнего подключения
 
Rosh:
История свопов и комиссий не хранится, эти настройки берутся из последнего подключения
Понятно, примерно так я и подумал. Будем наедятся их не часто меняют/не меняют совсем.
Причина обращения: