[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 28
E em geral, não há necessidade de reinventar a roda, ver o trailer, há uma biblioteca de redes de arrasto de Y.Dzyuban. Todos os trabalhos, eu os verifiquei. Edite qualquer tipo de rede de arrasto para atender às suas necessidades e pronto!
Porque o nome curto só pode ser atribuído ao indicador exibido na janela adicional.
Mais precisamente, ninguém proíbe a sua atribuição a nenhum indicador, mas para a janela 0 não há previsão de exibir este nome em nenhuma janela do terminal.
Porque o nome curto só pode ser atribuído ao indicador exibido na janela adicional.
Mais precisamente, ninguém proíbe a sua atribuição a nenhum indicador, mas para a janela 0 não há previsão de exibir este nome em nenhuma janela do terminal.
Eu já vi Dimka! Ele está dirigindo um TOҮOTA-BB. Ele me pediu para dizer a seu amigo bielorrusso que a pergunta "pode, não pode". Você não precisa perguntar.
villy: Eu já vi Dimka! Ele está montando no TOҮOTA-BB. Ele me pediu para dizer a seu amigo bielorrusso que a pergunta "pode, não pode". Você não precisa perguntar.
Tenho aqui um caso muito estranho. Estou testando o consultor sobre a história de 2004 a 2012 e o resultado é um, positivo, e então faço um teste sobre o período de 2009 a 2012 e é completamente diferente. um grande número de pedidos, mais de 20000 por um período de 8 anos. quando o teste é grande, então o gráfico de barras de rentabilidade mostra que de 2009 a 2012 o lucro é limpo e bonito e quando você testa qualquer distância menor que 2009, então apenas CHAOS. Por acaso você sabe o que poderia ser. Agradecemos antecipadamente :)
Você pode me dizer como extrair valores de um indicador zig-zag? Como isso é implementado em geral? Isto é, se eu quiser pegar um certo extremo, não apenas o último.
Por exemplo, agora eu quero anexar este ziguezague ao meu consultor especializado:
#property copyright "Scriptong"#property link "http://autograf.dp.ua"#property indicator_chart_window // Индикатор выводится в окне графика#property indicator_buffers 1// используется 1 буфер индикатора#property indicator_color1 Blue // Цвет отображения данных 1-го буфера#property indicator_width1 1// Толщина линий 1-го буфераdouble ZZBuf[]; // Буфер экстремумовdouble UpDnBuf[]; // Буфер признака текущего тренда#define NO_TREND 0// Нет тренда#define TREND_UP 1// Восходящий тренд#define TREND_DOWN -1// Нисходящий тренд //+-------------------------------------------------------------------------------------+//| Custom indicator initialization function |//+-------------------------------------------------------------------------------------+int init()
{
IndicatorBuffers(2);
// - 1 - == Проверка корректности значений настроечных параметров индикатора ============string name = WindowExpertName();
// - 1 - == Окончание блока =============================================================// - 2 - == Связывание буферов с индексами, определение стилей ==========================SetIndexBuffer(0, ZZBuf); // Первый буфер - экстремумы
SetIndexStyle(0, DRAW_SECTION); // В виде линии между непустыми..// ..значениямиSetIndexBuffer(1, UpDnBuf); // Второй буфер - признак тренда
SetIndexStyle(1, DRAW_NONE); // Не отображается// - 2 - == Окончание блока =============================================================return(0);
}
//+-------------------------------------------------------------------------------------+//| Custom indicator deinitialization function |//+-------------------------------------------------------------------------------------+int deinit()
{
return(0);
}
//+-------------------------------------------------------------------------------------+//| Определение индекса бара, с которого необходимо производить перерасчет |//+-------------------------------------------------------------------------------------+int GetRecalcIndex()
{
int counted_bars = IndicatorCounted();
if (counted_bars == 0) // Кол-во посчитанных баров - 0. Будут
{ // ..пересчитаны все буфера с самого..ArrayInitialize(ZZBuf, EMPTY_VALUE); // ..начала. Очистка буферовArrayInitialize(UpDnBuf, 0);
return(Bars - 2); // Начинаем со второго бара истории
}
return(Bars - counted_bars - 1); // Начинаем с нового бара
}
//+-------------------------------------------------------------------------------------+//| Определение тенденции по соотношению указанной и предыдущей свечей |//+-------------------------------------------------------------------------------------+int GetTrend(int index)
{
// - 1 - == Закрытие новой свечи выше максимума предыдущей ==============================if (Close[index] > High[index+1])
return(TREND_UP); // Рост// - 1 - == Окончание блока =============================================================// - 2 - == Закрытие новой свечи ниже минимума предыдущей ===============================if (Close[index] < Low[index+1])
return(TREND_DOWN); // Падение// - 2 - == Окончание блока =============================================================return(NO_TREND); // Если свеча не пробита - нет тренда
}
//+-------------------------------------------------------------------------------------+//| Поиск последнего элемента ZZBuf с непустым значением |//+-------------------------------------------------------------------------------------+int GetLastIndexNoEmptyValue(int index)
{
while (ZZBuf[index] == EMPTY_VALUE && index < Bars)// Поиск по графику справа налево
index++; // Пока не будет найден экстремум или// ..пока не достигнем конца историиreturn(index); // Индекс бара с непустым значением..// ..зиг-зага
}
//+-------------------------------------------------------------------------------------+//| Сравнение последнего максимума с новым максимумом |//+-------------------------------------------------------------------------------------+void CheckHigh(int index)
{
int cnt = GetLastIndexNoEmptyValue(index); // Найдем последний непустой элемент..// ..зиг-загаif (cnt == Bars) // Если элемент не найден (достигнут..
{ // ..конец истории), то максимумом..
ZZBuf[index] = High[index]; // ..считается текущий максимумreturn;
}
if (High[index] > ZZBuf[cnt]) // Элемент найден. Сравним его..
{ // ..значение с новым максимумом. Если
ZZBuf[cnt] = EMPTY_VALUE; // ..новый максимум выше, то..
ZZBuf[index] = High[index]; // ..предыдущий максимум уничтожается,// ..а новый сохраняется
}
}
//+-------------------------------------------------------------------------------------+//| Сравнение последнего минимума с новым минимумом |//+-------------------------------------------------------------------------------------+void CheckLow(int index)
{
int cnt = GetLastIndexNoEmptyValue(index); // Найдем последний непустой элемент..// ..зиг-загаif (cnt == Bars) // Если элемент не найден (достигнут..
{ // ..конец истории), то минимумом..
ZZBuf[index] = Low[index]; // ..считается текущий минимумreturn;
}
if (Low[index] < ZZBuf[cnt]) // Элемент найден. Сравним его..
{ // ..значение с новым минимумом. Если
ZZBuf[cnt] = EMPTY_VALUE; // ..новый минимум ниже, то..
ZZBuf[index] = Low[index]; // ..предыдущий минимум уничтожается,// ..а новый сохраняется
}
}
//+-------------------------------------------------------------------------------------+//| Смена тренда или его продолжение при отсутствии нового сигнала |//+-------------------------------------------------------------------------------------+void TrendChange(int trend, int i)
{
// - 1 - == Тренд изменился с нисходящего на восходящий =================================
UpDnBuf[i] = trend; // Сохранение признака направленияif (trend == TREND_UP) // Тренд изменился на восходящий
{
CheckLow(i); // Проверка появления нового минимумаif (ZZBuf[i] != EMPTY_VALUE) // Если минимум обновлен, то максимум
ZZBuf[i-1] = High[i]; // ..переносим на следующий барelse// Если минимум не обновлен, то..
ZZBuf[i] = High[i]; // ..максимум отображается на текущемreturn; // ..баре
}
// - 1 - == Окончание блока =============================================================// - 2 - == Тренд изменился с восходящего на нисходящий =================================
CheckHigh(i); // Проверка появления нового максимумаif (ZZBuf[i] != EMPTY_VALUE) // Если максимум обновлен, то минимум
ZZBuf[i-1] = Low[i]; // ..отображается на следующем бареelse// Если максимум не обновлен, то..
ZZBuf[i] = Low[i]; // ..минимум отображается на текущем..// ..баре// - 2 - == Окончание блока =============================================================
}
//+-------------------------------------------------------------------------------------+//| Расчет значений индикатора |//+-------------------------------------------------------------------------------------+void ZigZag(int limit)
{
for (int i = limit; i > 0; i--) // По всем новым барам
{
int trend = GetTrend(i); // Получение направления на баре iif (trend != UpDnBuf[i+1] && trend != 0) // Направление на текущем баре..
{ // ..отличается от направления на..
TrendChange(trend, i); // ..предыдущем баре.continue;
}
UpDnBuf[i] = UpDnBuf[i+1]; // Направление не изменяетсяif (UpDnBuf[i] == TREND_UP) // Сохранение восходящего тренда
{
CheckHigh(i); // Обновление максимумаcontinue;
}
if (UpDnBuf[i] == TREND_DOWN) // Сохранение нисходящего тренда
CheckLow(i); // Обновление минимума
}
}
//+-------------------------------------------------------------------------------------+//| Custom indicator iteration function |//+-------------------------------------------------------------------------------------+int start()
{
int limit = GetRecalcIndex(); // Определим первый расчетный бар
ZigZag(limit); // Расчет значений индикатораreturn(0);
}
Entendo que devo usar a funçãoiCustom, pois ela é normalmente aplicada para abordar um indicador personalizado, mas a questão é como conectar os nós...
Flashes, torna-se intermitente, e é como um laser, em resumo.
Legal!
Quanto à pergunta, desmonte a rede de arrasto do início ao fim do livro didático. Você encontrará a resposta!
E em geral, não há necessidade de reinventar a roda, ver o trailer, há uma biblioteca de redes de arrasto de Y.Dzyuban. Todos os trabalhos, eu os verifiquei. Edite qualquer tipo de rede de arrasto para atender às suas necessidades e pronto!
<Ctrl+D>.
Por que ele não é exibido?
Porque o nome curto só pode ser atribuído ao indicador exibido na janela adicional.
Mais precisamente, ninguém proíbe a sua atribuição a nenhum indicador, mas para a janela 0 não há previsão de exibir este nome em nenhuma janela do terminal.
Porque o nome curto só pode ser atribuído ao indicador exibido na janela adicional.
Mais precisamente, ninguém proíbe a sua atribuição a nenhum indicador, mas para a janela 0 não há previsão de exibir este nome em nenhuma janela do terminal.
obrigado...
Eu já vi Dimka! Ele está montando no TOҮOTA-BB. Ele me pediu para dizer a seu amigo bielorrusso que a pergunta "pode, não pode". Você não precisa perguntar.
"BB" é BabyBaby há 14 anos?!

Você pode me dizer como extrair valores de um indicador zig-zag? Como isso é implementado em geral? Isto é, se eu quiser pegar um certo extremo, não apenas o último.
Por exemplo, agora eu quero anexar este ziguezague ao meu consultor especializado:
Entendo que devo usar a funçãoiCustom, pois ela é normalmente aplicada para abordar um indicador personalizado, mas a questão é como conectar os nós...