PDA

View Full Version : Как получить пользовательские значения индикаторов?



Bugatiniki26
22:08,
Я пытаюсь использовать индикатор ESI Crossover Signal в EA, и мне трудно получить от него значения. Я использую iCustom (), и независимо от того, какой режим я выбираю (0 или 1), индикатор возвращает только 2147483647. Любые мысли о том, что я делаю неправильно?

Вот пример того, что я пытаюсь сделать:

двойной EMA = iCustom (NULL, 0, ESI Crossover Signal, 5,13, ​​false, 0,0);

Печать (EMA);

Вот код indy:

// ----------------------------------------------- -------------------
//| EMA-Crossover_Signal.mq4 |
//| Copyright © 2005, Джейсон Робинсон (jnrtrading) |
//|
http://www.jnrtading.co.uk|
// ----------------------------------------------- -------------------

/*
------------------------------------------------- -----------------
| Позволяет ввести два периода ema, и он отобразит вас на |
| Какой момент они пересекли. Это более полезно для более коротких |
| периоды, которые затушевываются барамиподсвечниками и когда |
| уровень масштабирования отсутствует. Также позволяет вам удалить emas |
| из графика. (emas изначально установлены на 5 и 6) |
------------------------------------------------- -----------------
*
#property copyright Copyright © 2005, Джейсон Робинсон (jnrtrading)
#property link http://www.jnrtrading.co.uk

#property indior_chart_window
#property indior_buffers 2
#property indior_color1 SeaGreen
#property indior_color2 Красный

double CrossUp [];
double CrossDown [];
extern int FasterEMA = 5;
extern int SlowerEMA = 13;
extern bool SoundON = false;
double alertTag;
двойной контроль = 2147483647;

// ----------------------------------------------- -------------------
//| Пользовательская функция инициализации индикатора |
// ----------------------------------------------- -------------------
int init ()
{
//---- индикаторы
SetIndexStyle (0, DRAW_ARROW, EMPTY, 3);
SetIndexArrow (0, 233);
SetIndexBuffer (0, CrossUp);
SetIndexStyle (1, DRAW_ARROW, EMPTY, 3);
SetIndexArrow (1, 234);
SetIndexBuffer (1, CrossDown);
//----
Возвращение (0);
}
// ----------------------------------------------- -------------------
//| Пользовательская функция деинициализации индикатора |
// ----------------------------------------------- -------------------
int deinit ()
{
//----

//----
Возвращение (0);
}
// ----------------------------------------------- -------------------
//| Пользовательская функция итерации индикатора |
// ----------------------------------------------- -------------------
int start () {
int limit, i, counter;
double speedEMAnow, slowerEMAnow, быстрееEMAprevious, slowerEMArerevious, fastEMAafter, slowerEMAafter;
double Range, AvgRange;
int counted_bars = IndiorCounted ();
//---- проверить возможные ошибки
if (counted_barslt; 0) return (-1);
//---- последний подсчитанный балл будет пересчитан
if (counted_barsgt; 0) counted_bars--;

предел = Bars-counted_bars;

для (i = 0; i lt; = limit; i ) {

Счетчик = я;
Диапазон = 0;
AvgRange = 0;
for (counter = i; counterlt; = i 9; counter )
{
AvgRange = AvgRange MathAbs (высокий [счетчик] -Low [счетчик]);
}
Диапазон = AvgRange10;

fastEMAnow = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i);
fastEMAprevious = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i 1);
fastEMAafter = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);

slowerEMAnow = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i);
slowerEMAprevious = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i 1);
slowerEMAafter = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i-1);

if ((быстрееEMAnow gt, slowerEMAnow) (быстрееEMAprevious lt; slowerEMAprevious) (быстрееEMAafter gt; slowerEMAafter)) {
CrossUp [i] = Low [i] - Диапазон * 0,5;
}
else if ((более быстрыйEMAnow lt; slowerEMAnow) (более быстрыйEMAprevious gt; slowerEMAprevious) (быстрее EMAafter lt; slowerEMAafter)) {
CrossDown [i] = High [i] Range * 0.5;
}
if (SoundON == true i == 1 CrossUp [i]] CrossDown [i] alertTag! = Time [0]) {
Предупреждение (EMA Cross Trend going Down, Symbol (),, Period ());
alertTag = Время [0];
}
if (SoundON == true i == 1 CrossUp [i] lt; CrossDown [i] alertTag! = Time [0]) {
Предупреждение (EMA Cross Trend going Up, Symbol (),, Period ());
alertTag = Время [0];
}

}
Возвращение (0);
}

DKablovazwwzdkokte
18:30,
Вложений: 1 (ответьте на) Есть ли последняя версия этого индикатора? Не удается найти г-на Джейсона Робинсона, британского автора, а не спортсмена, чтобы спросить, почему срабатывает всплывающее оповещение, но оповещения по электронной почте нет? Кажется, поток прекратился более года назад, и, возможно, все разрешено? Запуск на M30, EURUSD. Спасибо всем, кто может помочь,
https://www.russia-forex.ru/attachments/15189764671436006578.mq4

LydkkO
19:51,
проверьте имя файла icustom. Убедитесь, что у вас все тире и подчеркивания на месте. Также убедитесь, что заглавные буквы находятся в нужном месте. Это должно быть точно так же, как файл пишется.

Bugatiniki26
21:11,
проверьте имя файла icustom. Убедитесь, что у вас все тире и подчеркивания на месте. Также убедитесь, что заглавные буквы находятся в нужном месте. Это должно быть точно так же, как файл пишется.
Не повезло ... имя файла - EMA Crossover Signal, и именно так я ввел его.

LydkkO
22:32,
Переименуйте файл индикатора на что-то простое, например, EMACS или что-то в этом роде. У меня были некоторые проблемы с именами файлов и пробелами.

Bugatiniki26
23:53,
Переименуйте файл индикатора на что-то простое, например, EMACS или что-то в этом роде. У меня были некоторые проблемы с именами файлов и пробелами.
Нет, это тоже не сработало. Я рассматриваю возможность просто включить код indy непосредственно в EA или просто написать собственный крест-код MA ... но я надеялся не изобретать колесо и использовать сигналы EMA, чтобы видеть стрелы, когда он видит крест.

saniktaygoartta
01:14,
Вы посмотрели, какие значения возвращает индикатор в окне данных? Обычно у него не было бы никаких значений.

Kanikoko21
02:35,
Ваш iCustom должен выглядеть примерно так. iCustom (NULL, 0, ESI Crossover Signal, FasterEMA, SlowerEMA, 0, 0); Я бы отредактировал индикатор, чтобы установить каждую не-стрелку в 0, например. Мне легче устанавливать торговую логику.

// ----------------------------------------------- ------------------- /| EMA-Crossover_Signal.mq4 |/| Copyright © 2005, Джейсон Робинсон (jnrtrading) |/|
http://www.jnrtading.co.uk|/ ----------------------------------------------- ------------------- * --------------------------- --------------------------------------- | Позволяет ввести два периода ema, и он отобразит вас на | | Какой момент они пересекли. Это более полезно для более коротких | | периоды, которые затушевываются барамиподсвечниками и когда | | уровень масштабирования отсутствует. Также позволяет вам удалить emas | | из графика. (emas изначально установлены на 5 и 6) | ------------------------------------------------- ----------------- *#property copyright Copyright © 2005, Джейсон Робинсон (jnrtrading) ссылка #property http://www.jnrtrading.co.uk #property indior_chart_window # свойство indior_buffers 2 #property indior_color1 SeaGreen #property indior_color2 Красный двойной CrossUp []; double CrossDown []; extern int FasterEMA = 5; extern int SlowerEMA = 13; extern bool SoundON = false; double alertTag; двойной контроль = 2147483647;/ ----------------------------------------------- ------------------- /| Пользовательская функция инициализации индикатора |/ ----------------------------------------------- ------------------- int init () {//---- индикаторы SetIndexStyle (0, DRAW_ARROW, EMPTY, 3); SetIndexArrow (0, 233); SetIndexBuffer (0, CrossUp); SetIndexStyle (1, DRAW_ARROW, EMPTY, 3); SetIndexArrow (1, 234); SetIndexBuffer (1, CrossDown);/---- return (0); }/ ---------------------------------------------- -------------------- /| Пользовательская функция деинициализации индикатора |/ ----------------------------------------------- ------------------- int deinit () {//----/---- return (0); }/ ---------------------------------------------- -------------------- /| Пользовательская функция итерации индикатора |/ ----------------------------------------------- ------------------- int start () {int limit, i, counter; double speedEMAnow, slowerEMAnow, быстрееEMAprevious, slowerEMArerevious, fastEMAafter, slowerEMAafter; double Range, AvgRange; int counted_bars = IndiorCounted ();/---- проверить возможные ошибки if (counted_barslt; 0) return (-1);/---- последний подсчитанный балл будет пересчитан if (counted_barsgt; 0) counted_bars--; предел = Bars-counted_bars; для (i = 0; i lt; = limit; i ) {counter = i; Диапазон = 0; AvgRange = 0; for (counter = i; counterlt; = i 9; counter ) {AvgRange = AvgRange MathAbs (High [counter] -Low [counter]); } Диапазон = AvgRange10; fastEMAnow = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i); fastEMAprevious = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i 1); fastEMAafter = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1); slowerEMAnow = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i); slowerEMAprevious = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i 1); slowerEMAafter = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i-1); if ((быстрееEMAnow gt, slowerEMAnow) (быстрееEMAprevious lt; slowerEMAprevious) (быстрееEMAafter gt; slowerEMAafter)) {CrossUp [i] = Low [i] - Range * 0.5; } else {CrossUp [i] = 0; } else if ((быстрееEMAnow lt; slowerEMAnow)(fastEMAprevious gt; slowerEMAprevious) (быстрее EMA после lt; slowerEMAafter)) {CrossDown [i] = High [i] Range * 0.5; } else {CrossDown [i] = 0; } if (SoundON == true i == 1 CrossUp [i] gt; CrossDown [i] alertTag! = Time [0]) {Alert (EMA Cross Trend going Down, Symbol (),, Period ()); alertTag = Время [0]; } if (SoundON == true i == 1 CrossUp [i] lt; CrossDown [i] alertTag! = Time [0]) {Alert (EMA Cross Trend going Up, Symbol (),, Period ()); alertTag = Время [0]; }} return (0); }

// ----------------------------------------------- ------------------- /| EMA-Crossover_Signal.mq4 |/| Copyright © 2005, Джейсон Робинсон (jnrtrading) |/|
http://www.jnrtading.co.uk|/ ----------------------------------------------- ------------------- * --------------------------- --------------------------------------- | Позволяет ввести два периода ema, и он отобразит вас на | | Какой момент они пересекли. Это более полезно для более коротких | | периоды, которые затушевываются барамиподсвечниками и когда | | уровень масштабирования отсутствует. Также позволяет вам удалить emas | | из графика. (emas изначально установлены на 5 и 6) | ------------------------------------------------- ----------------- *#property copyright Copyright © 2005, Джейсон Робинсон (jnrtrading) ссылка #property http://www.jnrtrading.co.uk #property indior_chart_window # свойство indior_buffers 2 #property indior_color1 SeaGreen #property indior_color2 Красный двойной CrossUp []; double CrossDown []; extern int FasterEMA = 5; extern int SlowerEMA = 13; extern bool SoundON = false; double alertTag; двойной контроль = 2147483647;/ ----------------------------------------------- ------------------- /| Пользовательская функция инициализации индикатора |/ ----------------------------------------------- ------------------- int init () {//---- индикаторы SetIndexStyle (0, DRAW_ARROW, EMPTY, 3); SetIndexArrow (0, 233); SetIndexBuffer (0, CrossUp); SetIndexStyle (1, DRAW_ARROW, EMPTY, 3); SetIndexArrow (1, 234); SetIndexBuffer (1, CrossDown);/---- return (0); }/ ---------------------------------------------- -------------------- /| Пользовательская функция деинициализации индикатора |/ ----------------------------------------------- ------------------- int deinit () {//----/---- return (0); }/ ---------------------------------------------- -------------------- /| Пользовательская функция итерации индикатора |/ ----------------------------------------------- ------------------- int start () {int limit, i, counter; double speedEMAnow, slowerEMAnow, быстрееEMAprevious, slowerEMArerevious, fastEMAafter, slowerEMAafter; double Range, AvgRange; int counted_bars = IndiorCounted ();/---- проверить возможные ошибки if (counted_barslt; 0) return (-1);/---- последний подсчитанный балл будет пересчитан if (counted_barsgt; 0) counted_bars--; предел = Bars-counted_bars; для (i = 0; i lt; = limit; i ) {counter = i; Диапазон = 0; AvgRange = 0; for (counter = i; counterlt; = i 9; counter ) {AvgRange = AvgRange MathAbs (High [counter] -Low [counter]); } Диапазон = AvgRange10; fastEMAnow = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i); fastEMAprevious = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i 1); fastEMAafter = iMA (NULL, 0, FasterEMA, 0, MODE_EMA, PRICE_CLOSE, i-1); slowerEMAnow = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i); slowerEMAprevious = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i 1); slowerEMAafter = iMA (NULL, 0, SlowerEMA, 0, MODE_EMA, PRICE_CLOSE, i-1); if ((быстрееEMAnow gt, slowerEMAnow) (быстрееEMAprevious lt; slowerEMAprevious) (быстрееEMAafter gt; slowerEMAafter)) {CrossUp [i] = Low [i] - Range * 0.5; } else {CrossUp [i] = 0; } else if ((быстрееEMAnow lt; slowerEMAnow)(fastEMAprevious gt; slowerEMAprevious) (быстрее EMA после lt; slowerEMAafter)) {CrossDown [i] = High [i] Range * 0.5; } else {CrossDown [i] = 0; } if (SoundON == true i == 1 CrossUp [i] gt; CrossDown [i] alertTag! = Time [0]) {Alert (EMA Cross Trend going Down, Symbol (),, Period ()); alertTag = Время [0]; } if (SoundON == true i == 1 CrossUp [i] lt; CrossDown [i] alertTag! = Time [0]) {Alert (EMA Cross Trend going Up, Symbol (),, Period ()); alertTag = Время [0]; }} return (0); }

caarlaaheer
03:55,
Если вы создаете свой советник для торговли на основе этого показателя исключительно, обратите внимание, что этот индикатор перерисовывает большое время. Стрелка появится и исчезнет и снова появится снова. Внимательно прочитайте код индикатора и измените эти строки, чтобы сделать его непрозрачной стрелкой.

Kanikoko21
05:16,
Вы посмотрели, какие значения возвращает индикатор в окне данных? Обычно у него не было бы никаких значений.
Мне любопытно, если поле для значений в индикаторе пуст, что я ставлю в торговой логике? EMPTY_VALUE не работает.

caarlaaheer
06:37,
yes ... if (EMA == EMPTY_VALUE) {........ ........ эквивалент ноль или нуль или номер 2147483647

saniktaygoartta
07:58,
Мне любопытно, если поле для значений в индикаторе пуст, что я ставлю в торговой логике? EMPTY_VALUE не работает.
Я не знаю. Я не могу программировать, только редактирую. Я просто знаю, когда нет никакой ценности, это обычно создает проблему для меня. Я даже не знаю, является ли это проблемой здесь, но я подумал, что я привлечу внимание к более умному участнику в качестве возможной проблемы.

caarlaaheer
09:18,
Возможно, это поможет ... Добавьте эти 2 строки в красный/---- индикаторы SetIndexStyle (0, DRAW_ARROW, EMPTY, 3); SetIndexArrow (0, 233); SetIndexBuffer (0, CrossUp); SetIndexEmptyValue (0,0.0); SetIndexStyle (1, DRAW_ARROW, EMPTY, 3); SetIndexArrow (1, 234); SetIndexBuffer (1, CrossDown); SetIndexEmptyValue (1,0.0); Затем в вашем EA .. double EMA_green = iCustom (..... 0,0); двойной EMA_red = iCustom (..... 1,0); if (EMA_green! = 0) {OrderSend (....... вы покупаете, если (EMA_red! = 0) {OrderSend (....... твои продажи, надеюсь, это поможет ..