iVolume среднее значение - страница 2

 
Блин. Вот индюк:
#property indicator_separate_window 
#property indicator_buffers 1
#property indicator_color1 Red 

extern int SMAperiod=20;
double SMAvol[];

void init() {SetIndexBuffer(0,SMAvol);}

void start()
  {
   int limit=Bars-IndicatorCounted()-1;
   for(int i=limit; i>=0; i--) {
      double ma=SMAvol[i+1]*SMAperiod-Volume[i+SMAperiod];
      SMAvol[i]=(ma+Volume[i])/SMAperiod;
     }
  }
Файлы:
smavol.mq4  1 kb
 
А зачем шиворот-на-выворот?
 
grell писал(а) >>
Так лучше!


Есть несколько стилей, и не надо изобретать свой. Хотя чтот значит не надо - можете делать как захочется.
Но то что вы привели это не СИ. Это помесь Си++ и C#. Тоже ... не очень. Я за такое увольнял после третьего предупреждения. :)

Читать же не привычно. Поэтому и стиль важен. Если каждый будет по своему писать то это уже не технология, я жуть.

Помница был даже пример кода на си который работал но выглядел как брикет абратодабры. Несколько раз искал его в инете, но так и не нащел. Но код смотрелся очень прикольно. :)

 

Добрый день а подскажите мне пожалуйста как написать в метатрейдере вот такое:

задаю

предел i=100 количество баров учавствующих в расчете где 100 это самая свежая свечка!

А=0.2 коэффициент для расчетов

Q(i)=среднее значение между (B(i),C(i))

B(3)=  (clouse(1)+clouse(2)+clouse(3))/3

B(i)(от 4 - до 100) = B(i-1)+A*(clouse(i)- B(i-1))    --//т.е. В(4)=В(3)+0.2*(цена закрытия 4го бара из 100 выбранных - В(3)) т.е. кроме 3го все остальные считаются по этой формуле, далее i добавляет 1 вплоть до 100

С(98)= (clouse(100)+clouse(99)+clouse(98))/3

С(100-i)(от 4 до 100) =  C(99-i)+A*(clouse(98-i)-C(99-i))  --// т.е. С(97)=С(98)+0.2*(clouse(9)-С(98)) тоже самое только наоборот - 100я свечка 99 и 98 усредняются и используются для расчета С(98) а дальше i добавляет 1 вплоть до 100 и ряд убывает вплоть до 0.

Затем то что получилось надо усреднить, но для того что бы данные усреднять их должно быть хотя бы 2 шт, (но не для екселя, я там считал), а у нас в прямом отсчете В начинается с 3го числа а С с 98, значит Q (1,2) равно С(1,2), а Q (99,100) равно В(99,100). Ряд чисел clouse(3-98), это есть среднее  (В()+С())/2 .

 

Я не шарю в языке си так что прошу помочь, напишите пожалуйста ваши соображения по этому поводу, я не знаю как реагирует си на то что его просят усреднить массив в котором 1го слагаемого нет... ну а остальное до ума доведу, хотябы отдельно формулы помогите эти составить правильно В(3) и С(98) не обязательно должны быть названны этой переменной, думаю конфликт будет как вам удобно так и напишите пожалуйста, буду признателен!

прикрепляю снимок из екселя с формулами так они выгладят,  выделен ряд i, B, С, Q...

 эксель

 
A1EXA-NDR:

Добрый день а подскажите мне пожалуйста как написать в метатрейдере вот такое:

задаю

предел i=100 количество баров учавствующих в расчете где 100 это самая свежая свечка!

А=0.2 коэффициент для расчетов

Q(i)=среднее значение между (B(i),C(i))

B(3)=  (clouse(1)+clouse(2)+clouse(3))/3

B(i)(от 4 - до 100) = B(i-1)+A*(clouse(i)- B(i-1))    --//т.е. В(4)=В(3)+0.2*(цена закрытия 4го бара из 100 выбранных - В(3)) т.е. кроме 3го все остальные считаются по этой формуле, далее i добавляет 1 вплоть до 100

С(98)= (clouse(100)+clouse(99)+clouse(98))/3

С(100-i)(от 4 до 100) =  C(99-i)+A*(clouse(98-i)-C(99-i))  --// т.е. С(97)=С(98)+0.2*(clouse(9)-С(98)) тоже самое только наоборот - 100я свечка 99 и 98 усредняются и используются для расчета С(98) а дальше i добавляет 1 вплоть до 100 и ряд убывает вплоть до 0.

Затем то что получилось надо усреднить, но для того что бы данные усреднять их должно быть хотя бы 2 шт, (но не для екселя, я там считал), а у нас в прямом отсчете В начинается с 3го числа а С с 98, значит Q (1,2) равно С(1,2), а Q (99,100) равно В(99,100). Ряд чисел clouse(3-98), это есть среднее  (В()+С())/2 .

 

Я не шарю в языке си так что прошу помочь, напишите пожалуйста ваши соображения по этому поводу, я не знаю как реагирует си на то что его просят усреднить массив в котором 1го слагаемого нет... ну а остальное до ума доведу, хотябы отдельно формулы помогите эти составить правильно В(3) и С(98) не обязательно должны быть названны этой переменной, думаю конфликт будет как вам удобно так и напишите пожалуйста, буду признателен!

прикрепляю снимок из екселя с формулами так они выгладят,  выделен ряд i, B, С, Q...

 

Самая свежая свеча с индексом 0.

 
Vinin:

Самая свежая свеча с индексом 0.


Спасибо, хороший совет, хорошее начало - но прошу помощи немного по более... на базе математики понимаю немного, но вот логику с++ незнаю как оно устроено
 
A1EXA-NDR:
Спасибо, хороший совет, хорошее начало - но прошу помощи немного по более... на базе математики понимаю немного, но вот логику с++ незнаю как оно устроено
Посмотри функцию CopyClose. Если объявить массив и скопировать туда необходимые значения, можно обрабатывать этот массив по правилам математики.
 
AlexeyVik:
Посмотри функцию CopyClose. Если объявить массив и скопировать туда необходимые значения, можно обрабатывать этот массив по правилам математики.
хорошо попробую, спасибо, а зачем пишут в в коде i++ это типо шаг изменения i добавляется 2каждый раз??
 
A1EXA-NDR:
хорошо попробую, спасибо, а зачем пишут в в коде i++ это типо шаг изменения i добавляется 2каждый раз??

Не 2, а всего 1

i++ равнозначно i = i+1 равнозначно i += 1

Почитай документацию, просто как справочник, много интересного, что можно использовать в работе, можно найти там.

 

Подскажите пожалуйста - я переделал один из имеющихся индикаторов:

1.почему он у меня не выводит на экран ничего? 

2. 0 это самая свежая свеча, а как задать самую старую автоматически чтобы он брал, вообще я пытался ограничиться 100 свечек по этому в коде у меня так и написано массив с операциями над 100 свечами... как сделать так что бы расчет мой выводился на эти 100 свечек начиная с первой? выводится всё кривой линией.

файл прилагаю! Благодарю за сотрудничество!) 

 потыкав ещё несколько часов я пришел к выводу что у меня не правильно задан и использован дополнительный массив. Я хочу ввести новый амссив, например d[], для чего я ставлю запятую и его добовляю в коде программы:

 .

 .input int InpMomPeriod=2;  // Momentum Period

//--- buffers

double ExtMomBuffer[], d[];

.

После чего у меня вообще пропадает вывод на экран графика...

я пытался формулу просто впечатать в алгоритм "Момента" (так называется индикатор который я переделывал) НО мне этого не удается просто по тому, что мне необходим промежуточный массив для вычислений!!! а я его не могу объявить в начале... Помогите люди добрые!!)

Файлы:
_etalon.mq4  3 kb
Причина обращения: