Помощь по кодированию... Как заставить индикатор фильтровать вместо алерта? - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Могу ли я сделать это? Просто записать буфериндексы в индикатор и использовать верхние и нижние слова как это, и чтобы он возвращал значения верхних и нижних строк?
Не в индикаторе. В советнике. (Можно сделать это с индикатором, но не использовать тот же индикатор внутри его собственного кода!!!!!)
Не в индикаторе. В советнике. (Вы можете сделать это с индикатором, но не использовать тот же индикатор внутри собственного кода!!!!!)
то есть я могу написать индекс буфера в советнике, но как он получит значение из индикатора? Я не имел в виду использование индикатора внутри его собственного кода, это было бы глупо. Простите за мой сбой в общении. Нелегко иногда донести достаточно конкретно, в чем проблема. Это проблема как с кодированием, так и с обсуждением кодирования с другими.
Позвольте мне извиниться перед теми, кто, возможно, пытается помочь мне, но находит мои сообщения информационным перегрузом. Я разместил много кода в основном потому, что я могу открыть два окна рядом друг с другом, одно окно - эта тема, а другое - метаредактор, и посмотреть на одну часть кода в одном окне, а другую - в другом, и я делаю это, чтобы помочь мне думать над проблемой, которую я рассматриваю. Я очень нагляден, и это помогает мне думать о том, что я делаю и хочу сделать. Я не хочу никого перегружать большим количеством кода и заставлять просматривать его весь. Иногда я пытался выделить фрагменты после публикации всего советника или всего индикатора, пытаясь понять, ГДЕ и ЧТО нужно сделать. Я ценю всех, кто находит время посмотреть на то, что я делаю, и предложить конструктивный вклад. Если объем моего сообщения слишком велик, просто отфильтруйте его вниз, чтобы найти то, что я пытаюсь сделать, и не зацикливайтесь на остальном, которое здесь только как контекст к тому, что я делаю. Я в основном думаю вслух.
Итак, я могу записать индекс буфера в советнике, но как он получает значение из индикатора? Я не имел в виду использование индикатора внутри его собственного кода, это было бы глупо. Простите за мой сбой в общении. Нелегко иногда донести достаточно конкретно, в чем проблема. Это проблема как с кодированием, так и с обсуждением кодирования с другими.
Не беспокойтесь о том, КАК. Пусть Метатрейдер сделает это за вас. Вы просто используйте код для получения нужной вам информации.
Подсказка: Когда вы запустите советника, вы увидите: "Trend Bands loaded succesfully", это означает, что он делает то, что вы хотите.
Не беспокойтесь о том, КАК. Пусть Metatrader сделает это за вас. Вы просто используйте код для получения нужной вам информации. Подсказка: Когда вы запустите советник, вы увидите: "Trend Bands loaded succesfully", это означает, что он делает то, что вы хотите.
Мне нравится идея использовать код для получения нужной мне информации, именно это я и пытаюсь узнать. КАК использовать код для получения нужной мне информации.
То есть вы считаете, что лучший способ получить тиковое значение для трендовых полос - это использовать iCustome()? И НЕ писать код внутри советника, как я уже сделал?
В учебных целях... поскольку у меня есть код, уже написанный в советнике, есть ли способ получить значения из него?
Написание индикатора - это одно, а написание советника - совсем другое. Не смешивайте их. В индикаторах нужно работать и с историей, чтобы правильно ее рисовать. При написании советника у вас есть только текущий тик, и вы должны вычислять значения каждый тик (если вы не хотите потерять сделку). Итак, чтобы получить значения верхней и нижней границы КРУГЛОГО тика, вы можете сделать две вещи
Первый вариант несложный. Сначала нужно выяснить, какой индекс буфера используется для верхней и нижней линии.
Чтобы найти его, нужно заглянуть в код индикатора.
Подождите минутку, у него действительно есть буферы! Как я мог их пропустить?
//| Trend Bands.mq4 |
//| Dwt5 and adoleh2000 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Red
#property indicator_color2 Black
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_color5 Blue
double upper[], middle1[], middle2, lower[];
double Xup[], Xdown[];
extern int period = 34;
int init()
{
SetIndexStyle(0,DRAW_LINE,EMPTY,2);
SetIndexShift(0,0);
SetIndexDrawBegin(0,0);
SetIndexBuffer(0,upper);
SetIndexStyle(1,DRAW_LINE,EMPTY,2);
SetIndexShift(1,0);
SetIndexDrawBegin(1,0);
SetIndexBuffer(1,middle1);
SetIndexStyle(2,DRAW_LINE,EMPTY,2);
SetIndexShift(2,0);
SetIndexDrawBegin(2,0);
SetIndexBuffer(2,lower);
SetIndexStyle(3,DRAW_ARROW,EMPTY,2);
SetIndexArrow(3, 162);
SetIndexShift(3,0);
SetIndexDrawBegin(3,0);
SetIndexBuffer(3,Xdown);
SetIndexStyle(4,DRAW_ARROW,EMPTY,2);
SetIndexArrow(4, 162);
SetIndexShift(4,0);
SetIndexDrawBegin(4,0);
SetIndexBuffer(4,Xup);
//---- indicators
//----
return(0);
}Итак, я вижу 5 буферов... верхний, средний, нижний, верхний и нижний...
Я полагаю, что информация, которая мне нужна, находится в верхнем и нижнем буферах...
Я имел в виду, что это было новое сообщение, а не редактирование предыдущего, работа сайта иногда все еще путает меня...
Я думаю, что лучший способ сделать это - НЕ использовать индикатор. Это просто самый простой способ. Для начала он достаточно хорош.
Вы смотрите на изменения, которые я внес в индикатор. Если вы хотите использовать его, убедитесь, что вы пишете правильное имя в своем коде.
Если вы знаете, в каком буфере находится нужная вам информация, неважно, сколько индикаторов в коде.
Написание индикатора - это одно, а написание советника - совсем другое. Не смешивайте их. В индикаторах вы должны иметь дело с историей, чтобы правильно ее рисовать. При написании советника у вас есть только текущий тик, и вы должны вычислять значения каждый тик (если вы не хотите потерять сделку). Итак, чтобы получить значения верхней и нижней границы КРУГЛОГО тика, вы можете сделать две вещи
Первый вариант несложный. Сначала нужно выяснить, какой индекс буфера используется для верхней и нижней линии.
Чтобы найти его, нужно заглянуть в код индикатора
SetIndexBuffer(0,upper);
SetIndexBuffer(1,middle1);
SetIndexBuffer(2,lower);
Как видите, верхняя линия имеет индекс 0, средняя - индекс 1, а нижняя - индекс 2.
Теперь, когда у нас есть эта информация, мы должны знать, сколько параметров имеет индикатор. Чтобы получить эту информацию, нужно найти линии, которые начинаются со слова external.
Я нашел только одну строку
extern int period = 34;
Теперь мы можем использовать индикатор как пользовательский
double UpLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0);
double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0);
34 - параметр индикатора
0 - индекс буфера (2 для нижнего)
последний 0 - это сдвиг бара (в советнике нам нужен текущий, поэтому мы используем 0)
Теперь, когда у вас есть верхнее и нижнее значения, вы можете проверить их на соответствие цене.
Надеюсь, это поможет вам продвинуться
ИлайИтак, это будет работать для получения текущего значения верхней и нижней линий в советнике...
double UpLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0);
double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0);
Кажется, я начинаю понимать это благодаря репетиторству...
Так что мне не нужно писать код индикатора внутри советника, просто вызовите его вот так из EA.... и он вернет текущие значения баров линий, которые я могу затем использовать... это прекрасно! ....see Я знал, что кто-то знал, как это сделать! (просто это был не я) ...
Итак, если я хочу иметь возможность изменять количество периодов, которые я использую для индикатора, я должен сделать следующее...
extern double back = 300 //--которое я могу изменить по своему усмотрению
double UpLevel = iCustome(NULL,0, "Trend Bands", back, 0, 0);
double LowLevel = iCustome(NULL,0, "Trend Bands", back, 2, 0);
Предположим, что я хочу вызвать значение индикатора на более длительном временном периоде, чем тот, который я использую на графике... как мне это сделать?
extern double back = 300 //--который я могу изменить по своему усмотрению
extern double TF = 30 //--который я могу изменить по своему усмотрению
double UpLevel = iCustome(NULL,TF, "Trend Bands", back, 0, 0);
double LowLevel = iCustome(NULL,TF, "Trend Bands", back, 2, 0);
где NULL использует текущий символ,
TF использует указанный мною период баров графика
Trend Bands вызывает индикатор
back - заданное пользователем количество баров, используемых для усреднения индикатора
0 или 2 указывает ему, к какому буферу обращаться
и последний 0 говорит ему использовать текущий бар.
будет ли это работать?
Это сработает?
Отлично!!! Вы поняли идею!!!!
Это будет работать идеально. И если вы хотите проверить, что 5M и 15M достигают края в одно и то же время, вы можете получить значения от каждого TF и проверить их вместе.
Но оставим это на потом....