Функция ICustom - страница 4

 
TheRumpledOne:
Если это "хлам", то зачем его вообще размещать?

У меня была похожая мысль....

 

Один вопрос по поводу iCustom.

Не могли бы вы объяснить и привести несколько примеров относительно переменных Line и Shift с командами iCustom?

Спасибо

 
matrixebiz:
Один вопрос по поводу iCustom.

Можете ли вы объяснить и привести примеры использования переменных Line и Shift в командах iCustom?

Спасибо

iCustom - Документация по MQL4

mode - индекс линии. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer. shift - Индекс значения, взятого из буфера индикатора (сдвиг относительно текущего бара на заданное количество периодов назад).

Используйте MODE, чтобы указать индикатору, какой буфер вам нужен. Индикаторы поддержки-сопротивления могут использовать буфер 0 ( MODE=0 ) для сопротивления и буфер 1 ( MODE=1 ) для поддержки.

SHIFT говорит использовать значение из Bar(SHIFT) индикатора, вызванного iCustom.

Помогает ли это?

 
TheRumpledOne:
iCustom - Документация по MQL4

mode - Индекс линии. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer. shift - Индекс значения, взятого из буфера индикатора (сдвиг относительно текущего бара на заданное количество периодов назад).

Используйте MODE, чтобы указать индикатору, какой буфер вам нужен. Индикаторы поддержки-сопротивления могут использовать буфер 0 ( MODE=0 ) для сопротивления и буфер 1 ( MODE=1 ) для поддержки.

SHIFT говорит об использовании значения из Bar(SHIFT) индикатора, вызываемого iCustom.

Помогает ли это?

Хорошо, я понял Shift, придется еще почитать о режиме.

Вы кодируете? У меня есть индикатор, который я вызываю из моего эксперта, но не уверен, как правильно его настроить. Смотрите картинку.

У него просто две линии, и когда синяя меняется и выравнивается с другой линией, генерируется длинный сигнал (та же идея с красной).

Пробовал несколько разных кодов, как тот, который я использовал с индикатором VQ;

double Entry1 = iCustom(NULL, 0, "VQ", 24, 30....., 0, 1);

double Entry2 = iCustom(NULL, 0, "VQ", 24, 30....., 0, 2);

double Up2 = iCustom(NULL, 0, "VQ", 24, 30....., 1, 2);

double Down2 = iCustom(NULL, 0, "VQ", 24, 30....., 2, 2);

Просто не правильно торгую.

Спасибо

Файлы:
ci.jpg  66 kb
 
matrixebiz:
Хорошо, я понял Shift, придется еще почитать о режиме.

Вы занимаетесь кодированием? У меня есть этот индикатор, который я вызываю из моего эксперта, но не уверен, как правильно его настроить. Смотрите рисунок.

У него просто две линии, и когда синяя меняется и соединяется с другой линией, генерируется длинный сигнал (та же идея с красным).

Пробовал несколько разных кодов, как тот, который я использовал с индикатором VQ;

double Entry1 = iCustom(NULL, 0, "VQ", 24, 30....., 0, 1);

double Entry2 = iCustom(NULL, 0, "VQ", 24, 30....., 0, 2);

double Up2 = iCustom(NULL, 0, "VQ", 24, 30....., 1, 2);

double Down2 = iCustom(NULL, 0, "VQ", 24, 30....., 2, 2);

Просто неправильно торгую.

Спасибо

Если вы имеете в виду нижний индикатор, который, кажется, называется "#MTF CI", то я думаю, что, возможно, этот индикатор имеет 4 буфера: по одному для двух цветов каждой линии. Вы можете вызвать окно данных (ctrl-D), чтобы увидеть, какие буферы есть у индикаторов, а также их индексы (аргумент MODE в вызове iCustom).

 
matrixebiz:
Хорошо, я понял Shift, мне нужно будет больше почитать о режиме.

Вы кодируете?

Спасибо

Я был известен тем, что закодировал индикатор или 2 (СТО) в свое время....LOL!

 
ralph.ronnquist:
Если вы имеете в виду нижний индикатор, который, кажется, называется "#MTF CI", то я думаю, что, возможно, этот индикатор имеет 4 буфера: по одному для двух цветов каждой линии. Вы можете вызвать окно данных (ctrl-D), чтобы увидеть, какие буферы есть у индикаторов, а также их индексы (аргумент MODE в вызове iCustom).

Да, вы правы, как мне настроить их и создать торговлю?

Для двух других (QQEA 4 буфера и VQ 2 буфера), которые работают, я использую следующее;

double Entry1 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 0, 1);

double Entry2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 0, 2);

double Up2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 1, 2);

double Down2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 2, 2);

double qqe0_0=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,0,1);

double qqe0_1=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,0,2);

double qqe1_0=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,1,1);

double qqe1_1=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,1,2);

//Покупка

qqe0_0>qqe1_0 && qqe0_1Entry2 && ....

Спасибо Ральф

Файлы:
data.jpg  24 kb
 
matrixebiz:
Да, вы правы, как мне выбрать iCustom и создать сделку?

Для двух других (QQEA 4 буфера и VQ 2 буфера), которые работают, я использую следующее;

double Entry1 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 0, 1);

double Entry2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 0, 2);

double Up2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 1, 2);

double Down2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 2, 2);

double qqe0_0=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,0,1);

double qqe0_1=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,0,2);

double qqe1_0=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,1,1);

double qqe1_1=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,1,2);

//Покупаем

qqe0_0>qqe1_0 && qqe0_1Entry2 && ....

Спасибо, Ральф

Вообще, когда вы видите линию индикатора с несколькими цветами, то это обычно реализуется несколькими буферами, по одному на каждый цвет. Вы можете определить индексы буферов из окна данных, где верхний буфер имеет индекс 0, и далее по возрастающей. Буфер выводится на экран, когда в нем есть значение (или если это стиль рисования LINE, то для вывода на экран необходимо два или более последовательных значения).

Если у вас есть исходный код индикатора, иногда проще заглянуть в него и узнать индексы буферов из вызовов функции SetIndexBuffer.

И еще одно замечание: индикатор может выводить на экран "объекты", которые недоступны через вызов iCustom. Вместо этого вам нужно знать "имя объекта", и вы можете считывать его свойства.

Таким образом, вы всегда должны четко знать, из какого буфера индикатора считывать данные, и использовать этот индекс в качестве второго последнего аргумента iCustom.

Например, использование индикатора VQ кажется не совсем правильным, потому что (судя по источнику, который я видел), его буферы [1] и [2] используются для зеленой и красной линий соответственно, и никогда не бывает случая, чтобы они оба были не пустыми. Т.е. "Up2==Down2" всегда ложно, кроме случая, когда оба "пусты", а это когда линия VQ не зеленая и не красная, а желтая.

Кроме этого, я думаю, что вы все делаете правильно. Можно, конечно, обсуждать выбор имен переменных, но это академический вопрос. Правильнее всего выбрать интересующие значения с помощью функции iCustom, а затем выразить конкретные требуемые отношения значений в торговых условиях.

 
ralph.ronnquist:
Обычно, когда вы видите линию индикатора с несколькими цветами, то это обычно реализуется несколькими буферами, по одному на каждый цвет. Вы можете определить индексы буферов из окна данных, где верхний буфер имеет индекс 0, и по возрастающей вниз. Буфер выводится на экран, когда в нем есть значение (или если это стиль рисования LINE, то для вывода на экран необходимо два или более последовательных значения).

Если у вас есть исходный код индикатора, иногда проще заглянуть в него и узнать индексы буфера из вызовов функции SetIndexBuffer.

И еще одно замечание: индикатор может выводить на экран "объекты", которые недоступны через вызов iCustom. Вместо этого вам нужно знать "имя объекта", и вы можете считывать его свойства.

Таким образом, вы всегда должны четко знать, из какого буфера индикатора считывать данные, и использовать этот индекс в качестве второго последнего аргумента iCustom.

Например, использование индикатора VQ кажется не совсем правильным, потому что (судя по источнику, который я видел), его буферы [1] и [2] используются для зеленой и красной линий соответственно, и никогда не бывает случая, чтобы они оба были не пустыми. Т.е. "Up2==Down2" всегда ложно, кроме случая, когда оба "пусты", а это когда линия VQ не зеленая и не красная, а желтая.

Кроме этого, я думаю, что вы все делаете правильно. Можно, конечно, обсуждать выбор имен переменных, но это академический вопрос. Лучше всего выбрать интересующие значения с помощью вызова iCustom, а затем выразить конкретные требуемые отношения значений в торговых условиях.

К сожалению, у меня нет исходников трех индикаторов, о которых я говорил выше. Как бы вы написали код для них, если я хочу, чтобы они проверяли условие покупки или продажи ТОЛЬКО в тот момент, когда они меняют цвет одновременно для каждого индикатора, конечно?

Спасибо

 

Отсутствие источника не является проблемой. Давайте сосредоточимся на окне индикатора 2 на вашем изображении, где показан индикатор с 4 буферами. Если вы будете перемещать мышь влево и вправо по индикатору, вы сможете определить, какой буфер используется для какого цвета.

Допустим, первый буфер ([0]) предназначен для синей индикации верхней линии, второй буфер ([1]) - для красной индикации верхней линии, и аналогично [2] и [3] - для синей и красной нижней линии. Затем вы можете считать с индикатора следующим образом:

double top_is_blue = iCustom( ..., 0, 1 );

double top_was_blue = iCustom( ..., 0, 2 );

double top_is_red = iCustom( ..., 1, 1 );

double top_was_red = iCustom( ..., 1, 2 );

double bot_is_blue = iCustom( ..., 2, 1 );

double bot_was_blue = iCustom( ..., 2, 2 );

double bot_is_red = iCustom( ..., 3, 1 );

double bot_was_red = iCustom( ..., 3, 2 );

[/PHP]

Then you can summarise them as follows:

[PHP]bool top_goes_blue = ( top_is_blue == top_was_red );

bool top_goes_red = ( top_is_red == top_was_blue );

bool bot_goes_blue = ( top_is_blue == top_was_red );

bool bot_goes_red = ( top_is_red == top_was_blue );

bool both_go_blue = ( top_goes_blue && bot_goes_blue );

bool both_go_red = ( top_goes_red && bot_goes_red );

Как вы это сделаете, зависит от того, что вы ищете. Особенно,

если вы хотите объединить несовпадающие показания двух линий, то это может стать более сложным кодированием. Например, булева переменная "both_go_blue" относится к одновременным показаниям двух линий и не отражает того, что "одна линия становится синей, а другая - чуть позже".

Причина обращения: