имеем
tehpp:
имеем
имеем
закиньте значение баров в матрицу, потом сортируйте матрицу
или так
ArraySetAsSeries(High,true); CopyHigh(Symbol(),PERIOD_H4,0,20,High);
уже будет отсортирован в зависимости от флага, так 0,1,2,3,4,5....... или так 19,18,17,16.........
В любом случае придется определить, что такое близкие значения, либо(совсем коряво) задать сколько именно "максимальных" значений необходимо.
int x=0, y=0; double BufferHigh[999]; double BufferLow[999]; datetime BufferHighTime[999]; datetime BufferLowTime[999]; for(int i=1; i<Bars; i++) { if (High[i]>High[i+1] && High[i]>High[i+2] && High[i]>High[i-1]) { BufferHigh [x] = High[i]; BufferHighTime[x] = Time[i]; x++; } if (Low[i]<Low[i+1] && Low[i]<Low[i+2] && Low[i]<Low[i-1]) { BufferLow [y] = Low[i]; BufferLowTime[y] = Time[i]; y++; } }
elmucon:
тут прокладка может получиться
pako:
тут прокладка может получиться
тут прокладка может получиться
РАБОТАЕТ
//+------------------------------------------------------------------+ for(i=0; i<limit; i++) { BufferStoh[i] = iStochastic(_Symbol,PERIOD_CURRENT,KPeriod,DPeriod,Slowing,StohMethod,int(StohMode),MODE_MAIN,i); } //+------------------------------------------------------------------+ x=0; y=0; for(i=0; i<250; i++) { BufferTrogUp [i] = EMPTY_VALUE; BufferPeakDn [i] = EMPTY_VALUE; BufferTrogTime[i] = EMPTY_VALUE; BufferPeakTime[i] = EMPTY_VALUE; } for(i=1; i<limit-10; i++) { if (BufferStoh[i]<BufferStoh[i+1] && BufferStoh[i]<BufferStoh[i+2] && BufferStoh[i]<BufferStoh[i-1]) { BufferTrogUp [x] = BufferStoh[i]; BufferTrogTime[x] = Time[i]; x++; } if (BufferStoh[i]>BufferStoh[i+1] && BufferStoh[i]>BufferStoh[i+2] && BufferStoh[i]>BufferStoh[i-1]) { BufferPeakDn [y] = BufferStoh[i]; BufferPeakTime[y] = Time[i]; y++; } }
elmucon:
РАБОТАЕТ
я не спорю работает, но прокладка может получиться, если значений соответствующих условию
High[i]>High[i+1] && High[i]>High[i+2] && High[i]>High[i-1]
будет больше одного
pako:
я не спорю работает, но прокладка может получиться, если значений соответствующих условию
будет больше одного
при точности В 0,00001 очень редкое явление
Мне так проще осозновать
//+------------------------------------------------------------------+ //| EMC.SYS.DIVER | //| ELMUCON ™" © 2014 | //| (Electronic Multi Configurators ™") | //+------------------------------------------------------------------+ #property copyright "Copyright © 2014 by ELMUCON ™" #property link "" #property version "1.02" "" #property description "Демо! Пол Индикатора дивергенции между стохастиком и ценой" #property strict #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 clrGray #property indicator_color2 clrLime #property indicator_color3 clrRed #property indicator_width1 2 #property indicator_width2 0 #property indicator_width3 0 //+------------------------------------------------------------------+ enum Stoh_Mode { LH=0, // Low/High CC=1, // Close/Close }; enum YesNo { ys=0, // Да no=1, // Нет }; //+------------------------------------------------------------------+ input string __0__ = " <<< EMC.SYS.DIVER >>>"; // Индикатор дивергенции стохастика и цены input int CountBars = 1000; // Количество считаемых баров input string __1__ = "<<< Настройки Stochastic >>>"; // Настройки индикатора Stochastic input int KPeriod = 5; // K% периуд стохастика input int DPeriod = 3; // D% периуд стохастика input int Slowing = 5; // Замедление стохастика input ENUM_MA_METHOD StohMethod = MODE_LWMA; // Метод усреднения стохастика input Stoh_Mode StohMode = LH; // Тип цены стохастика input YesNo ReversDiver = ys; // Показывать обратную дивергенцию //+------------------------------------------------------------------+ double BufferStoh[]; double ArrowUp[]; double ArrowDn[]; double BufferTrogUp [250]; datetime BufferTrogTime[250]; double BufferPeakDn [250]; datetime BufferPeakTime[250]; int i,x,y,limit; string short_name; //+------------------------------------------------------------------+ int OnInit(void) { short_name="EMC.SYS.DIVER ("+string(KPeriod)+","+string(DPeriod)+","+string(Slowing)+")"; IndicatorShortName (short_name); IndicatorDigits (0); IndicatorBuffers (3); SetIndexBuffer (0,BufferStoh); SetIndexStyle (0,DRAW_LINE); SetIndexLabel (0,short_name); SetIndexBuffer (1,ArrowUp); SetIndexStyle (1,DRAW_ARROW); SetIndexArrow (1,233); SetIndexBuffer (2,ArrowDn); SetIndexStyle (2,DRAW_ARROW); SetIndexArrow (2,234); IndicatorSetInteger(INDICATOR_LEVELS,2); IndicatorSetDouble (INDICATOR_LEVELVALUE,0,80); IndicatorSetDouble (INDICATOR_LEVELVALUE,1,20); IndicatorSetDouble (INDICATOR_MINIMUM,0); IndicatorSetDouble (INDICATOR_MAXIMUM,100); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //+------------------------------------------------------------------+ limit=CountBars+MathMax(KPeriod,DPeriod); //+------------------------------------------------------------------+ for(i=0; i<limit; i++) { BufferStoh[i] = iStochastic(_Symbol,PERIOD_CURRENT,KPeriod,DPeriod,Slowing,StohMethod,int(StohMode),MODE_MAIN,i); } //+------------------------------------------------------------------+ x=0; y=0; for(i=0; i<250; i++) { BufferTrogUp [i] = EMPTY_VALUE; BufferPeakDn [i] = EMPTY_VALUE; BufferTrogTime[i] = EMPTY_VALUE; BufferPeakTime[i] = EMPTY_VALUE; } for(i=1; i<limit-10; i++) { if (BufferStoh[i]<BufferStoh[i+1] && BufferStoh[i]<BufferStoh[i+2] && BufferStoh[i]<BufferStoh[i-1]) { BufferTrogUp [x] = BufferStoh[i]; BufferTrogTime[x] = Time[i]; x++; } if (BufferStoh[i]>BufferStoh[i+1] && BufferStoh[i]>BufferStoh[i+2] && BufferStoh[i]>BufferStoh[i-1]) { BufferPeakDn [y] = BufferStoh[i]; BufferPeakTime[y] = Time[i]; y++; } } for(i=0; i<100; i++) { if (BufferTrogUp[i] != 0 && BufferTrogUp[i]>BufferTrogUp[i+1]) { ArrowUp[iBarShift(Symbol(),0,BufferTrogTime[i],false)] = BufferTrogUp[i]; } if (BufferTrogUp[i] != 0 && BufferTrogUp[i]<BufferTrogUp[i+1] && ReversDiver == 0) { ArrowUp[iBarShift(Symbol(),0,BufferTrogTime[i],false)] = BufferTrogUp[i]; } if (BufferPeakDn[i] != 0 && BufferPeakDn[i]<BufferPeakDn[i+1]) { ArrowDn[iBarShift(Symbol(),0,BufferPeakTime[i],false)] = BufferPeakDn[i]; } if (BufferPeakDn[i] != 0 && BufferPeakDn[i]>BufferPeakDn[i+1] && ReversDiver == 0) { ArrowDn[iBarShift(Symbol(),0,BufferPeakTime[i],false)] = BufferPeakDn[i]; } } //+------------------------------------------------------------------+ return(rates_total); }
#property description "Демо! Пол Индикатоа дивергенции между стохастиком и ценой"
не привык я к полумерам:))
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь