[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 28 1...212223242526272829303132333435...432 新评论 Роман 2012.12.21 14:30 #271 Dimka-novitsek: 它闪烁,变得断断续续,简而言之,完全像激光。 酷! 至于问题,从头到尾 把教科书上的拖 字诀拆开。你会找到答案的! 一般来说,不需要重新发明轮子,请看拖车,有一个Y.Dzyuban的拖网图书馆。一切正常,我检查过了。编辑任何拖网类型以适应你的需要,就这样 附加的文件: trailingfunclib.mq4 59 kb trailingfunclib.ex4 45 kb trailingexperts.zip 113 kb Dimka-novitsek 2012.12.21 14:31 #272 谢谢你!!!! [删除] 2012.12.21 17:25 #273 Roll:<Ctrl+D>。 为什么不显示呢? Алексей Тарабанов 2012.12.21 17:45 #274 因为短名称只能分配给附加窗口中显示的指标。更确切地说,没有人禁止把它分配给任何指标,但对于第0个窗口,没有规定在终端的任何窗口中显示这个名称。 [删除] 2012.12.21 17:50 #275 tara: 因为短名称只能分配给附加窗口中显示的指标。 更确切地说,没有人禁止把它分配给任何指标,但对于第0个窗口,没有规定在终端的任何窗口中显示这个名称。 谢谢... subus 2012.12.22 02:47 #276 我见过迪姆卡!他开着一辆TOҮOTA-BB。他让我告诉他的白俄罗斯朋友,这个问题 "可以,不可以"。你不需要问。 TarasBY 2012.12.22 09:31 #277 villy: 我见过迪姆卡!他乘坐的是TOҮOTA-BB。他让我告诉他的白俄罗斯朋友,这个问题 "可以,不可以"。你不需要问。 "BB "就是BabyBaby,14年了吗? subus 2012.12.22 09:50 #278 求朋友!我错拿下来了!你知道我不喜欢吃酸菜,我糊涂了!"。 Виктор 2012.12.22 12:56 #279 回复 42 laveosa 22.12.2012 14:46 |被禁止|删除 我这里有一个非常奇怪的案例。我在2004年至2012年的历史上测试顾问,结果是一个,积极的,然后我在2009年至2012年期间做了一个测试,它只是完全不同。大量的订单,超过20000的8年期间。当测试是大的,然后盈利能力条形图显示,从2009年到2012年的利润是干净和美丽的,当你测试任何小于2009年的距离,然后只是CHAOS。你是否碰巧知道它可能是什么。 提前感谢各位 :) Viktar Dzemikhau 2012.12.22 16:23 #280 你能告诉我如何从Zig-zag指标中提取数值吗?这在一般情况下是如何实施的?也就是说,如果我想拿起某个极值,而不仅仅是最后一个极值。例如,现在我想把这个人字形附加到我的专家顾问上。#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); // Получение направления на баре i if (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); }我明白我应该使用iCustom 函数,因为它通常适用于解决一个自定义指标,但问题是如何连接节点... 1...212223242526272829303132333435...432 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
它闪烁,变得断断续续,简而言之,完全像激光。
酷!
至于问题,从头到尾 把教科书上的拖 字诀拆开。你会找到答案的!
一般来说,不需要重新发明轮子,请看拖车,有一个Y.Dzyuban的拖网图书馆。一切正常,我检查过了。编辑任何拖网类型以适应你的需要,就这样
<Ctrl+D>。
为什么不显示呢?
因为短名称只能分配给附加窗口中显示的指标。
更确切地说,没有人禁止把它分配给任何指标,但对于第0个窗口,没有规定在终端的任何窗口中显示这个名称。
因为短名称只能分配给附加窗口中显示的指标。
更确切地说,没有人禁止把它分配给任何指标,但对于第0个窗口,没有规定在终端的任何窗口中显示这个名称。
谢谢...
我见过迪姆卡!他乘坐的是TOҮOTA-BB。他让我告诉他的白俄罗斯朋友,这个问题 "可以,不可以"。你不需要问。
"BB "就是BabyBaby,14年了吗?![](https://c.mql5.com/mql4/forum/2012/12/wow.gif)
![](https://c.mql5.com/mql4/forum/2012/12/punk.gif)
你能告诉我如何从Zig-zag指标中提取数值吗?这在一般情况下是如何实施的?也就是说,如果我想拿起某个极值,而不仅仅是最后一个极值。
例如,现在我想把这个人字形附加到我的专家顾问上。
我明白我应该使用iCustom 函数,因为它通常适用于解决一个自定义指标,但问题是如何连接节点...