Это баги МТ или что-то еще. Кто может объяснить?

 

Есть функция.//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Функция изменения переменной по закону Фибоначчи |
//+------------------------------------------------------------------+
int Fibo(bool Reset)
{
if(Reset!=true)
{ nf=n0+n1;
n0=n1;
n1=nf;
Print(" n0= ", n0," n1= ", n1," nf= ",nf);
}
else
{
n0=0;
n1=1;
nf=0;
}
return(n0);
}

Стартуем.

int start()
{
//----

Print(" Fibo(Reset) = ",Fibo(Reset));

.............

}

Результат распринтовки:

14:21:19 2009.03.12 00:00 EnveIn EURUSD,M30: n0= 1 n1= 1 nf= 1
14:21:19 2009.03.12 00:00 EnveIn EURUSD,M30: Fibo(Reset) = 1
14:21:19 2009.03.12 00:00 EnveIn EURUSD,M30: n0= 1 n1= 2 nf= 2
14:21:19 2009.03.12 00:00 _SAR_Slave EURUSD,M30: loaded successfully
14:21:19 2009.03.12 00:00 _MasterSlave EURUSD,M30: loaded successfully
14:21:19 2009.03.12 00:00 _SAR_Slave EURUSD,M30: k=999 Bars=1001
14:21:19 2009.03.12 00:30 EnveIn EURUSD,M30: n0= 2 n1= 3 nf= 3
14:21:19 2009.03.12 00:30 EnveIn EURUSD,M30: Fibo(Reset) = 2
14:21:19 2009.03.12 00:30 EnveIn EURUSD,M30: n0= 3 n1= 5 nf= 5
14:21:19 2009.03.12 01:00 EnveIn EURUSD,M30: n0= 5 n1= 8 nf= 8
14:21:19 2009.03.12 01:00 EnveIn EURUSD,M30: Fibo(Reset) = 5
14:21:19 2009.03.12 01:00 EnveIn EURUSD,M30: n0= 8 n1= 13 nf= 13
14:21:19 2009.03.12 01:30 EnveIn EURUSD,M30: n0= 13 n1= 21 nf= 21
14:21:19 2009.03.12 01:30 EnveIn EURUSD,M30: Fibo(Reset) = 13
14:21:19 2009.03.12 01:30 EnveIn EURUSD,M30: n0= 21 n1= 34 nf= 34
14:21:19 2009.03.12 02:00 EnveIn EURUSD,M30: n0= 34 n1= 55 nf= 55
14:21:19 2009.03.12 02:00 EnveIn EURUSD,M30: Fibo(Reset) = 34
14:21:19 2009.03.12 02:00 EnveIn EURUSD,M30: n0= 55 n1= 89 nf= 89
14:21:19 2009.03.12 02:30 EnveIn EURUSD,M30: n0= 89 n1= 144 nf= 144

То есть.

Когда идет распринтовка из функции, то видно, что переменные(n0, n1, 1 nf,)
дают результаты, когда же идет распринтовка из советника(Fibo(Reset) =), то данные поступают через раз.

////////////////////////////////////

Еще то ли баг то ли не понятно что. Не меняются результаты при использовании параболика в качестве пользовательского индикатора.

Насчет параболика. Код:

double sarstop=iCustom(NULL,0,"Parabolic",step,maximum,0,0);

Print("sarstop = ", sarstop);

Результат:

0:02:22 1999.09.03 03:00 EnveIn EURUSD,M30: sarstop = 1.0689
20:02:22 1999.09.03 03:30 EnveIn EURUSD,M30: sarstop = 1.0689
20:02:22 1999.09.03 04:00 EnveIn EURUSD,M30: sarstop = 1.0678
20:02:22 1999.09.03 04:30 EnveIn EURUSD,M30: sarstop = 1.0678
20:02:22 1999.09.03 05:00 EnveIn EURUSD,M30: sarstop = 1.0679
20:02:22 1999.09.03 05:30 EnveIn EURUSD,M30: sarstop = 1.0678
20:02:22 1999.09.03 06:00 EnveIn EURUSD,M30: sarstop = 1.0678
20:02:22 1999.09.03 06:30 EnveIn EURUSD,M30: sarstop = 1.0678
20:02:22 1999.09.03 07:00 EnveIn EURUSD,M30: sarstop = 1.0678
20:02:22 1999.09.03 07:30 EnveIn EURUSD,M30: sarstop = 1.0678
20:02:22 1999.09.03 08:00 EnveIn EURUSD,M30: sarstop = 1.0678
20:02:22 1999.09.03 08:30 EnveIn EURUSD,M30: sarstop = 1.0678
20:02:22 1999.09.03 09:00 EnveIn EURUSD,M30: sarstop = 1.0679
20:02:22 1999.09.03 09:30 EnveIn EURUSD,M30: sarstop = 1.0679
20:02:22 1999.09.03 10:00 EnveIn EURUSD,M30: sarstop = 1.0679
20:02:22 1999.09.03 10:30 EnveIn EURUSD,M30: sarstop = 1.0698
20:02:22 1999.09.03 11:00 EnveIn EURUSD,M30: sarstop = 1.0698
20:02:22 1999.09.03 11:30 EnveIn EURUSD,M30: sarstop = 1.0671
20:02:22 1999.09.03 12:00 EnveIn EURUSD,M30: sarstop = 1.0672
20:02:22 1999.09.03 12:30 EnveIn EURUSD,M30: sarstop = 1.0674
20:02:22 1999.09.03 13:00 EnveIn EURUSD,M30: sarstop = 1.0675
20:02:22 1999.09.03 13:30 EnveIn EURUSD,M30: sarstop = 1.0676

И что с этим делать?

 
001 >>:

Есть функция.//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Функция изменения переменной по закону Фибоначчи |
  //+------------------------------------------------------------------+

Что с этим делать? Я не знаю.

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

Может быть, следующий посетитель темы сможет этот скрипт запустить и захочет помочь :-).

 
jartmailru писал(а) >>

Что с этим делать? Я не знаю.

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

Может быть, следующий посетитель темы сможет этот скрипт запустить и захочет помочь :-).

jartmailru
писал(а)
>>

Что с этим делать? Я не знаю.

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

Может быть, следующий посетитель темы сможет этот скрипт запустить и захочет помочь :-).

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

 

Да, как только вввел проверку на бар, сразу началось.

if (Time[0]<=PrevTime) return(0); {
PrevTime=Time[0];

.....}

Вот работающий код. Что мне не понятно, так это почему распринтовка из функции идет, а возвращение функцией значения нет, кто мне может объяснить?

//+------------------------------------------------------------------+
//| Bag.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"
int n0=0,n1=1,nf=0,Fibo;
bool Reset;
static int PrevTime=0;
//+------------------------------------------------------------------+
//| Функция изменения переменной по закону Фибоначчи |
//+------------------------------------------------------------------+
int Fibo(bool Reset)
{
if(Reset!=true)
{ nf=n0+n1;
n0=n1;
n1=nf;
Print(" n0= ", n0," n1= ", n1," nf= ",nf);
return(n0);
}
else
{
n0=0;
n1=1;
nf=0;
}

return(n0);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (Time[0]<=PrevTime) return(0); {
PrevTime=Time[0];
Print(" Fibo(Reset) = ",Fibo(Reset)," Fibo = ",Fibo);
if(Fibo(Reset)>987) Reset=1;
else Reset=0;
}
}
//+------------------------------------------------------------------+

По поводу параболика. Скопировал из другого МТ другую копию и вроде заработал.

 
001 >>:

Вот работающий код. Что мне не понятно, так это почему распринтовка из функции идет, а возвращение функцией значения нет, кто мне может объяснить?

int n0=0,n1=1,nf=0,Fibo; <--- Зачем здесь объявлена неинициализированная переменная Fibo ?

Print(" Fibo(Reset) = ",Fibo(Reset)," Fibo = ",Fibo); <--- которая зачем-то печатается здесь


 

Первый нормально идет, второй нет, разница почти четверть кода.

Файлы:
parabolic.mq4  6 kb
 
001 писал(а) >>

Первый нормально идет, второй нет, разница почти четверть кода.

Файлы:
 
jartmailru писал(а) >>

int n0=0,n1=1,nf=0,Fibo; <--- Зачем здесь объявлена неинициализированная переменная Fibo ?

Print(" Fibo(Reset) = ",Fibo(Reset)," Fibo = ",Fibo); <--- которая зачем-то печатается здесь


Я пытался хотя бы через переменную получить правильные значения, в принципе она не нужна.

 

Ошибка 5 баллов!

int start()
{
if (Time[0]<=PrevTime) return(0); {
PrevTime=Time[0];
double value = Fibo(Reset); <--- значение функции надо брать в переменную
Print(" Fibo(Reset) = ",value); 
if(value>987) Reset=1;
else Reset=0;
}
}
 

Как попал этот параболик ко мне не понятно, вроде не скачивал, вобщем вдруг у кого тоже такая проблема.

А вот с фукцией мне не понятно. Вобщем окончательный вид. Как только ввожу проверку бара или bool Reset начинается такая свистопляска.

int n0=0,n1=1,nf=0;
bool Reset;
static int PrevTime=0;

int Fibo(bool Reset)
{
if(Reset!=true)
{ nf=n0+n1;
n0=n1;
n1=nf;
Print(" n0= ", n0," n1= ", n1," nf= ",nf);
return(n0);
}
else
{
n0=0;
n1=1;
nf=0;
}

return(n0);
}

int start()
{
if (Time[0]<=PrevTime) return(0); {
PrevTime=Time[0];
Print(" Fibo(Reset) = ",Fibo(Reset));
if(Fibo(Reset)>987) Reset=1;
else Reset=0;
}
}

 
001 >>:

Как попал этот параболик ко мне не понятно, вроде не скачивал, вобщем вдруг у кого тоже такая проблема. {...}

Перечитайте мой ответ.
Причина обращения: