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

 

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

На основе индикатора FreedomBar...

Если предыдущий квадрат закрывается красным -> продаем (рыночная цена) -> закрываем сделку на следующем предыдущем квадрате меняем цвет на синий и разворачиваемся на покупку (рыночная цена)

Идем по ордерам на покупку

Было бы неплохо иметь опции TF, tp, sl и трейлинг стоп.

Заранее спасибо

Файлы:
 

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

 
increase:
Помогите, пожалуйста. Я считываю данные с индикатора в советнике, использующем icustom, во время бэктеста тренд работает вполне счастливо, затем по какой-то причине параметры icustom меняются, так что мой тренд идет вверх, а не вниз, хотя индикатор показывает вниз после активации торговли, я исправляю себя, затем это происходит снова некоторое время спустя .

ммм, похоже, проблема в индикаторе, это SuperTrend volty, но у меня была проблема с другими неперерисовывающимися индикаторами, такими как FX Sniper Ergodic и Fisher.

Проблема, похоже, заключается в том, что часто бывает так, что индикатор указывает направление, скажем, вниз, но начальная точка движения оказывается ниже, чем конечная, в результате чего индикатор показывает вниз, а данные показывают вверх.

Есть ли какие-либо комментарии по этому поводу, есть ли у кого-нибудь неперерисовывающийся индикатор, который не делает этого, или любое другое решение?

Пожалуйста, смотрите прикрепленный рисунок

Файлы:
pic.jpg  38 kb
 

Функция iCustom

привет всем... это мое первое сообщение.

Мне нужна помощь с ea, которую я пытаюсь создать. Эта ea будет использоваться для закрытия позиции на основе цвета индикатора, но я буду открывать позицию вручную. Поскольку у меня нет декомпилированной версии индикатора, я думаю, что icustom - это то, что нужно.

но как мне вызвать функцию, основанную на цвете?

Например, если я использую Heikin Ashi_SW и хочу закрыть позицию на продажу, когда цвет синий после закрытия бара и наоборот.

спасибо заранее

 

Проблемы с ICustom

У меня есть простой пользовательский индикатор без внешних элементов под названием #TestIndicator, который заполняет 8 буферов числом 1.0, но когда я возвращаю буферы в советник, результаты буферов всегда равны 0. Можете ли вы помочь мне с этим.

#TestIndicator

#property indicator_chart_window

#property indicator_buffers 8

double buf4_up[];

double buf4_down[];

double buf3_up[];

double buf3_down[];

double buf2_up[];

double buf2_down[];

double buf1_up[];

double buf1_down[];

int UniqueNum = 0070;

string shortname = "";

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

shortname = "#TFX";

IndicatorBuffers(8);

IndicatorShortName(shortname);

//---- indicators

SetIndexBuffer(0,buf4_up);

SetIndexBuffer(1,buf4_down);

SetIndexBuffer(2,buf3_up);

SetIndexBuffer(3,buf3_down);

SetIndexBuffer(4,buf2_up);

SetIndexBuffer(5,buf2_down);

SetIndexBuffer(6,buf1_up);

SetIndexBuffer(7,buf1_down);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int limit;

int counted_bars = IndicatorCounted();

//---- the last calculated bar will be recalculated

if(counted_bars > 0)

counted_bars--;

limit = Bars - counted_bars - 1;

//---- the main cycle

for(int i = limit; i >= 0; i--)

{

//----

buf4_up=1.0;

buf4_down=1.0;

buf3_up=1.0;

buf3_down=1.0;

buf2_up=1.0;

buf2_down=1.0;

buf1_up=1.0;

buf1_down=1.0;

}

//----

//----

//----

return(0);

}

//+------------------

[/CODE]

EA Code

[CODE]

double test4_up[];

double test4_down[];

double test3_up[];

double test3_down[];

double test2_up[];

double test2_down[];

double test1_up[];

double test1_down[];

int UniqueNum = 009;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

Print("Inside init");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

Print("Inside deinit");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

Print("Inside start");

int counted_bars=IndicatorCounted();

int y5m=0, y1h=0, y30m=0, y15m=0, yy=0;

int i=0;

int limit=Bars-counted_bars;

for(i=0;i<limit;i++)

{

test4_up = iCustom(NULL, 0, "#TestIndicator",0,i);

test4_down = iCustom(NULL, 0, "#TestIndicator",1,i);

}

for(i=0;i<30;i++)

{

Print("Test 4 UP ", test4_up," Bar ",i );

Print("Test 4 DOWN ", test4_down," Bar ",i );

//Print("This is a test");

}

//----

return(0);

}

//+---------

Результаты в тестере

 
Xaun:
У меня есть простой пользовательский индикатор без внешних элементов под названием #TestIndicator, который заполняет 8 буферов числом 1.0, но когда я возвращаю буферы в советник, результаты буферов всегда равны 0. Не могли бы вы помочь мне с этим.

Код эксперта

double test4_up[];

double test4_down[];

double test3_up[];

double test3_down[];

double test2_up[];

double test2_down[];

double test1_up[];

double test1_down[];

int UniqueNum = 009;

..

..

...

......

..

int i=0;

int limit=Bars-counted_bars;

ArrayResize(test4_up, limit);

ArrayResize(test4_down, limit);

for(i=0;i<limit;i++)

{

test4_up = iCustom(NULL, 0, "#TestIndicator",0,i);

test4_down = iCustom(NULL, 0, "#TestIndicator",1,i);

}

for(i=0;i<30;i++)

{

Print("Test 4 UP ", test4_up," Bar ",i );

Print("Test 4 DOWN ", test4_down," Bar ",i );

//Print("This is a test");

}

//----

return(0);

}

//+---------

]

Возможно, вам нужно определить размер массива в вашем советнике.

 

Спасибо

okfar:
Возможно, вам нужно определить размер массива в вашем советнике.

Спасибо, Окфар. Именно в этом и была проблема.

 

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

bool ArraySetAsSeries(double&array[], bool set)Устанавливает направление индексации массива. Если параметр set имеет значение TRUE, массив будет индексироваться в обратном порядке, т.е. последний элемент будет иметь нулевой индекс. Значение FALSE устанавливает стандартный порядок индексации. Функция возвращает предыдущее состояние.

 

...

Вы пытаетесь использовать функции, которые предназначены для использования исключительно из индикатора.

IndicatorCounted() не имеет никакого смысла при вызове из советника. Она всегда возвращает -1 при вызове внутри кода эксперта. Попробуйте использовать вместо нее константу (как во втором цикле) или Bars (если вам нужна вся история).

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

с уважением

mladen

Xaun:
У меня есть простой пользовательский индикатор без внешних элементов под названием #TestIndicator, который заполняет 8 буферов числом 1.0, но когда я возвращаю буферы в советник, результаты буферов всегда равны 0. Можете ли вы помочь мне с этим.

#TestIndicator

#property indicator_chart_window

#property indicator_buffers 8

double buf4_up[];

double buf4_down[];

double buf3_up[];

double buf3_down[];

double buf2_up[];

double buf2_down[];

double buf1_up[];

double buf1_down[];

int UniqueNum = 0070;

string shortname = "";

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int init()

{

shortname = "#TFX";

IndicatorBuffers(8);

IndicatorShortName(shortname);

//---- indicators

SetIndexBuffer(0,buf4_up);

SetIndexBuffer(1,buf4_down);

SetIndexBuffer(2,buf3_up);

SetIndexBuffer(3,buf3_down);

SetIndexBuffer(4,buf2_up);

SetIndexBuffer(5,buf2_down);

SetIndexBuffer(6,buf1_up);

SetIndexBuffer(7,buf1_down);

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int limit;

int counted_bars = IndicatorCounted();

//---- the last calculated bar will be recalculated

if(counted_bars > 0)

counted_bars--;

limit = Bars - counted_bars - 1;

//---- the main cycle

for(int i = limit; i >= 0; i--)

{

//----

buf4_up=1.0;

buf4_down=1.0;

buf3_up=1.0;

buf3_down=1.0;

buf2_up=1.0;

buf2_down=1.0;

buf1_up=1.0;

buf1_down=1.0;

}

//----

//----

//----

return(0);

}

//+------------------

[/code]EA Code

[code]

double test4_up[];

double test4_down[];

double test3_up[];

double test3_down[];

double test2_up[];

double test2_down[];

double test1_up[];

double test1_down[];

int UniqueNum = 009;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

Print("Inside init");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

Print("Inside deinit");

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

Print("Inside start");

int counted_bars=IndicatorCounted();

int y5m=0, y1h=0, y30m=0, y15m=0, yy=0;

int i=0;

int limit=Bars-counted_bars;

for(i=0;i<limit;i++)

{

test4_up = iCustom(NULL, 0, "#TestIndicator",0,i);

test4_down = iCustom(NULL, 0, "#TestIndicator",1,i);

}

for(i=0;i<30;i++)

{

Print("Test 4 UP ", test4_up," Bar ",i );

Print("Test 4 DOWN ", test4_down," Bar ",i );

//Print("This is a test");

}

//----

return(0);

}

//+---------

Результаты в Тестере...

 

Вопрос по кодированию

У меня есть индикатор, который мне очень нравится, я тестировал его в течение нескольких недель и был довольно успешен. Есть ли способ, с помощью которого я могу автоматизировать ордера на покупку/продажу на основе этого индикатора? Если кратко, то это маленькая стрелка, указывающая вверх или вниз на графике, когда индикаторы, которые мне нравятся, выстраиваются в линию. Есть ли способ, чтобы когда стрелка появляется, она размещала ордер за меня?

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