Ответить
21.10.2008, 18:39
Аватар для S_l_a_v_a
S_l_a_v_a S_l_a_v_a вне форума Местный житель
Регистрация: 17.10.2008 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 0

По умолчанию Знающие помогите

Помогите пожалста!
у меня проблема - не могу "сгладить" .

допустим...
...
Mom[r]=Close[r]-Close[r+1];
Mom_Flate[r]=iMAOnArray(Mom,Bars,Period_Flate_Mom,0,MODE_EMA,r );
...
тогда при объявлении массива Mom_Flate[] нужно указывать его размер:
...
double Mom_Flate[1000];
...

дак вот как мне написать код для советника если диапазон тестирования (количество баров) больше 1000000 (например за 1 месяц, при периоде 1 мин.)
21.10.2008, 20:49
Аватар для Юлия
Юлия Юлия на форуме Главный редактор
Регистрация: 16.08.2008 / Сообщений: 8,082
Поблагодарили 8,430 раз(а) / Репутация: 8734
А вы точно уверены, что есть необходимость хранить этот массив на миллион и нельзя в ходе работы советника обратиться к необходимому бару через цикл? Т.е. ну как-то так:

for r=1 to 1 000 000 do
{
Mom[r]=Close[r]-Close[r+1];
Mom_Flate[r]=iMAOnArray(Mom,Bars,Period_Flate_Mom,0,MODE_EMA,r );
}

пардон, что не си, но и так ясно, я надеюсь...

Хочешь такую линейку? Жми.
_____________________________________
✔ Полезные ссылки: Портал форекс трейдеров | Правила форума | Статусы форума
♞ Конкурсы на форуме: Новогодняя битва трейдеров за 2018$
22.10.2008, 03:25
Регистрация: 18.08.2008 / Сообщений: 8,856
Поблагодарили 2,792 раз(а) / Репутация: 2826
а зачем брать такой большой период? разве что для визуального тестинга, но тогда тормозить будет при запуске минут 5 считать будет.

можно индикатор гораздо проще протестировать.
сделать надо рассчет на 50-100 баров, запустить любой советник на тестирование, кинуть индикатор в окно визуализации и смотреть как он себя ведет.
22.10.2008, 22:26
Аватар для S_l_a_v_a
S_l_a_v_a S_l_a_v_a вне форума Местный житель
Регистрация: 17.10.2008 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 0
Спасибочки НО ВСЕ НЕ ТУДА, или я что-то не понимаю!
задам вопрос по другому: есть кокое-то занченние например:
Mom=Close-Close(-1);
как мне найти сглаженное значение Mom (Сглаживание - это произвести процесс свертки для Mom скользящей средней).
22.10.2008, 22:28
Аватар для S_l_a_v_a
S_l_a_v_a S_l_a_v_a вне форума Местный житель
Регистрация: 17.10.2008 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 0
...
значение конечно Mom=Hi-Low и т.п. .... короче значения моментума(изменения)!
23.10.2008, 04:58
Регистрация: 18.08.2008 / Сообщений: 8,856
Поблагодарили 2,792 раз(а) / Репутация: 2826
вот как реализовано сглаживание по методу Т3 (трижды сглаженая МА)

for(i=0; i<limit; i++)
EMA1_buffer[i]=iMA(NULL,0,Periodo,0,MODE_EMA,PRICE_CLOSE,i);
for(i=0; i<limit; i++)
EMA2_buffer[i]=iMAOnArray(EMA1_buffer,Bars,Periodo,0,MODE_EMA,i) ;
for(i=0; i<limit; i++)
EMA3_buffer[i]=iMAOnArray(EMA2_buffer,Bars,Periodo,0,MODE_EMA,i) ;


for(i=0; i<limit-1; i++)
TRIX_Buffer[i] = (EMA3_buffer[i] - EMA3_buffer[i+1]) / EMA3_buffer[i+1] *100;
23.10.2008, 22:09
Аватар для S_l_a_v_a
S_l_a_v_a S_l_a_v_a вне форума Местный житель
Регистрация: 17.10.2008 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 0
по поводу
for(i=0; i<limit; i++)
EMA1_buffer[i]=iMA(NULL,0,Periodo,0,MODE_EMA,PRICE_CLOSE,i);
и т.п. у меня почемуто при объявлении массива например: double EMA1_buffer[];
Значения не вычисляются. А если я задам массив: double EMA1_buffer[1000]; - значения вычисляются.....
я говорю не про рисование линии а именно про вычесление!
вот и проблема - для большого периода (много баров) приходиться объявлять большой размер массива.
23.10.2008, 22:14
Аватар для S_l_a_v_a
S_l_a_v_a S_l_a_v_a вне форума Местный житель
Регистрация: 17.10.2008 / Сообщений: 5
Поблагодарили 0 раз(а) / Репутация: 0
double
Mom[],
Mom_Flate[];
int counted_bars=IndicatorCounted();
int r=Bars-counted_bars-1;
while(r>=0)
{
Mom[r]=Close[r]-Open[r];
Mom_Flate[r]=iMAOnArray(Mom,Bars,Period_Flate_Mom,0,MODE_EMA,r );
r--;
}
Где ошибка? почему он не возращат значения Mom_Flate[1]. а если задать размер массивов то значение есть...
24.10.2008, 02:37
Регистрация: 18.08.2008 / Сообщений: 8,856
Поблагодарили 2,792 раз(а) / Репутация: 2826
Ошибка в том, что объявлять массив надо в начале индикатора:

#property copyright "Douglas Lozada"
#property link "http://www.metaquotes.net"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- input parameters
extern int Periodo = 4;
extern int Signal = 6 ;
//extern int Desplazar = 1;
//---- buffers
double TRIX_Buffer[];
double Signal_Buffer[];
double EMA1_buffer[];
double EMA2_buffer[];
double EMA3_buffer[];


а все вычисления вести надо в секции Start()

int start()
{
int i,limit;
int counted_bars=IndicatorCounted();

//---- check for possible errors
if(counted_bars<0) return(-1);

if(Bars<=Periodo) return(0);
//---- initial zero
if(counted_bars<1)
{
for(i=1;i<=Periodo;i++) TRIX_Buffer[Bars-i]=0.0;
for(i=1;i<=Periodo;i++) Signal_Buffer[Bars-i]=0.0;
for(i=1;i<=Periodo;i++) EMA1_buffer[Bars-i]=0.0;
for(i=1;i<=Periodo;i++) EMA2_buffer[Bars-i]=0.0;
for(i=1;i<=Periodo;i++) EMA3_buffer[Bars-i]=0.0;
}

//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;

//---- Calculo el EMA1
for(i=0; i<limit; i++)
EMA1_buffer[i]=iMA(NULL,0,Periodo,0,MODE_EMA,PRICE_CLOSE,i);
for(i=0; i<limit; i++)
EMA2_buffer[i]=iMAOnArray(EMA1_buffer,Bars,Periodo,0,MODE_EMA,i) ;
for(i=0; i<limit; i++)
EMA3_buffer[i]=iMAOnArray(EMA2_buffer,Bars,Periodo,0,MODE_EMA,i) ;
Ответить


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Програмисты и знающие) правильно ли я снял лицуху?? Bujhm Bujhm Язык программирования MQL4 5 28.07.2009 12:41


Текущее время: 09:17. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO