[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 28

 
Dimka-novitsek :
깜박이고 간헐적이며 레이저처럼 완전히 짧아집니다.

엄청난!

문제에 대해 - 교과서의 트롤을 ~에서 분해하십시오. 답을 찾아라!

일반적으로 바퀴를 재발명할 필요가 없습니다. 예고편을 참조하세요. Y. Dzyuban의 트롤 라이브러리가 있습니다. 모든 것이 작동합니다. 확인했습니다. 필요한 경우 모든 유형의 트롤을 필요에 따라 규칙적으로 지정하면 됩니다!

 
감사해요!!!!
 
Roll :
<Ctrl+D>


왜 표시되지 않습니까?

 

짧은 이름은 추가 창에 표시되는 지표에만 할당할 수 있기 때문입니다.

더 정확히 말하면, 아무도 그것을 어떤 표시기에 할당하는 것을 금지하지 않지만, 0번째 창의 경우 이 이름은 터미널 창에 표시하기 위해 제공되지 않습니다.

 
tara :

짧은 이름은 추가 창에 표시되는 지표에만 할당할 수 있기 때문입니다.

더 정확히 말하면, 아무도 그것을 어떤 표시기에 할당하는 것을 금지하지 않지만, 0번째 창의 경우 이 이름은 터미널 창에 표시하기 위해 제공되지 않습니다.


고맙습니다..
 
디마를 보았다! 그는 TOYOTA-BB를 탄다. 그는 벨로루시인 친구에게 "가능하다, 불가능하다"라는 질문을 하라고 나에게 부탁했다. 물어보셔도 되고 안하셔도 됩니다.
 
villy :
디마를 보았다! 그는 TOYOTA-BB를 탄다. 그는 벨로루시인 친구에게 "가능하다, 불가능하다"라는 질문을 하라고 나에게 부탁했다. 물어보셔도 되고 안하셔도 됩니다.

'비비'는 14세 베이비베이비?!

 
친구를 부탁해! 내가 실수로 부숴버렸어! 내가 신맛을 좋아하지 않아, 속아서!
 

42
라베오사 22.12.2012 14:46 | 금지 편집 | 삭제
좋은 하루에요. 나는 매우 이상한 경우를 가지고, 도울 수 없습니다. 나는 2004년부터 2012년까지의 역사에 대해 고문을 테스트했고 결과는 1, 양성이었고, 그리고 나서 2009년부터 2012년까지의 기간 동안 테스트를 했는데 완전히 달랐습니다. 8년 동안 20,000개 이상의 많은 주문. 테스트가 크면 수익성 히스토그램이 2009년부터 2012년까지 이익이 깨끗하고 아름답다는 것을 보여주고, 2009년 미만의 거리를 테스트하면 그냥 CHAOS입니다. 당신은 그것이 무엇인지 알지 못합니다. 미리 감사합니다 여러분 :)
 

지그재그 표시기에서 값을 가져오는 방법을 알려주세요. 일반적으로 어떻게 구현됩니까? 저것들. 내가 마지막이 아니라 특정 극단을 잡고 싶다면.

예를 들어 지금 이 지그재그를 내 Expert Advisor에 연결하고 싶습니다.

 #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 기능을 사용해야 하는 것은 이해하지만, 어떻게 상단에 집착을 하느냐가 문제입니다...