Ответить
15.04.2012, 16:20
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Христос Воскрес! Подскажите плиз кто
по кодам в теме! Мммм... на примере
стохастика, нужно чтоб он расчет вел
не за количество баров а с заданой
временной точки(условно с 00:00
часов вчерашнего дня)
Во истину воскрес.
Ищешь бар с заданным временем с помошью iBarShift. Результатом будет количество баров. После, как обычно считаешь индикатор за это количество баров.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
16.04.2012, 16:41
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Добрый день. Подскажите что дальше писать. Задача такая, что индикатор должен рисовать стрелку при пересичении 2-ух МА. Я не могу понять логики по какой это делается. Если можно то попроще и поподробней объясните.

PHP код:
 
#property copyright "eevviill"
#property link      "itisallillusion@gmail.com"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 OrangeRed
 
double ExtMapBuffer1[];
double ExtMapBuffer2[];
extern int MA_fast_period 40;
extern int MA_slow_period 60;
 
int init()
  {
 
   
SetIndexBuffer(0,ExtMapBuffer1);
   
SetIndexStyle(0,DRAW_ARROW);
   
SetIndexArrow(0,SYMBOL_ARROWUP); 
 
   
SetIndexBuffer(1,ExtMapBuffer2);
   
SetIndexStyle(1,DRAW_ARROW);
   
SetIndexArrow(1,SYMBOL_ARROWDOWN); 
 
   return;
  }
 
 
int start()
  {
   
int counted_bars=IndicatorCounted();
   
int pos Bars-counted_bars;
double MA1 iMA(Symbol(),0,MA_fast_period,0,MODE_LWMA,PRICE_CLOSE,1);
double MA11 iMA(Symbol(),0,MA_fast_period,0,MODE_LWMA,PRICE_CLOSE,2);
double MA2 iMA(Symbol(),0,MA_slow_period,0,MODE_LWMA,PRICE_CLOSE,1);
double MA22 iMA(Symbol(),0,MA_slow_period,0,MODE_LWMA,PRICE_CLOSE,2);
if(
MA11<MA22 && MA1>MA2ExtMapBuffer1[1] = ; //up
if(MA11>MA22 && MA1<MA2ExtMapBuffer2[1] = ; //down
 
 
   
return;
  } 
16.04.2012, 17:51
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
А чё индикаторы с буферами ещё не писал? Попробуй разобрать всё что я изменил в функции start.
Код:
int start()
  {
double MA1, MA11, MA2, MA22;
int counted_bars=IndicatorCounted();
   int pos = Bars-counted_bars;
for(int i=1; i<pos; i++)
{
MA1 = iMA(Symbol(),0,MA_fast_period,0,MODE_LWMA,PRICE_CLOSE,i);
MA11 = iMA(Symbol(),0,MA_fast_period,0,MODE_LWMA,PRICE_CLOSE,i+1);
MA2 = iMA(Symbol(),0,MA_slow_period,0,MODE_LWMA,PRICE_CLOSE,i);
MA22 = iMA(Symbol(),0,MA_slow_period,0,MODE_LWMA,PRICE_CLOSE,i+1);
if(MA11<MA22 && MA1>MA2) ExtMapBuffer1[i] = Low[i]; 
if(MA11>MA22 && MA1<MA2) ExtMapBuffer2[i] = High[i]; 
}
return;
  }  
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 16.04.2012 в 17:54.
16.04.2012, 18:08
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
А чё индикаторы с буферами ещё не писал? Попробуй разобрать всё что я изменил в функции start.
Код:
int start()
{
double MA1, MA11, MA2, MA22;
int counted_bars=IndicatorCounted();
int pos = Bars-counted_bars; //Это проверка последнего бара
for(int i=1; i<pos; i++) //Цикл   1)начинаем с 1 2)цикл заканчивается когда мы подсчитали все бары 3)добавляем при следуещем кругу 1-у к і
{
MA1 = iMA(Symbol(),0,MA_fast_period,0,MODE_LWMA,PRICE_CLOSE,i //Это тот бар который проверяем);
MA11 = iMA(Symbol(),0,MA_fast_period,0,MODE_LWMA,PRICE_CLOSE,i+1);
MA2 = iMA(Symbol(),0,MA_slow_period,0,MODE_LWMA,PRICE_CLOSE,i);
MA22 = iMA(Symbol(),0,MA_slow_period,0,MODE_LWMA,PRICE_CLOSE,i+1);
if(MA11<MA22 && MA1>MA2) ExtMapBuffer1[i]//Это тот бар где выполнилось условие = Low[i]//Это ??? Вот этого понять не могу. Почему здесь Low High а не расчёты какие то; 
if(MA11>MA22 && MA1<MA2) ExtMapBuffer2[i] = High[i]; 
}
return;
}  
Не писал. И с for туговато.

ExtMapBuffer2[i]=High. Так в []надо писать какой бар, а после = где рисовать?

Последний раз редактировалось eevviill; 16.04.2012 в 18:11.
16.04.2012, 19:00
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
if(MA11<MA22 && MA1>MA2) ExtMapBuffer1[i] = Low[i];
В ячейку буфера [i] пишется значение Low этого же бара. Low[i]
В итоге на баре где произошло пересечение быстрой МА вверх будет поставлена стрелка на Low этого бара.

ps for надо осваивать. Без неё в индикаторы соваться не стоит. Да и в советниках её предпочтительней использовать чем while.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 16.04.2012 в 19:06.
16.04.2012, 19:31
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
if(MA11<MA22 && MA1>MA2) ExtMapBuffer1[i] = Low[i];
В ячейку буфера [i] пишется значение Low этого же бара. Low[i]
В итоге на баре где произошло пересечение быстрой МА вверх будет поставлена стрелка на Low этого бара.

ps for надо осваивать. Без неё в индикаторы соваться не стоит. Да и в советниках её предпочтительней использовать чем while.
Большое спасибо.
Но вот если такая ситуация. Если допустим мне не надо чтобы по всей истории котировок на графике рисовались стрелки. А надо только чтобы свежие стрелки рисовались. Это будет так
if(MA11<MA22 && MA1>MA2) ExtMapBuffer1[1] = Low[1] или нет?
16.04.2012, 20:13
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Большое спасибо.
Но вот если такая ситуация. Если допустим мне не надо чтобы по всей истории котировок на графике рисовались стрелки. А надо только чтобы свежие стрелки рисовались. Это будет так
if(MA11<MA22 && MA1>MA2) ExtMapBuffer1[1] = Low[1] или нет?
Тогда цикл не нужен. И массивы то же смысла не имеют. Стрелку лучше ставить как объект.
Странный индикатор. Для чего такой может понадобиться, не понимаю.
Код:
#property copyright "eevviill"
#property link      "itisallillusion@gmail.com"
#property indicator_chart_window

 

extern int MA_fast_period = 40;
extern int MA_slow_period = 60;
 
int init()
  {
 
   return;
  }
 
 
int start()
  {
//Здесь удалить объкт стрелку если есть 

double MA1 = iMA(Symbol(),0,MA_fast_period,0,MODE_LWMA,PRICE_CLOSE,1);
double MA11 = iMA(Symbol(),0,MA_fast_period,0,MODE_LWMA,PRICE_CLOSE,2);
double MA2 = iMA(Symbol(),0,MA_slow_period,0,MODE_LWMA,PRICE_CLOSE,1);
double MA22 = iMA(Symbol(),0,MA_slow_period,0,MODE_LWMA,PRICE_CLOSE,2);
if(MA11<MA22 && MA1>MA2) 
{
//Здесь установка объекта стрелка покупки на Low[1] и Time[1]
}
if(MA11>MA22 && MA1<MA2)
{
//Здесь установка объекта стрелка на продажу на High[1] и Time[1]
}
 
 
   return;
  }
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!

Последний раз редактировалось Ugar; 16.04.2012 в 20:20.
16.04.2012, 20:22
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Тогда цикл не нужен. И массивы то же смысла не имеют. Стрелку лучше ставить как объект.
Странный индикатор. Для чего такой может понадобиться, не понимаю.
Я же например написал. И тем более он же ничем не будет отличатся от буферного индикатора, кроме того что его не видно на истории.

Тогда возникает ещё один вопрос. Если сделать индикаторные стрелки через объект, то его уже через iCustom() не прицепишь.
А как прицепить в таком случае? Через ObjectFind?
17.04.2012, 06:59
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Я же например написал. И тем более он же ничем не будет отличатся от буферного индикатора, кроме того что его не видно на истории.
Если использовать буфера даже без цикла, то на истории он не будет рисовать только при запуске. В работе стрелки будут оставаться и уходить в историю.
Тогда возникает ещё один вопрос. Если сделать индикаторные стрелки через объект, то его уже через iCustom() не прицепишь.
А как прицепить в таком случае? Через ObjectFind?
Через поиск объекта конечно можно, но тестироваться будет только в визуальном режиме, так как в остальных режимах объекты не работают вообще. Оптимизация в тестере будет невозможна.

Зачем такой индикатор нужен, не понятно. Так же не понятно, зачем его цеплять к советнику. Не проще ли вызвать эти МА в коде советника, работать будет гораздо быстрее.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
17.04.2012, 07:20
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Если использовать буфера даже без цикла, то на истории он не будет рисовать только при запуске. В работе стрелки будут оставаться и уходить в историю.

Через поиск объекта конечно можно, но тестироваться будет только в визуальном режиме, так как в остальных режимах объекты не работают вообще. Оптимизация в тестере будет невозможна.

Зачем такой индикатор нужен, не понятно. Так же не понятно, зачем его цеплять к советнику. Не проще ли вызвать эти МА в коде советника, работать будет гораздо быстрее.
Вы меня не правильно поняли. У меня нет конкретной задачи. Я хочу понять структуру написания и её ньюансы.

Спасибо. Всё понял. Только ещё один вопрос.
Я написал в индикаторе
Alert(MapBuffer1[1]).
Если есть пересечение вверх на предыдущем баре, то выдаётся сообщение Цена где нарисовалась стрелка. А если нет пересечения, то там пишется каких то вроди бы 8 чисел. Что за числа?(цифры)
17.04.2012, 07:36
Аватар для tommy27
tommy27 tommy27 вне форума ◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
Регистрация: 16.10.2011 / Адрес: Новосибирск / Сообщений: 1,053
Поблагодарили 3,187 раз(а) / Репутация: 3192
  • Отправить сообщение для tommy27 с помощью Skype™
Добрый день, нужна помощь. Есть определённый бар и цена его закрытия. Как реализовать следущий момент: сова должна открывать позицию после того как разница между текущей ценой и ценой закрытия пределённого бара станет больше заданной. У меня получается только вычислять разницу между ценой закрытия заданного и ценой закрытия текущего( а не с ценой в данный момент времени - чего и хочу добиться).
17.04.2012, 08:00
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Вы меня не правильно поняли. У меня нет конкретной задачи. Я хочу понять структуру написания и её ньюансы.

Спасибо. Всё понял. Только ещё один вопрос.
Я написал в индикаторе
Alert(MapBuffer1[1]).
Если есть пересечение вверх на предыдущем баре, то выдаётся сообщение Цена где нарисовалась стрелка. А если нет пересечения, то там пишется каких то вроди бы 8 чисел. Что за числа?(цифры)
EMPTY_VALUE 0x7FFFFFFF Значение по умолчанию, указатель пустого значения. Используется в пользовательских индикаторах.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
17.04.2012, 08:07
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
Добрый день, нужна помощь. Есть определённый бар и цена его закрытия. Как реализовать следущий момент: сова должна открывать позицию после того как разница между текущей ценой и ценой закрытия пределённого бара станет больше заданной. У меня получается только вычислять разницу между ценой закрытия заданного и ценой закрытия текущего( а не с ценой в данный момент времени - чего и хочу добиться).
А какая разница? Цена закрытия текущего бара и есть текущая цена Bid.
if(MathAbs(Close[1]-Close[0])>заданное)

То же самое
if(MathAbs(Close[1]-Bid)>заданное)
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
17.04.2012, 08:11
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
Добрый день, нужна помощь. Есть определённый бар и цена его закрытия. Как реализовать следущий момент: сова должна открывать позицию после того как разница между текущей ценой и ценой закрытия пределённого бара станет больше заданной. У меня получается только вычислять разницу между ценой закрытия заданного и ценой закрытия текущего( а не с ценой в данный момент времени - чего и хочу добиться).
Думаю так.
PHP код:
int level 12//количество пунктов
if(Close[8]-Close[0]>level*Pointто что то делаем 
Ха ха. Вот это написал. Close[0]. Да, точно. Bid надо.

Последний раз редактировалось eevviill; 17.04.2012 в 08:14.
17.04.2012, 08:23
Аватар для tommy27
tommy27 tommy27 вне форума ◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
Регистрация: 16.10.2011 / Адрес: Новосибирск / Сообщений: 1,053
Поблагодарили 3,187 раз(а) / Репутация: 3192
  • Отправить сообщение для tommy27 с помощью Skype™
А какая разница? Цена закрытия текущего бара и есть текущая цена Bid.
if(MathAbs(Close[1]-Close[0])>заданное)

То же самое
if(MathAbs(Close[1]-Bid)>заданное)
Вот не получается почему то на строчки кода:
Код:
R = MathAbs(Close[1]-Close[0]);
R1 = MathAbs(Close[1]-Bid);
Print ("Raznica= ",R,R1);
журнал отзывается стабильными и постоянными "00"
17.04.2012, 08:38
Аватар для tommy27
tommy27 tommy27 вне форума ◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
Регистрация: 16.10.2011 / Адрес: Новосибирск / Сообщений: 1,053
Поблагодарили 3,187 раз(а) / Репутация: 3192
  • Отправить сообщение для tommy27 с помощью Skype™
У меня считает так:
Код:
StartPrice1 = Close[0];
Delta1 = MathRound ((MathAbs (Price0 - StartPrice1))*10000);
Comment (Delta1);
Print ("Raznica= ",Delta1);
и результат обновляется только при появлении нового бара а хотелось бы видеть и фиксировать изменения на каждом тике.

alsu с мкл4 посоветовал использовать iClose(0,0,0), но результат тот же -обновляется только при появлении нового бара.

Последний раз редактировалось tommy27; 17.04.2012 в 08:55.
17.04.2012, 09:11
Аватар для eevviill
eevviill eevviill вне форума Заблокирован
За второе место в конкурсе 

Регистрация: 30.07.2009 / Сообщений: 5,474
Поблагодарили 9,029 раз(а) / Репутация: 9029
  • Отправить сообщение для eevviill с помощью Skype™
У меня считает так:
Код:
StartPrice1 = Close[0];
Delta1 = MathRound ((MathAbs (Price0 - StartPrice1))*10000);
Comment (Delta1);
Print ("Raznica= ",Delta1);
и результат обновляется только при появлении нового бара а хотелось бы видеть и фиксировать изменения на каждом тике.

alsu с мкл4 посоветовал использовать iClose(0,0,0), но результат тот же -обновляется только при появлении нового бара.
PHP код:
extern int level 4
 
int start()
  {
 
double Price1 Bid//текущая цена
double Price2 Close[8]; //цена закрытия выбраного бара
double level1 level*Point//уровень когда надо что то делать
double Delta1 MathAbs(Close[8]-Bid); //разница между той ценой и текущей
if(Delta1>level1)Comment (Delta1);
if(
Delta1>level1)Print ("Raznica= ",Delta1);
if(
Delta1>level1)Alert (Delta1);
 
   return(
0);
  } 
Надо было хотя бы мои уроки не прогуливать

P.S. Так лучше. Чувствую потом будут вопросы когда надо сел, а когда бай...

Последний раз редактировалось eevviill; 17.04.2012 в 09:31.
17.04.2012, 09:15
Регистрация: 13.03.2009 / Сообщений: 2,329
Поблагодарили 1,949 раз(а) / Репутация: 2026
У меня считает так:
Код:
StartPrice1 = Close[0];
Delta1 = MathRound ((MathAbs (Price0 - StartPrice1))*10000);
Comment (Delta1);
Print ("Raznica= ",Delta1);
и результат обновляется только при появлении нового бара а хотелось бы видеть и фиксировать изменения на каждом тике.

alsu с мкл4 посоветовал использовать iClose(0,0,0), но результат тот же -обновляется только при появлении нового бара.
Весь код покажи. Где объявлены переменные, где присвоено значение Price0???
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
17.04.2012, 09:35
Аватар для tommy27
tommy27 tommy27 вне форума ◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
Регистрация: 16.10.2011 / Адрес: Новосибирск / Сообщений: 1,053
Поблагодарили 3,187 раз(а) / Репутация: 3192
  • Отправить сообщение для tommy27 с помощью Skype™
Весь код покажи. Где объявлены переменные, где присвоено значение Price0???
Да причем тут весь код то ???
Вопрос то в том что
Цитата:
результат обновляется только при появлении нового бара а хотелось бы видеть и фиксировать изменения на каждом тике.
Пусть будут вот так объявлены переменные и присвоено значение Price0:
Код:
double 
       StartPrice1,
       Delta1,
       Price00;
...
Price00 = 5000;
StartPrice1 =  iClose(0,0,0);
//StartPrice1 = Close[0];
Delta1 = MathAbs (Price00 - StartPrice1);
//if (Delta1>1000) Delta1=0;
Comment (Delta1);
Print ("Raznica= ",Delta1);
И что?
17.04.2012, 09:52
Аватар для tommy27
tommy27 tommy27 вне форума ◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
Регистрация: 16.10.2011 / Адрес: Новосибирск / Сообщений: 1,053
Поблагодарили 3,187 раз(а) / Репутация: 3192
  • Отправить сообщение для tommy27 с помощью Skype™
Надо было хотя бы мои уроки не прогуливать

P.S. Так лучше. Чувствую потом будут вопросы когда надо сел, а когда бай...
Нет, не лучше так, так это тот же ... только вид сбоку ))) а вопрос как был так и остался: результат обновляется только при появлении нового бара а хотелось бы видеть и фиксировать изменения на каждом тике.
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

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

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



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


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