KimIV의 유용한 기능 - 페이지 96

 
KimIV >> :

아무것도 추가할 필요가 없습니다... 이미 줄을 서 있습니다.


정말 감사합니다 !

당신의 지부는 인터넷의 보물입니다.

 
KimIV >> :

아무것도 추가할 필요가 없습니다... 이미 줄을 서 있습니다.


나는 Igor와 이 스레드에서 정기적으로 글을 쓰는 모든 사람들에게 호소합니다. 실을 뒤져보니 추세의 각도를 결정하는 함수를 못찾았는데 6개 이상의 캔들에 15분에 추세의 각도를 결정하는 함수가 있다면 올려주세요.
 

하지만 빼낼 수 있는 기능이 있습니다(실행).

프로필

견본

???

 
mazepa писал(а) >>

나는 Igor와 이 스레드에서 정기적으로 글을 쓰는 모든 사람들에게 호소합니다. 실을 뒤져보니 추세의 각도를 결정하는 함수를 찾지 못했는데 6개 이상의 캔들에 15분에 추세의 각도를 결정하는 함수가 있다면 올려주세요.

각도가 아니라 가격 변화율을 말할 수 있습니다.

 

인사말! 당신의 노고에 감사드립니다. 당신은 훌륭한 일을 하고 있습니다.

표시기를 만들고 있는데 EquationDirect 함수가 때때로 선 교차점을 잘못 계산합니다.

차트에 있는 라인 포인트를 계산하여 명확성을 위해 테스트 지표에 삽입했습니다. 함수는 오프셋과의 교차점을 올바르게 계산하지 않습니다. 즉, 어떤 각도에서 함수의 공식이 맞지 않으며 이러한 계산이 발생할 때 다른 공식에 따라 만들어지도록 어떻게든 수정해야 합니다. 임호

 #define CPR "DECIDE"
#define mName "Signal"

#property indicator_chart_window

extern int SignalBars = 30 ;              // кол-во баров для сигнала
extern int TrendBars = 300 ;              // кол-во баров для т. линий
extern color CostMaxColor = FireBrick ;   // цвет максимальной цены
extern color CostMinColor = SteelBlue ;   // цвет минимальной цены
extern color VLineColor = DarkSlateGray ; // цвет минимальной цены
extern color TrendColor = Gray ;          // цвет трендовых линий
extern color OrderColor = Green ;         // цвет сигнала ордера
extern color LabelColor = Navy ;          // цвет меток

// Инициализация - функция начальных установок
int init ( ) {
   if ( ! IsDemo ( ) ) return ( 0 ) ;
   if ( SignalBars < 30 ) SignalBars = 30 ;
}

// ДеИнициализация - функция завершения работы
int deinit ( ) {
   ObjectDelete ( "UpTrend" ) ;
   ObjectDelete ( "DownTrend" ) ;
   ObjectDelete ( "MaxCost" ) ;
   ObjectDelete ( "MinCost" ) ;
   ObjectDelete ( "SignOrder" ) ;
   ObjectDelete ( "Trend" ) ;
   ObjectDelete ( "Volume" ) ;
}

// СТАРТ - основная функция обработки
int start ( ) {
   int bar ;
   double val , upb , t1 , t2 , h1 , h2 ;
   val = 173 ;
   bar = iHighest ( NULL , 0 , MODE_HIGH , 100 , 0 ) ;
   t1 = Time [ 0 ] - 273600 ;
   h1 = High [ bar ] ;
   t2 = t1 - 518400 ;
   h2 = High [ bar ] - val * Point ;
   SetTLine ( TrendColor , "DownTrend" , t2 , h2 , t1 , h1 , True , STYLE_SOLID , 2 ) ;
   upb = EquationDirect ( t1 , h1 , t2 , h2 , Time [ 0 ] ) ;
   SetArrow ( 6 , DarkViolet , "UpBorder" , Time [ 0 ] , upb , 2 ) ;
   SetVLine ( VLineColor , "VLine" , Time [ 0 ] , STYLE_SOLID ) ;
}

// --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ---

// вертикальная временная линия
void SetVLine ( color cl , string nm = "" , datetime t1 = 0 , int st = 0 , int wd = 1 ) {
// Параметры:
// cl - цвет линии
// nm - наименование               ("" - время открытия текущего бара)
// t1 - время                      (0  - время открытия текущего бара)
// st - стиль линии                (0  - простая линия)
// wd - ширина линии               (1  - по умолчанию)

  if ( nm = = "" ) nm = DoubleToStr ( Time [ 0 ] , 0 ) ;
  if ( t1 < = 0 ) t1 = Time [ 0 ] ;
  if ( ObjectFind ( nm ) < 0 ) ObjectCreate ( nm , OBJ_VLINE , 0 , 0 , 0 ) ;
  ObjectSet ( nm , OBJPROP_TIME1 , t1 ) ;
  ObjectSet ( nm , OBJPROP_COLOR , cl ) ;
  ObjectSet ( nm , OBJPROP_STYLE , st ) ;
  ObjectSet ( nm , OBJPROP_WIDTH , wd ) ;
}
// установка трендовой линии
void SetTLine ( color cl , string nm = "" , datetime t1 = 0 , double p1 = 0 , datetime t2 = 0 , double p2 = 0 , bool ry = False , int st = 0 , int wd = 1 ) {
// Параметры:
// cl - цвет линии
// nm - наименование               (  ""  - время открытия текущего бара)
// t1 - время открытия бара        (  0   - Time[10]
// p1 - ценовой уровень            (  0   - Low[10])
// t2 - время открытия бара        (  0   - текущий бар)
// p2 - ценовой уровень            (  0   - Bid)
// ry - луч                        (False - по умолчанию)
// st - стиль линии                (  0   - простая линия)
// wd - ширина линии               (  1   - по умолчанию)

  if ( nm = = "" ) nm = DoubleToStr ( Time [ 0 ] , 0 ) ;
  if ( t1 < = 0 ) t1 = Time [ 10 ] ; if ( t2 < = 0 ) t2 = Time [ 0 ] ;
  if ( p1 < = 0 ) p1 = Low [ 10 ] ; if ( p2 < = 0 ) p2 = Bid ;
  if ( ObjectFind ( nm ) < 0 ) ObjectCreate ( nm , OBJ_TREND , 0 , 0 , 0 , 0 , 0 ) ;
  ObjectSet ( nm , OBJPROP_TIME1 , t1 ) ;
  ObjectSet ( nm , OBJPROP_PRICE1 , p1 ) ;
  ObjectSet ( nm , OBJPROP_TIME2 , t2 ) ;
  ObjectSet ( nm , OBJPROP_PRICE2 , p2 ) ;
  ObjectSet ( nm , OBJPROP_COLOR , cl ) ;
  ObjectSet ( nm , OBJPROP_RAY , ry ) ;
  ObjectSet ( nm , OBJPROP_STYLE , st ) ;
  ObjectSet ( nm , OBJPROP_WIDTH , wd ) ;
}
// вычисление точки пересечения
double EquationDirect ( double x1 , double y1 , double x2 , double y2 , double x ) {
// Параметры:
// x1,y1 - координаты первой точки,
// x2,y2 - координаты второй точки,
// x     - значение, для которого вычислить Y

  if ( x2 = = x1 ) return ( y1 ) ;
  else
  return ( NormalizeDouble ( ( y2 - y1 ) / ( x2 - x1 ) * ( x - x1 ) + y1 , Digits ) ) ;
}
// установка значька
void SetArrow ( int cd , color cl , string nm = "" , datetime t1 = 0 , double p1 = 0 , int sz = 0 ) {
// Параметры:
// cd - код значка
// cl - цвет значка
// nm - наименование               ("" - время открытия текущего бара)
// t1 - время открытия бара        (0  - текущий бар)
// p1 - ценовой уровень            (0  - Bid)
// sz - размер значка              (0  - по умолчанию)

  if ( nm = = "" ) nm = DoubleToStr ( Time [ 0 ] , 0 ) ;
  if ( t1 < = 0 ) t1 = Time [ 0 ] ; if ( p1 < = 0 ) p1 = Bid ;
  if ( ObjectFind ( nm ) < 0 ) ObjectCreate ( nm , OBJ_ARROW , 0 , 0 , 0 ) ;
  ObjectSet ( nm , OBJPROP_TIME1 , t1 ) ;
  ObjectSet ( nm , OBJPROP_PRICE1 , p1 ) ;
  ObjectSet ( nm , OBJPROP_ARROWCODE , cd ) ;
  ObjectSet ( nm , OBJPROP_COLOR , cl ) ;
  ObjectSet ( nm , OBJPROP_WIDTH , sz ) ;
}
 

화면

오페라를 통해 추가, 익스플로러에 추가되지 않음

 
그래프에서 볼 수 있는 극한 시간(왼쪽부터)을 어떻게 확인할 수 있습니까?
 
DECIDE писал(а) >>
그래프에서 볼 수 있는 극한 시간(왼쪽부터)을 어떻게 확인할 수 있습니까?

시간 현재()

 
KimIV писал(а) >>

시간 현재()

이것은 오른쪽에 있는 것 같습니다.

 

이미 알아 낸

교차점이 오프셋과 함께 발생한다는 사실에 의해 이것은 EquationDirect 기능 때문이 아니라 계산이 올바르게 수행됩니다. 이것은 터미널의 일종의 버그 때문이며 선은 오프셋으로 그려집니다

그래서 먼저 Time[0]과의 교차점을 결정한 다음 시작점에서 Time[0]과의 교차점까지 추세선을 그려야 했습니다. 이 경우 모든 것이 잘 작동합니다.

지표 신호의 스위치 아이콘( 차트 눈금이 변경될 때)의 위치를 차트에서 가장 오른쪽 시간이 필요합니다. 즉, 가장 오른쪽 시간을 넘어 스위치 아이콘을 이동하면, 즉 아직 도착하지 않은 아이콘이 전환됩니다 (주문을 위해 신호를 켜거나 끌 수 있습니다. 즉, 신호를 전환하여 어드바이저의 거래를 허용하거나 금지할 수 있습니다)

맨 왼쪽 시간은 다음과 같이 정의됩니다. 차트에서 볼 수 있는 맨 끝 막대를 얻습니다.

WindowFirstVisibleBar() 및 Time[WindowFirstVisibleBar()]에서 시간을 가져옵니다.