[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 28
Et en général, pas besoin de réinventer la roue, voir la bande annonce, il y a une bibliothèque de chaluts de Y.Dzyuban. Tout fonctionne, je l'ai vérifié. Modifiez les types de chalutage en fonction de vos besoins et c'est tout !
Parce que le nom court ne peut être attribué qu'à l'indicateur affiché dans la fenêtre supplémentaire.
Plus précisément, personne n'interdit de l'attribuer à n'importe quel indicateur, mais pour la 0ème fenêtre, il n'est pas prévu d'afficher ce nom dans une quelconque fenêtre du terminal.
Parce que le nom court ne peut être attribué qu'à l'indicateur affiché dans la fenêtre supplémentaire.
Plus précisément, personne n'interdit de l'attribuer à n'importe quel indicateur, mais pour la 0ème fenêtre, il n'est pas prévu d'afficher ce nom dans une quelconque fenêtre du terminal.
J'ai vu Dimka ! Il conduit un TOҮOTA-BB. Il m'a demandé de dire à son ami biélorusse que la question "peut, peut ne pas". Vous n'avez pas besoin de demander.
villy: J'ai vu Dimka ! Il est sur le TOҮOTA-BB. Il m'a demandé de dire à son ami biélorusse que la question "peut, peut ne pas". Vous n'avez pas besoin de demander.
J'ai un cas très étrange ici. Je teste le conseiller sur l'historique de 2004 à 2012 et le résultat est un, positif, et ensuite je fais un test sur la période de 2009 à 2012 et c'est juste complètement différent. un grand nombre d'ordres, plus de 20000 pour une période de 8 ans. lorsque le test est important, alors le graphique à barres de rentabilité montre que de 2009 à 2012 le profit est propre et beau et lorsque vous testez toute distance inférieure à 2009 alors juste CHAOS. Savez-vous ce que ça peut être ? Merci d'avance les gars :)
Pouvez-vous me dire comment extraire les valeurs d'un indicateur zig-zag ? Comment cela est-il mis en œuvre en général ? C'est-à-dire si je veux prendre un certain extremum, et pas seulement le dernier.
Par exemple, je veux maintenant attacher ce zigzag à mon conseiller expert :
#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);
}
Je comprends que je dois utiliser la fonctioniCustom comme elle est habituellement appliquée pour adresser un indicateur personnalisé, mais la question est de savoir comment connecter les nœuds...
Il clignote, devient intermittent, et est comme un laser tout court, en somme.
Cool !
Pour ce qui est de la question, démontez la recherche dans les manuels scolaires du début à la fin. Vous trouverez la réponse !
Et en général, pas besoin de réinventer la roue, voir la bande annonce, il y a une bibliothèque de chaluts de Y.Dzyuban. Tout fonctionne, je l'ai vérifié. Modifiez les types de chalutage en fonction de vos besoins et c'est tout !
<Ctrl+D>.
Pourquoi n'est-il pas affiché ?
Parce que le nom court ne peut être attribué qu'à l'indicateur affiché dans la fenêtre supplémentaire.
Plus précisément, personne n'interdit de l'attribuer à n'importe quel indicateur, mais pour la 0ème fenêtre, il n'est pas prévu d'afficher ce nom dans une quelconque fenêtre du terminal.
Parce que le nom court ne peut être attribué qu'à l'indicateur affiché dans la fenêtre supplémentaire.
Plus précisément, personne n'interdit de l'attribuer à n'importe quel indicateur, mais pour la 0ème fenêtre, il n'est pas prévu d'afficher ce nom dans une quelconque fenêtre du terminal.
merci...
J'ai vu Dimka ! Il est sur le TOҮOTA-BB. Il m'a demandé de dire à son ami biélorusse que la question "peut, peut ne pas". Vous n'avez pas besoin de demander.
"BB" est BabyBaby depuis 14 ans ? !

Pouvez-vous me dire comment extraire les valeurs d'un indicateur zig-zag ? Comment cela est-il mis en œuvre en général ? C'est-à-dire si je veux prendre un certain extremum, et pas seulement le dernier.
Par exemple, je veux maintenant attacher ce zigzag à mon conseiller expert :
Je comprends que je dois utiliser la fonctioniCustom comme elle est habituellement appliquée pour adresser un indicateur personnalisé, mais la question est de savoir comment connecter les nœuds...