[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 28

 
Dimka-novitsek:
它闪烁,变得断断续续,简而言之,完全像激光。

酷!

至于问题,从头到尾教科书上的拖 字诀拆开。你会找到答案的!

一般来说,不需要重新发明轮子,请看拖车,有一个Y.Dzyuban的拖网图书馆。一切正常,我检查过了。编辑任何拖网类型以适应你的需要,就这样

附加的文件:
 
谢谢你!!!!
 
Roll:
<Ctrl+D>。


为什么不显示呢?

 

因为短名称只能分配给附加窗口中显示的指标。

更确切地说,没有人禁止把它分配给任何指标,但对于第0个窗口,没有规定在终端的任何窗口中显示这个名称。

 
tara:

因为短名称只能分配给附加窗口中显示的指标。

更确切地说,没有人禁止把它分配给任何指标,但对于第0个窗口,没有规定在终端的任何窗口中显示这个名称。


谢谢...
 
我见过迪姆卡!他开着一辆TOҮOTA-BB。他让我告诉他的白俄罗斯朋友,这个问题 "可以,不可以"。你不需要问。
 
villy:
我见过迪姆卡!他乘坐的是TOҮOTA-BB。他让我告诉他的白俄罗斯朋友,这个问题 "可以,不可以"。你不需要问。

"BB "就是BabyBaby,14年了吗?

 
求朋友!我错拿下来了!你知道我不喜欢吃酸菜,我糊涂了!"。
 

42
laveosa 22.12.2012 14:46 |被禁止|删除
我这里有一个非常奇怪的案例。我在2004年至2012年的历史上测试顾问,结果是一个,积极的,然后我在2009年至2012年期间做了一个测试,它只是完全不同。大量的订单,超过20000的8年期间。当测试是大的,然后盈利能力条形图显示,从2009年到2012年的利润是干净和美丽的,当你测试任何小于2009年的距离,然后只是CHAOS。你是否碰巧知道它可能是什么。 提前感谢各位 :)
 

你能告诉我如何从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 函数,因为它通常适用于解决一个自定义指标,但问题是如何连接节点...