[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 28

 
Dimka-novitsek:
Parpadea, se vuelve intermitente, y es como un láser en conjunto, en resumen.

¡Genial!

En cuanto a la pregunta, desmonte el arrastre de los libros de texto de principio a fin. Encontrarás la respuesta.

Y en general, no es necesario reinventar la rueda, ver el trailer, hay una biblioteca de arrastre de Y.Dzyuban. Todo funciona, lo he comprobado. Edita cualquier tipo de arrastre para adaptarlo a tus necesidades y ¡ya está!

Archivos adjuntos:
 
¡¡¡¡Gracias!!!!
 
Roll:
<Ctrl+D>.


¿Por qué no se muestra?

 

Porque el nombre corto sólo puede asignarse al indicador que aparece en la ventana adicional.

Más concretamente, nadie prohíbe asignarlo a cualquier indicador, pero para la ventana 0-ésima no está previsto mostrar este nombre en ninguna ventana del terminal.

 
tara:

Porque el nombre corto sólo puede asignarse al indicador que aparece en la ventana adicional.

Más concretamente, nadie prohíbe asignarlo a cualquier indicador, pero para la ventana 0-ésima no está previsto mostrar este nombre en ninguna ventana del terminal.


Gracias...
 
¡He visto a Dimka! Está conduciendo un TOҮOTA-BB. Me pidió que le dijera a su amigo bielorruso que la pregunta "puede, puede que no". No es necesario preguntar.
 
villy:
¡He visto a Dimka! Está montando en el TOҮOTA-BB. Me pidió que le dijera a su amigo bielorruso que la pregunta "puede, puede que no". No es necesario preguntar.

¡¿"BB" es BabyBaby desde hace 14 años?!

 
¡Pide a los amigos! ¡Lo bajé por error! ¡Sabes que no me gusta el chucrut, me confundí!
 

42
laveosa 22.12.2012 14:46 | prohibido| borrar
Tengo un caso muy extraño. Estoy probando el asesor en la historia de 2004 a 2012 y el resultado es uno, positivo, y luego hago una prueba en el período de 2009 a 2012 y es sólo completamente diferente. un gran número de órdenes, más de 20000 para un período de 8 años. cuando la prueba es grande, entonces el gráfico de barras de rentabilidad muestra que de 2009 a 2012 el beneficio es limpio y hermoso y cuando se prueba cualquier distancia menos de 2009 entonces sólo CAOS. ¿Sabe por casualidad qué podría ser? Gracias de antemano chicos :)
 

¿Pueden decirme cómo extraer los valores de un indicador en zig-zag? ¿Cómo se aplica esto en general? Es decir, si quiero recoger un determinado extremo, no sólo el último.

Por ejemplo, ahora quiero adjuntar este zigzag a mi Asesor Experto:

#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);
}

Entiendo que debo utilizar la funcióniCustom como se suele aplicar para dirigir un indicador personalizado, pero la cuestión es cómo conectar los nodos...