Надо посмотреть в списке объектов, есть эти уровни или их действительно нет. Скорее всего они создается, но значения неправильные, где-то там они за пределами окна. Основное подозрение на PercentArr. Еще может быть для SmallNames размер неправильно задан.
Надо посмотреть в списке объектов, есть эти уровни или их действительно нет. Скорее всего они создается, но значения неправильные, где-то там они за пределами окна. Основное подозрение на PercentArr. Еще может быть для SmallNames размер неправильно задан.
в объектах все есть если я правильно понимаю, а на графике нет
что касается PercentArr
string BigNames[7], SmallNames[7]; PercentArr[0] = 100; PercentArr[1] = 78.6; PercentArr[2] = 61.8; PercentArr[3] = 50; PercentArr[4] = 38.2; PercentArr[5] = 23.6; PercentArr[6] = 0; for (int i = 0; i < 7; i++) { BigNames[i] = "Level " + IntegerToString(i); SmallNames[i] = "Level " + IntegerToString(i); }
в объектах все есть если я правильно понимаю, а на графике нет
Если в списке объектов щелкнуть на строке, откроется окно свойств объекта. Посмотрите, какие там значения. Пользуясь функцией Print() выясните, почему расчет неверный. Скорее всего что-то с размерами какого-то массива.
Еще можно попробовать откомпилировать с #property strict, если есть выход за пределы массива, то будет известно в какой строке.
...
Вообще дел на три минуты - но приведен отрывок кода, его никак не запустить, только смотреть и догадываться.
---
С PercentArr все нормально, иначе бы на других больших уровнях были ошибки с мелкими уровнями. Скорее всего размер массива SmalFibo.
Если в списке объектов щелкнуть на строке, откроется окно свойств объекта. Посмотрите, какие там значения. Пользуясь функцией Print() выясните, почему расчет неверный. Скорее всего что-то с размерами какого-то массива.
Еще можно попробовать откомпилировать с #property strict, если есть выход за пределы массива, то будет известно в какой строке.
...
Вообще дел на три минуты - но приведен отрывок кода, его никак не запустить, только смотреть и догадываться.
---
С PercentArr все нормально, иначе бы на других больших уровнях были ошибки с мелкими уровнями. Скорее всего размер массива SmalFibo.
приведу весь код, так как strict использую и ошибок нет
#property copyright "Copyright 2019" #property link "https://mql5.com" #property version "1.00" #property strict input int FiboBar = 300; input int Magic = 1100; double BigFibo[7], SmallFibo[6,7], PercentArr[7]; string BigNames[7], SmallNames[7]; double startBar, endBar, prevStart, prevEnd; bool trend; // false=bear, true=bull //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { PercentArr[0] = 100; PercentArr[1] = 78.6; PercentArr[2] = 61.8; PercentArr[3] = 50; PercentArr[4] = 38.2; PercentArr[5] = 23.6; PercentArr[6] = 0; for (int i = 0; i < 7; i++) { BigNames[i] = "Level " + IntegerToString(i); SmallNames[i] = "Level " + IntegerToString(i); } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { DrawFibo(); } //+------------------------------------------------------------------+ void DrawFibo() { int high, low; high = iHighest(Symbol(), PERIOD_D1, MODE_HIGH, FiboBar, 1); low = iLowest(Symbol(), PERIOD_D1, MODE_LOW, FiboBar, 1); if(iTime(Symbol(), PERIOD_D1, high) > iTime(Symbol(), PERIOD_D1, low)) trend = TRUE; else trend = FALSE; startBar = iHigh(Symbol(), PERIOD_D1, high); endBar = iLow(Symbol(), PERIOD_D1, low); if (startBar == prevStart && endBar == prevEnd) return; DrawLevels(startBar, endBar, startBar - endBar); prevStart = startBar; prevEnd = endBar; } //+------------------------------------------------------------------+ void DrawLevels(double price1=0, // 1 st point's price double price2=0, // 2 nd point's price double size=0) // 0 = Big, 1 = Small { double smallSize = 0; ObjectsDeleteAll(0,OBJ_TREND); // Удаление всех построенных линий if (trend) { BigFibo[0] = price2; BigFibo[6] = price1; ArraySetAsSeries(PercentArr, true); } else { BigFibo[6] = price2; BigFibo[0] = price1; ArraySetAsSeries(PercentArr, false); } for(int i = 1; i <= 5; i++) { if (trend) BigFibo[i] = NormalizeDouble(BigFibo[0] + size*PercentArr[i]/100, Digits); else BigFibo[i] = NormalizeDouble(BigFibo[0] - size*PercentArr[i]/100, Digits); } for (int i = 0; i <= 6; i++) { if (!TrendCreate(BigNames[i], iTime(Symbol(), PERIOD_D1, FiboBar), BigFibo[i], TimeCurrent(), BigFibo[i])) printf("Error Big Fibo"); if (i <= 5) { for (int j = 1; j <= 5; j++) { if (trend) smallSize = BigFibo[i+1] - BigFibo[i]; else smallSize = BigFibo[i] - BigFibo[i+1]; if (trend) SmallFibo[i,j] = NormalizeDouble(BigFibo[i] + smallSize*PercentArr[j]/100, Digits); else SmallFibo[i,j] = NormalizeDouble(BigFibo[i] - smallSize*PercentArr[j]/100, Digits); SmallNames[j] = "Level" + IntegerToString(i) + IntegerToString(j); if (!TrendCreate(SmallNames[j], iTime(Symbol(), PERIOD_D1, FiboBar), SmallFibo[i,j], TimeCurrent(), SmallFibo[i,j], clrBlue)) printf("Error Small Fibo"); } } } } //+------------------------------------------------------------------+ //| Create a trend line by the given coordinates | //+------------------------------------------------------------------+ bool TrendCreate(const string name="TrendLine", // Line name datetime time1=0, // 1 st point's date double price1=0, // 1 st point's price datetime time2=0, // 2 nd point's date double price2=0, // 2 nd point's price const color clr=clrRed, // Line color const int width=1, // Line width const ENUM_LINE_STYLE style=STYLE_SOLID, // Line style const bool ray_right=true, // Line's continuation to the right const bool back=false, // in the background const bool selection=false, // highlight to move const bool hidden=false, // hidden in the object list const long z_order=0, // priority for mouse click const long chart_ID=0, // chart's ID const int sub_window=0) // subwindow index { ResetLastError(); if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,time1,price1,time2,price2)) { Print(__FUNCTION__, ": failed to create a trend line! Error code = ",GetLastError()); return(false); } ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); ChartRedraw(); return(true); } //+------------------------------------------------------------------+ //| Creating Text object | //+------------------------------------------------------------------+ bool TextCreate(const string name="Text", // object name datetime time=0, // anchor point time double price=0, // anchor point price const string text="Text", // the text itself const color clr=clrRed, // color const string font="Arial", // font const int font_size=8, // font size const ENUM_ANCHOR_POINT anchor=ANCHOR_RIGHT_LOWER, // text slope const double angle=0.0, // anchor type const bool back=true, // in the background const bool selection=false, // highlight to move const bool hidden=true, // hidden in the object list const long z_order=0, // priority for mouse click const long chart_ID=0, // chart's ID const int sub_window=0) // subwindow index { ResetLastError(); if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) { Print(__FUNCTION__,": failed to create \"Text\" object! Error code =",GetLastError()); return(false); } ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); ChartRedraw(); return(true); }
спасибо за помощь
А вот у меня какая картинка:
Все же нормально? Ничего не менял.
в том и дело, что иногда нормалньо, а большую часть времени нет.
не понимаю как такое возможно.
сейчас тестирую на м15 и н1 евродоллар и не могу добиться, что б все четко было
проверял у разных брокеров (((
Нашел:
for(int i = 1; i <= 5; i++) { if (trend) BigFibo[i] = NormalizeDouble(BigFibo[0] + size*PercentArr[i]/100, Digits); else BigFibo[i] = NormalizeDouble(BigFibo[0] - size*PercentArr[6-i]/100, Digits); }Добавить отмеченное.
Нашел:
Добавить отмеченное.гениально, и здесь тоже самое
else SmallFibo[i,j] = NormalizeDouble(BigFibo[i] - smallSize*PercentArr[6-j]/100, Digits);
спасибо ОГРОМНОЕ!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Коллеги, помогите найти ошибку.
Задача в большом цикле рассчитать и начертить уровни взяв за отправные точки Low и High
Во внутреннем цикле построить уровни внутри ранее построенных "больших" уровней.
Проблем в том, что не строятся внутренние уровни между 0 и 1 большим и 6-7 большим те что по краям.
А во внутренних все ок.
Вот скриншот
Вот код: