Привет! Есть такое условие: если N последовательных свечей бычьи (или медвежьи) - открываем ордер.
я написал громоздкий код (функцию проверки последовательности) и хотел бы спросить вашего мнения или совета как его упростить...
и такой же (зеркальный) для медвежьих баров...
Цикл в помощь!
Цикл в помощь!
//+------------------------------------------------------------------+ bool BarsStreetDown() { int b=0; for(int i=0;i<=NumberOfBars;i++) { if(Close[i]<Open[i]) b++; } if(b==NumberOfBars) { return(true); } return(false); } //+------------------------------------------------------------------+ bool BarsStreetUp() { int b=0; for(int i=0;i<=NumberOfBars;i++) { if(Close[i]>Open[i]) b++; } if(b==NumberOfBars) { return(true); } return(false); }
NumberOfBars - это N;
Вот так вроде должно работать, просто сейчас тестер занят не могу сам проверить, вот и спрашиваю...
Вот так вроде должно работать, просто сейчас тестер занят не могу сам проверить, вот и спрашиваю...
думаю вместо <= нужно просто < чтоб число элементов совпадало с количеством проходов цикла
думаю вместо <= нужно просто < чтоб число элементов совпадало с количеством проходов цикла
А в условии открытия надо прописать:
if(BarsStreetDown()==NumberOfBars)
{
}
наверное так должно работать...
//=============================================================================================== //------------------------ Функция возвращает направление баров подряд -------------------------+ //=============================================================================================== int GetBearBull(string symb="0", ENUM_TIMEFRAMES tf=0, int ne=2) { if(symb=="0") symb=Symbol(); double open1=0,close1=0,open2=0,close2=0; int b=1,s=1; for(int i=1; i<ne; i++) { open1=iOpen(symb,tf,i); close1=iClose(symb,tf,i); open2=iOpen(symb,tf,i+1); close2=iClose(symb,tf,i+1); if(open2<close2 && open1<close1 && open2<open1) { // бычьи b++; if(b==ne) return(1); } if(open2>close2 && open1>close1 && open2>open1) { // медвежьи s++; if(s==ne) return(2); } } return(0); }
Применение:
if(GetBearBull(Symbol(),0,3) == 1) // 3 бычьих бара if(GetBearBull(Symbol(),PERIOD_M15,5) == 2) // 5 медвежьих бара на М15 if(GetBearBull("MVSUSD",PERIOD_M30,4) == 1) // 4 бычьих бара на символе "MVSUSD" период М30
int LastBars(int N) { //последовательность с бара номер N int dn=0,up=0,i; for(i=N;i<Bars;i++) { if(Close[i]<Open[i])dn--; if(Close[i]>Open[i])up++; if(up!=0 && dn!=0)break; } if(up+dn>0)return(up+dn+1); if(up+dn<0)return(up+dn-1); return(0); }Можно вызвать функцию два и более раз подряд изменяя N, чтобы анализ был более полным

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет! Есть такое условие: если N последовательных свечей бычьи (или медвежьи) - открываем ордер.
я написал громоздкий код (функцию проверки последовательности) и хотел бы спросить вашего мнения или совета как его упростить...
и такой же (зеркальный) для медвежьих баров...