double v1[1000]; double v2[1000]; double v3[1000];<------ leave out the '1000' initialization for indicator buffers, as they don't require
Сначала я так и сделал, но потом не смог вывести значения буфера, что я и хотел сделать
Подождите, позвольте мне переформулировать:
Если я не объявлю количество элементов в буфере, то индикатор будет работать как в случае v1[i]=High[i]
Но Print (v1[i]); не будет выводиться, потому что, насколько я могу судить, нет способа вывести значения необъявленного массива, если количество элементов не было объявлено, таким образом, он всегда будет печатать 0
Итак, если я не объявляю его глобально, то индикатор работает, однако if(faster>slower) по-прежнему заставляет индикатор исчезнуть, И я также не могу вывести значения.
Если я объявляю его, а также повторно инициализирую с v1[i]=High[i], то я могу печатать, однако любые дополнения, такие как && faster > slower, снова удаляют индикатор.
Я не совсем понимаю почему.
Спасибо
Я взял ваш код, убрал значения из объявлений буфера и он работает просто отлично. ...
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[4]= 1.5913 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[8]= 1.5962 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[11]= 1.5948 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[15]= 1.5992 если
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[18]= 1.5996 если
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[20]= 1.5919 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[27]= 1.5954 если
Я взял ваш код, убрал значения из объявлений буфера и он работает просто отлично. ...
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[4]= 1.5913 if <----High
------> в это время фракталы несовместимого High ниже предыдущего Low <---------
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[11]= 1.5948 if<----High
------> в это время Fractals inconsistent High ниже предыдущего Low <---------
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[15]= 1.5992 if<----Low
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[18]= 1.5996 if<----High
------> в это время чередующиеся фракталы последовательны <---------
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[20]= 1.5919 if<----Low
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[27]= 1.5954 if<----High
Интересно, спасибо за результат Agent86V2. Фракталы действительно являются одним из тех интригующих и в то же время прибыльных способов торговли.
Я взял ваш код, убрал значения из объявлений буферов, и он работает просто отлично...
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[4]= 1.5913 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[8]= 1.5962 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[11]= 1.5948 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[15]= 1.5992 если
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v1[18]= 1.5996 если
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[20]= 1.5919 if
2011.09.27 13:04:03 Agent86V2 GBPUSD,H1: v2[27]= 1.5954 если
Извините, я просто не понимаю. Я думал, что понял, но, похоже, я все еще чего-то не понимаю.
int start() { double test[]; test[39] = 45.6; Print("test[39]= ",test[39] ); return(0); }Вы проинструктировали меня объявить, как указано выше:
И вы процитировали эту тему:
"При объявлении массива должны быть указаны тип данных, имя массива и количество элементов каждого измерения:".
Итак, с одной стороны, я не могу распечатать массив, как в этом сценарии, не объявив сначала double test[40]; как вы указали, но теперь, похоже, я могу распечатать и без объявления.Таким образом, получается, что я могу печатать значения в буфере независимо от объявления.
Однако я не могу добавить дополнительные условия, которые обычно дают желаемый результат, такие как if(faster > slower) или && faster > slower.
Это может быть EMA, что угодно, я просто хочу понять, почему это не работает.
Это приводит к тому, что максимумы индикатора исчезают, а вывод v1 print перестает печататься. Я ожидал, что он будет соответствовать условию и печатать вывод.
Я пытался добавить дополнительные блоки кода для этого и с теми же результатами.
Спасибо
Я также написал следующее...
Индикаторные буферы - это специальные массивы ... не путайте массивы и буферы, они похожи и в то же время различны.
В оригинальном коде v1[] и v2[] - это буферы, в вашем последнем коде - это массивы, когда вы объявляете массив, вы должны указать его размер, например, v1[50] имеет 50 элементов от v1[0] до v1[49]. Буфер автоматически изменяет размер, когда требуется больше элементов, и значения автоматически смещаются в буфере. Рассмотрим текущий формирующийся бар, бар 0, когда этот бар завершается, значение индикатора, связанное с этим баром, должно переместиться на индекс 1 ... это делается автоматически с помощью буферов ... если вы хотите сделать что-то подобное с массивами, вы можете, но вам придется кодировать это самостоятельно.
Однако я не могу добавить дополнительные условия, которые обычно дают желаемый результат, например if(faster > slower) или && faster > slower.
Это может быть EMA, что угодно, я просто хочу понять, почему это не работает.
Это приводит к тому, что максимумы индикатора исчезают, а вывод v1 print перестает печататься. Я ожидал, что он будет соответствовать условию и печатать вывод.
Я пытался добавить дополнительные блоки кода для этого и с теми же результатами.
Спасибо
Я также написал следующее...
Индикаторные буферы - это специальные массивы ... не путайте массивы и буферы, они похожи и в то же время различны.
В оригинальном коде v1[] и v2[] - это буферы, в вашем последнем коде - это массивы, когда вы объявляете массив, вы должны указать его размер, например, v1[50] имеет 50 элементов от v1[0] до v1[49]. Буфер автоматически изменяет размер, когда требуется больше элементов, и значения автоматически смещаются в буфере. Рассмотрим текущий формирующийся бар, бар 0, когда этот бар завершается, значение индикатора, связанное с этим баром, должно переместиться на индекс 1 ... это делается автоматически с помощью буферов ... если вы хотите сделать что-то подобное с массивами, вы можете, но вам придется кодировать это самостоятельно.
Я создал вторичный цикл только потому, что не мог напечатать в первом индикаторном цикле, но теперь он печатает.
В любом случае, я не буду повторять это, я думаю, что понял.
Итак, код, который не будет работать - это несколько примеров, показанных здесь:
//+------------------------------------------------------------------+ //| //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_color2 Blue #property indicator_color3 White //---- buffers double v1[]; double v2[]; double v3[]; double val1; double val2; double val3; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { //---- IndicatorBuffers(3); SetIndexArrow(0, 111); SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Blue); SetIndexBuffer(0, v1); SetIndexLabel(0,"Resistance"); SetIndexArrow(1, 111); SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Red); SetIndexBuffer(1, v2); SetIndexLabel(1,"Support"); SetIndexArrow(2, 111); SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White); SetIndexBuffer(2, v3); SetIndexLabel(2,"High A"); //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL int i=Bars; //---- for(i=Bars; i>=0; i--) { val1=iFractals(NULL, 0, MODE_UPPER,i); if (val1 > 0 && faster > slower) // I think I need to add some more comparisons for the Low[i] also // the comparison works but shows indicator when faster < slower too. // adding additional code blocks instead of above and including the part below and inserting this instead // if(faster>slower) // { // v1[i]=High[i]; // } // causes indicator to disappear { v1[i]=High[i]; Print ("v1[", i, "]= ", v1[i], " if"); } else { //v1[i]=v1[i+1]; //Print ("v1[", i, "]= ", v1[i], " else"); } val2=iFractals(NULL, 0, MODE_LOWER,i); if (val2 > 0) { v2[i]=Low[i]; Print ("v2[", i, "]= ", v2[i], " if"); } else { //v2[i]=v2[i+1]; //Print ("v2[", i, "]= ", v2[i], " else"); } } //---- return(0); } //+------------------------------------------------------------------+
Спасибо
Итак, код, который не будет работать - это несколько примеров, показанных здесь:
Спасибо
Хорошо, я могу сказать вам, в чем ваша проблема, или я могу дать вам несколько подсказок. ... сначала подсказки, если вы хотите, чтобы я сказал вам, просто скажите, и я скажу вам. .
Внутри цикла, for(i=Bars; i>=0; i--) ... какие значения для быстрее и медленнее?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет всем,
Я изучал некоторые общие темы о массивах из кодовой базы индикатора, который имеет iFractals с большой помощью гуру на форумах.
Как бы то ни было
Я не смог добавить условные операторы или логические операции, чтобы добавить функцию сложения в индикатор.
Я попробовал вставить if(faster > slower) в различные области кода, просто чтобы поиграть с идеей. Обычно эти идеи работают в советнике, но не в индикаторе.
IE if(v1 > 0 && faster > slower)
но это приводит к исчезновению индикатора.
Множество других комбинаций, которые, как я думал, должны привести к желаемому индикатору if(other conditions) и так далее.
Все они не приводят к выводу оператора печати.
Какой момент я упускаю.
Пожалуйста, посоветуйте.
Спасибо