Для кучи:)
double ClosePos=0.0; double x=0.0; ClosePos=BBPos[SymbPos][TFPos][SMALL_BB]; // массив типа double Print("Position-",ClosePos); x=ClosePos*100.0; Print("x-",x);
возвращает следующий результат:
2010.05.24 00:21:03 CH (EURUSD,H4) x- 0
2010.05.24 00:21:03 CH (EURUSD,H4) Position- 0.57
а должно быть 56.999999 или нет?
В чем фокус? может кто подскажет кто сталкивался с подобным.
причем, если изменить код на следующий
double ClosePos=0.0; double x=0.0; ClosePos=0.57; Print("Position-",ClosePos); x=ClosePos*100.0; Print("x-",x);
то все как и должно быть, получаю ожидаемый результат:
2010.05.24 00:34:45 CH (EURUSD,H4) x- 56.99999999999999
2010.05.24 00:34:45 CH (EURUSD,H4) Position- 0.57
Локальные переменные в функции, к примеру
int myVar;
Какое будет значение если при инициализации не указывать явно значение? В мкл4 было в хелпе написано, если не указывать явно начальное значение, то присваивается ноль, здесь не нашел.
Не знаю как локальные в функции, а вот если вынести их в начало кода то при инициализации вот такая фишка наблюдается:
- При первой инициализации int myVar примет значение равное 0 (если явно не указывать);
- При повторных инициализации (к примеру при смене ТФ) значение будет последним которое было до инициализации. т.е если в ходе работы значение явно указывалось то оно таким и будет, в противном случае будет 0.
PS
Как я понял тут фишка в смене алгоритма работы. В МТ4 такие переменные и динамические массивы обнулялись, а в MT5 этого не происходит.
- www.mql5.com
Неявная инициализация не производится.
Понятно спасибо!
Для кучи:)
возвращает следующий результат:
2010.05.24 00:21:03 CH (EURUSD,H4) x- 0
2010.05.24 00:21:03 CH (EURUSD,H4) Position- 0.57
а должно быть 56.999999 или нет?
Похоже на ошибку компилятора. Не могли бы прислать код воспроизводящий данную ошибку?
В результате тщательных исследований алгоритма выяснилось, что данный баг происходит, если в коде есть секция #import.
Вот скрипт, который определяет позицию цены относительно среды Болинджера:/+------------------------------------------------------------------+ //| bug.mq5 | //| Copyright 2010, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #define OPEN_PRICE 1 #define HIGH_PRICE 2 #define LOW_PRICE 3 #define CLOSE_PRICE 4 /* #import "JCPDS.ex5" string PatternDesc(int id,int LangID); string CandleDesc(int id,int LangID); #import*/ int BBhandle; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double pos=GetPricePos(1,CLOSE_PRICE); Print("position-"+DoubleToString(pos,2)); } //+------------------------------------------------------------------+ double GetPricePos(int Index,uchar AppPrice) { double BBPos=0.0, Length=0.0, Width=0.0, Upper=0.0, Lower=0.0, Current=0.0; double price[1]; int copied=0; BBhandle=iBands(_Symbol,_Period,120,0,2.0,PRICE_CLOSE); switch(AppPrice) { case CLOSE_PRICE: copied=CopyClose(_Symbol,_Period,Index,1,price); if(copied<0) return(0); break; case HIGH_PRICE: copied=CopyHigh(_Symbol,_Period,Index,1,price); if(copied<0) return(0); break; case LOW_PRICE: copied=CopyLow(_Symbol,_Period,Index,1,price); if(copied<0) return(0); break; case OPEN_PRICE: copied=CopyOpen(_Symbol,_Period,Index,1,price); if(copied<0) return(0); break; } Upper=GetBBValues(UPPER_BAND,Index); Lower=GetBBValues(LOWER_BAND,Index); Current=price[0]; if(Current>0 && Upper>0 && Lower>0) { Length =Current-Lower; Width =Upper-Lower; BBPos =NormalizeDouble(Length/Width,2)*100.0; } return(BBPos); } //+------------------------------------------------------------------+ //|Поучение значений индикатора BB | //+------------------------------------------------------------------+ double GetBBValues(uchar Buffer,int Index) { double BB[1]; if(CopyBuffer(BBhandle,Buffer,Index,1,BB)!=1) BB[0]=0; return(BB[0]); }
Результат выполнения :
2010.05.24 16:32:07 bug (EURUSD,H1) position-47.00
но если активировать секцию
#import "JCPDS.ex5" string PatternDesc(int id,int LangID); string CandleDesc(int id,int LangID); #import
то результат выполнения
2010.05.24 16:28:52 bug (EURUSD,H1) position-0.00
Как можно объяснить такую ситуацию?
Причем импортируемые функции работают как положено.
Как можно объяснить такую ситуацию?
Причем импортируемые функции работают как положено.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Локальные переменные в функции, к примеру
int myVar;
Какое будет значение если при инициализации не указывать явно значение? В мкл4 было в хелпе написано, если не указывать явно начальное значение, то присваивается ноль, здесь не нашел.