Тогда публикуйте в CodeBase
Ок. Попробовал со стриктом простой индюк, его можно и опубликовать.
Но даже в нем не могу найти решение проблемы, вроде по всем новшествам компилятора прошелся - никакого эффекта.
//▼ СВОЙСТВА ИНДИКАТОРА ════════════════════════════════════════════════════════════ #property strict #property version "1.0" #property copyright "Copyright 2015, Animatics.ru, Veselov Pavel" #property link "http://www.animatics.ru" #property description " " #property description "[EN] Added: smoothing, light input and output, modes of finding points and auxiliary options." #property description " " #property description "[RU] Добавлено: сглаживание, индикатор входа/выхода, режимы определения точек разворота и вспомогательные опции." #property indicator_separate_window //► в отдельном окне #property indicator_buffers 4 //► количество буферов #property indicator_color1 clrSteelBlue //► цвета линий #property indicator_color2 clrTeal #property indicator_color3 clrOrangeRed #property indicator_color4 clrLime //▼ задаем уровни ══════════════════════════════════════════════════════════════════ #property indicator_levelcolor clrDimGray //► Цвет уровней #property indicator_level1 100.0 //► Установка уровней #property indicator_level2 -100.0 //► Установка уровней //▼ задаем новый тип данных для режимов точек разворота ════════════════════════════ enum PointMode {NONE=0,SIMPLE=1,CROSS=2,FAST_LVL=3,SLOW_LVL=4,PIVOT_CCI=5,PIVOT_SMA=6}; //▼ входные параметры ══════════════════════════════════════════════════════════════ input int CCIperiod=14;//Period CCI input PointMode P_mode=2;//POINT_MODE extern int SMAperiod=6;//Period SMA input bool ShowAlert=true;//Alert on/off input bool HideCCI=false;//on/off CCI line //▼ глобальные переменные ══════════════════════════════════════════════════════════ double Buf_0[],Buf_1[],Buf_2[],Buf_3[]; //► массивы под буферы индикатора string short_name="CCI+"; //► короткое имя индикатора double ts; //► переменная для пользовательских функции int i,Counted_bars; //► Индекс бара, количество просчитанных баров //▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ //▼ инициализация ══════════════════════════════════════════════════════════════════ int init(){ //▼ проверка введенных параметров ══════════════════════════════════════════════════ if (SMAperiod<=2){SMAperiod=2;Alert("SMA value is too low!\n\nSet SMA=2.");} //► ограничиваем минимальный параметр сглаживания и оповещение if (HideCCI==true)Alert("Attention! CCI line is OFF!\n\n In the NONE and SIMPLE mode line CCI is not visible!"); //► оповещение об отключенной линии CCI //▼ назначение буферов ═════════════════════════════════════════════════════════════ IndicatorBuffers(4); //► Количество буферов SetIndexBuffer(0,Buf_0); //► Назначение массива буферу if (HideCCI==false)SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1); //► если включено CCI то задаем стиль линии if (HideCCI==true)SetIndexStyle (0,DRAW_NONE); //► если отключено - не рисуем SetIndexBuffer(1,Buf_1); SetIndexStyle (1,DRAW_LINE,STYLE_DOT,1); SetIndexBuffer(2,Buf_2); SetIndexStyle (2,DRAW_ARROW); SetIndexArrow (2,242); SetIndexBuffer(3,Buf_3); SetIndexStyle (3,DRAW_ARROW); SetIndexArrow (3,241); IndicatorDigits(8); //▼ надписи в окне индикатора ════════════════════════════════════════════════════ IndicatorShortName(short_name); SetIndexLabel(0,"CCI("+IntegerToString(CCIperiod)+")"); //► метка линии 0 SetIndexLabel(1,"CCI("+IntegerToString(CCIperiod)+")+SMA("+IntegerToString(SMAperiod)+")"); //► метка линии 1 SetIndexLabel(2,"SELL"); //► метка линии 2 SetIndexLabel(3,"BUY"); //► метка линии 3 //▼ return(0);} //► Выход из спец. ф-ии init() //▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ int start(){ //▼ начало цикла ══════════════════════════════════════════════════════════════════ Counted_bars=IndicatorCounted(); //► Количество просчитанных баров i=Bars-Counted_bars-1; //► Индекс первого непросчитанного while(i>=0){ //► Цикл по непосчитанным барам //▼ получаем значение CCI ═════════════════════════════════════════════════════════ Buf_0[i]=iCCI(NULL,0,CCIperiod,PRICE_TYPICAL,i); //► //▼ Режимы определения точек ══════════════════════════════════════════════════════ if (P_mode==1){ //► SIMPLE, пересечение CCI уровней if (Buf_0[i]<100 && Buf_0[i+1]>=100)Buf_2[i]=117; if (Buf_0[i]>-100 && Buf_0[i+1]<=-100)Buf_3[i]=-117; } if (P_mode==2){ //► CROSS, пересечение CCI и SMA в зоне Buf_1[i]=sma(Buf_0,SMAperiod,i); if (Buf_0[i]<Buf_1[i] && Buf_0[i+1]>=Buf_1[i+1] && Buf_0[i+1]>100)Buf_2[i]=117; if (Buf_0[i]>Buf_1[i] && Buf_0[i+1]<=Buf_1[i+1] && Buf_0[i+1]<(-100))Buf_3[i]=-117; } if (P_mode==3){ //► FAST_LVL, пересечение CCI уровней при SMA в зоне и направлено на пересечение уровня Buf_1[i]=sma(Buf_0,SMAperiod,i); if (Buf_0[i]<100 && Buf_0[i+1]>=100 && Buf_1[i]>100 && Buf_1[i]<=Buf_1[i+1])Buf_2[i]=117; if (Buf_0[i]>-100 && Buf_0[i+1]<=-100 && Buf_1[i]<-100 && Buf_1[i]>=Buf_1[i+1])Buf_3[i]=-117; } if (P_mode==4){ //► SLOW_LVL, пересечение SMA уровней Buf_1[i]=sma(Buf_0,SMAperiod,i); if (Buf_1[i]<100 && Buf_1[i+1]>=100)Buf_2[i]=117; if (Buf_1[i]>-100 && Buf_1[i+1]<=-100)Buf_3[i]=-117; } if (P_mode==5){ //► PIVOT_CCI, точки разворота CCI при SMA в зоне Buf_1[i]=sma(Buf_0,SMAperiod,i); if (Buf_0[i]<Buf_0[i+1] && Buf_0[i+1]>=Buf_0[i+2] && Buf_1[i]>=100)Buf_2[i]=117; if (Buf_0[i]>Buf_0[i+1] && Buf_0[i+1]<=Buf_0[i+2] && Buf_1[i]<=-100)Buf_3[i]=-117; } if (P_mode==6){ //► PIVOT_SMA, точки разворота SMA в зоне Buf_1[i]=sma(Buf_0,SMAperiod,i); if (Buf_1[i]<Buf_1[i+1] && Buf_1[i+1]>=Buf_1[i+2] && Buf_1[i]>=100)Buf_2[i]=117; if (Buf_1[i]>Buf_1[i+1] && Buf_1[i+1]<=Buf_1[i+2] && Buf_1[i]<=-100)Buf_3[i]=-117; } if (ShowAlert && Buf_2[i]==117 && i<5)Alert("Possible <<SELL>>"); //► визуальный/звуковой сигнал о появлении точки if (ShowAlert && Buf_3[i]==-117 && i<5)Alert("Possible <<BUY>>"); //════════════════════════════════════════════════════════════════════════════════════ i--; //► Расчёт индекса следующего бара } //--- return(0); //► Выход из спец. ф-ии start() } //▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ //▌ ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ //▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ //////////////////////////////////////////////////////////////////// // Функция сглаживания SMA // // ------------------------------- // double sma(double &sma_array[], int sma_period, int sma_start) // <- сглаживаемый массив, период сглаживания, первый элемент. { // for(int j=sma_start;j<sma_start+sma_period;j++){ // ts=ts+sma_array[j];} // ts=ts/sma_period; return(ts);} // // _____________________ // // конец функции // //////////////////////////////////////////////////////////////////// //▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ //////////////////////////////////////////////////////////////////// // Функция сглаживания EMA (до 5) // // ------------------------------- // double ema(double &ema_array[], int ema_period, int ema_start) // <- сглаживаемый массив, период сглаживания, первый элемент. { ts=ema_array[ema_start]; // for(int j=ema_start;j<ema_start+ema_period;j++){ // ts=ts+MathPow(2,j-ema_start)*ema_array[j+1];} // ts=ts/MathPow(2,ema_period); return(ts);} // // _____________________ // // конец функции // //////////////////////////////////////////////////////////////////// //▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Всем привет.
Появилось желание публиковать свои индюки в маркет, там обязательно использование #property strict
При внесении его в код и компиляции - ошибок и предупреждений нет, но в терминале индикатор пустой, нет ни одной линии. В окне данных значений тоже нет.
Предположительно в чем может быть загвоздка?
Возможно подобное уже обсуждалось, но мне ответа не удалось найти.
з.ы. Код достаточно большой что бы выкладывать для поиска причины. Да и алгоритм не хотелось бы выдавать на всеобщее обозрение.
Методом исключения пришел к тому что визуализация пропадает уже при появлении кода:
Buf_1[i]=sma(Buf_0,SMAperiod,i);
Используется ф-я:
double sma(double &sma_array[], int sma_period, int sma_start) { for(int j=sma_start;j<sma_start+sma_period;j++) { ts=ts+sma_array[j]; } ts=ts/sma_period; return(ts); }
Buf_1 - double, SMAperiod - int, i - int, return не пустой...
пока не могу разобраться(((
В start перед while добавьте:
if(Counted_bars==0){ i-=SMAperiod; }
В start перед while добавьте:
Не успеваю за вами)) Но уже огромное СПАСИБО! Вышел на нужный путь.
В журнале действительно выход за пределы массива, и условие что на 0 делить нельзя не описано в функции...
Буду копать. Похоже что свои функции все и поганят.
Методом исключения пришел к тому что визуализация пропадает уже при появлении кода:
Используется ф-я:
Buf_1 - double, SMAperiod - int, i - int, return не пустой...
пока не могу разобраться(((
Извините, может, это ошибка:
for(int j=sma_start;j<sma_period;j++) //sma_start+
убрал sma_start+
Извините, может, это ошибка:
убрал sma_start+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет.
Появилось желание публиковать свои индюки в маркет, там обязательно использование #property strict
При внесении его в код и компиляции - ошибок и предупреждений нет, но в терминале индикатор пустой, нет ни одной линии. В окне данных значений тоже нет.
Предположительно в чем может быть загвоздка?
Возможно подобное уже обсуждалось, но мне ответа не удалось найти.
з.ы. Код достаточно большой что бы выкладывать для поиска причины. Да и алгоритм не хотелось бы выдавать на всеобщее обозрение.