Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 601

 
AlexeyVik:
Наверное не совсем так пробовал.
Я только-что перекомпилировал код в советниках и запустил. При изменении параметра Sys в комментарии это значение меняется.

я опять попробовал изменить на ваш вариант.. всё равно не работает... находится в советниках, и виден ка советник..
 
peace1984:

я опять попробовал изменить на ваш вариант.. всё равно не работает... находится в советниках, и виден ка советник..


Или я что-то не так понял???

Файлы:
11_1_1.mq4  8 kb
 
AlexeyVik:


Или я что-то не так понял???



я так понимаю сообщение "sys не должен быть 1" вылетает еcли sys!=1, а если сменить пользователем с 0, оно должно быть равно 1. и должно появиться "sys должен быть 1"

в вашей версии советника, во время тестирования в левом верхнем углу пишет sys=0, а так не должно быть..

 
peace1984:

я так понимаю сообщение "sys не должен быть 1" вылетает еcли sys!=1, а если сменить пользователем с 0, оно должно быть равно 1. и должно появиться "sys должен быть 1"

Вот смотри новый запуск. Строки снизу вверх.


Эксперт загружен

Список внешних переменных: Sys = 0

Инициализация прошла

следующие 3 строки печать из советника.

Деинициализация причина 5 (Входные параметры были изменены пользователем)

Список внешних переменных: Sys = 1

Инициализация прошла

следующие 3 строки печать из советника.

Деинициализация причина 1 (Программа удалена с графика)


Что ты хочешь уточнить? Я не понимаю что не работает...

ps: не обращай внимания на такие символы. Это счёт для опционов потому такие названия символов.

 
AlexeyVik:

Да не в этом дело. Никому не нужен твой полный секретный код. Просто напиши полный тестовый кусок кода в котором будет та непонятка. А так

когда ты заремил выделенную строку??? Телепаты не помогут, а простые смертные и тем-более...

Потом вот эта часть

я не знаю от какого программиста это пошло, но что-то тут совсем неадекватно написано... Не в твой адрес камень. Ты как многие просто взял код и пытаешься его править...

Если переменная counted_bars равна количеству баров, не измененных после последнего вызова индикатора (первая строка)

То как она может стать меньше нуля что её проверяют if(counted_bars < 0) я никогда не смогу понять...

Дальше тоже чушь но мне уже лениво это разбирать...


Полностью с Вами согласен. Как сам не додумался? )

Прилагаю код и сам файл такого горе-индикатора.

Бросаем на граф, терминал естественно зависает, оставляем на 10 минут (в зависимости от быстродействия ПК. у меня i5 3.1 Ghz), принудительно закрываем МТ, открываем лог файл с именем "bug log.csv", наблюдаем факт бага IndicatorCounted().

#property indicator_separate_window
#property indicator_buffers 1

double Buffer_1[];

bool busy=false;
int han;

int init()
{
   han=FileOpen("bug log.csv", FILE_CSV|FILE_WRITE);
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,1);       
   SetIndexBuffer(0,Buffer_1); 
   return(0);
}

int deinit()
{
   FileClose(han);
   return(0);
}

int start()
{
   //if(busy) return(0);
   int limit=3000;
   if(IndicatorCounted()>0) limit=1;
   
   for (int i=0; i<limit; i++)
   { 
      busy=true;
      FileWrite(han, TimeToStr(TimeCurrent(), TIME_MINUTES|TIME_SECONDS), DoubleToStr(i, 0), DoubleToStr(IndicatorCounted(), 0));
      FileFlush(han);
      
      for(int j=1; j<7000; j++)
        for(int k=1; k<7000; k++)
          double var=2*0.34*MathArccos(0.5)+1.33*MathArcsin(0.23)+1.53*MathArctan(0.11)+2.33*MathCos(0.23)+1.22*MathLog(12)+1.22;
      
      Buffer_1[i]=var;
   }
   
   busy=false;
   return(777);
}
Файлы:
bugqtest.mq4  2 kb
 

всем привет, кто подскажет что не хватает в скрипте, чтобы он при соблюдении условия if(AccountProfit()>1) закрывал все открытые ордера, сейчас он закрывает только часть ордеров до момента соблюдения условия i

f(AccountProfit()>1)

{ for (i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{ OrderClose(OrderTicket(),OrderLots(),Bid,10,Green); return(0);
} else { OrderClose(OrderTicket(),OrderLots(),Ask,10,Red); return(0);
}}}
 
Expert:


Полностью с Вами согласен. Как сам не додумался? )

Прилагаю код и сам файл такого горе-индикатора.

Бросаем на граф, терминал естественно зависает, оставляем на 10 минут (в зависимости от быстродействия ПК. у меня i5 3.1 Ghz), принудительно закрываем МТ, открываем лог файл с именем "bug log.csv", наблюдаем факт бага IndicatorCounted().

Ну не знаю. У меня вот этот индикатор записал такой файл.

Файлы:
test.zip  21 kb
 
AlexeyVik:

Ну не знаю. У меня вот этот индикатор записал такой файл.




Большое Спасибо за отклик!

Попробовал Вашу версию - результат тот же ((

Есть какие-то идеи почему так происходит?
При чем так происходит не только у меня. Пробовал на другом ПК, помощней моего, там та же беда.

Файлы:
bugflog.zip  122 kb
 
i999i:

всем привет, кто подскажет что не хватает в скрипте, чтобы он при соблюдении условия if(AccountProfit()>1) закрывал все открытые ордера, сейчас он закрывает только часть ордеров до момента соблюдения условия i

f(AccountProfit()>1)

{ for (i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)
{ OrderClose(OrderTicket(),OrderLots(),Bid,10,Green); return(0);
} else { OrderClose(OrderTicket(),OrderLots(),Ask,10,Red); return(0);
}}}
return(0); был лишним, всем спасибо
 
Expert:


Большое Спасибо за отклик!

Попробовал Вашу версию - результат тот же ((

Есть какие-то идеи почему так происходит?
При чем так происходит не только у меня. Пробовал на другом ПК, помощней моего, там та же беда.

То-ли я тебя понять не могу, то-ли ты чего-то не понимаешь... Что не так в .csv файле? Пока первый бар не посчитается prev_calculated или IndicatorCounted() (в старом варианте) будут равны нулю и это правильно.
Причина обращения: