iStochasticOnArray - вожзможно ли? - страница 2

 
про снивозавра нислова
 
ну я вот так както сделал
double StohhD(int period,int periodD,int shift,double &array[])

   double HiStoxx  = array[ArrayMaximum(array,period,shift)];
   double MinStoxx =  array[ArrayMinimum (array,period,shift)];
а сам массив
   for(int i=0;i<limit;i++) imalinebase[i]=iMA(NULL,0,5,0,MODE_EMA,PRICE_WEIGHTED,i);
потом просто вызов функции
ExtMapBuffer1[i]=StohhD(KFast,DFPeriod,i,imalinebase);
и функция работает с массивом.

незнаю как у вас функция получает данный из тела программы. там по идее должна инкапсуляция должна ругаться на над попробовать
 
Ну вот весь код. Абсолютно рабочий.
#property indicator_separate_window // в отд. окне 
#property indicator_buffers 2
#property indicator_color1 Blue // главная
#property indicator_style1 0
#property indicator_color2 Red // сигнальная
#property indicator_style2 0
#property indicator_maximum 100
#property indicator_minimum 0
#property indicator_level1 80
#property indicator_level2 20

// входные параметры
   // MA
extern int MAperiod=3; // период MA
extern int MAMethod=0; // тип сглаживания
extern int PosPrice=0; // тип позиционируемой цены (Close)
extern int MaxPrice=2; // тип цены поиска максимумов (High)
extern int MinPrice=3; // тип цены поиска минимумов (Low)
   // Стохастик
extern int Kperiod=5; // %K
extern int Dperiod=3; // %D сигнальная
extern int Slowing=3; // замедление
extern int Dmethod=0; // тип MA сигнальной
// инд.буферы
double   Main[], // главная
         Signal[], // сигнальная
         Pos[], // позиционируемая цена
         Max[], // цена поиска максимумов
         Min[]; // цена поиска минимумов

void init() {
   // индикаторные буферы 
   SetIndexBuffer(0,Main); // главная   
   SetIndexStyle(0,DRAW_LINE);
   string _str="("+Kperiod+","+Slowing+")";
   SetIndexLabel(0,"Main"+_str);
   SetIndexBuffer(1,Signal); // сигнальная
   SetIndexStyle(1,DRAW_LINE);
   _str="("+Dperiod+")";
   SetIndexLabel(1,"Signal"+_str);
   // расчетные буферы
   IndicatorBuffers(5);
   SetIndexBuffer(2,Pos); // позиционируемая цена
   SetIndexBuffer(3,Max); // цена поиска максимумов
   SetIndexBuffer(4,Min); // цена поиска минимумов
   // короткое имя
   string ShName=ShName+"Stoch ";
   ShName=ShName+" ("+Kperiod+","+Dperiod+","+Slowing+")";
   IndicatorShortName(ShName);   
  }

void start() {
   // граница пересчета
   int limit=Bars-IndicatorCounted()-1;  
   if(limit>1) limit=Bars-1; 
   // заполнение массивов
   for(int i=limit; i>=0; i--) {
      Pos[i]=iMA(NULL,0,MAperiod,0,MAMethod,PosPrice,i); // позиционируемая цена
      Max[i]=iMA(NULL,0,MAperiod,0,MAMethod,MaxPrice,i); // цена поиска максимумов
      Min[i]=iMA(NULL,0,MAperiod,0,MAMethod,MinPrice,i); // цена поиска минимумов
     }
   // расчет главной линии
   for(i=limit; i>=0; i--) Main[i]=Stoch(Kperiod,Slowing,i); // вызов ф-ии стохастика
   // расчет сигнальной
   for(i=limit; i>=0; i--) Signal[i]=iMAOnArray(Main,Bars,Dperiod,0,Dmethod,i);
  }

double Stoch(int Kperiod, int Slowing, int i) {  
   if(i+Kperiod+Slowing>Bars) return(-1); // недостаточно баров - выход
   // экстремумы цены в цикле замедления/сглаживания
   double max,min,c;
   for(int j=i; j<i+Slowing; j++) {
      max+=Max[ArrayMaximum(Max,Kperiod,j)]; // максимумы
      min+=Min[ArrayMinimum(Min,Kperiod,j)]; // минимумоы
      c+=Pos[j]; // позиционируемое значение
     }
   // вычисление осциллятора
   double delta=max-min; // размах
   if(delta==0) return(50); // деление на ноль
   else return(100*(c-min)/delta); // стохастик
  }
Поставите MAperiod=1 - получите обычный стохастик

====

CoreWinTT , что это с вами? Клавиатура укусила?
Файлы:
stochonma.mq4  3 kb
 
да не просто убивают такие выражения что это мой индикатор
просто это перетягивание одеяло совершенно потупому выглядит для человека
который прочел труды людей которые дейсвительно изобрели эти индикаторы
и такие выражения просто привозят в истерику =)

и да насчет инкапсуляции был неправ
да ту идёт глобально определение массива и он доступен всей программе
только зачем 3 одинаковых массива?
 
CoreWinTT >>:
да не просто убивают такие выражения что это мой индикатор
просто это перетягивание одеяло совершенно потупому выглядит для человека
который прочел труды людей которые дейсвительно изобрели эти индикаторы
и такие выражения просто привозят в истерику =)
??? А где это я говорил, что стохастик придумал я? MAsterSlave - мой. Там еще арифмитические действия используются - их тоже не придумал. Буквы тоже не я изобрел. Поцепляться захотелось? ))) Истерика жить и строить помогает? Ну тогда ладно - как угодно.
А это - macd by CorWinTT v.5 - как понимать? А, дружок?

и да насчет инкапсуляции был неправ
да ту идёт глобально определение массива и он доступен всей программе
только зачем 3 одинаковых массива?

Там три разных массива. Спецом для вас:

         Pos[], // позиционируемая цена
         Max[], // цена поиска максимумов
         Min[]; // цена поиска минимумов

В каждый может быть занесен свой тип цены. Для классического (Лейна) стохастика - это Close, High, Low соответственно.

 

Петр:
Ну вот весь код. Абсолютно рабочий.
Поставите MAperiod=1 - получите обычный стохастик

Да , в этот код можно вставить любой алгоритм подсчёта не только МА . Подскажите может есть подобный код индикатора МАГДи в который можно так же вставить отличительный от стандартного алгоритм подсчёта . В МАГДи весь подсчёт по данным PRICE_CLOSE , а хотелось бы чтобы например по данным допустим РСИ но не вызывая его данные а производя подсчёт  в индикаторе МАГДи .

Причина обращения: