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

 

안녕하세요! ArrayMo(f-I는 밀도 곡선의 최대값을 반환함) 함수를 이해하도록 도와주세요.

 double ArrayMo ( double & x [] , int d = 4 ) {
   double e , s = 0 ;
   double m [][ 2 ] ;             // временный массив:
                             //  столбец 1 - количество значений
                             //  столбец 2 - значения
   int      i , k = ArraySize ( x ) ;
   int      n ;                   // номер строки временного массива m
   int      r ;                   // количество строк во временном массиве m

   if ( k > 0 ) {
     for ( i = 0 ; i < k ; i ++ ) {
       e = NormalizeDouble ( x [ i ] , d ) ;
       n = ArraySearchDouble ( m , e ) ;
       if ( n < 0 ) {
         r = ArrayRange ( m , 0 ) ;
         ArrayResize ( m , r + 1 ) ;
         m [ r ][ 0 ] ++;
         m [ r ][ 1 ] = e ;
       } else m [ n ][ 0 ] ++;
     }
     ArraySort ( m , WHOLE_ARRAY , 0 , MODE_DESCEND ) ;
     s = m [ 0 ][ 1 ] ;
   } else Print ( " ArrayMo(): Массив пуст! " ) ;

   return ( s ) ;
}

다음과 같은 질문이 생겼습니다.

1. 임시 배열을 만드는 목적은 무엇입니까?

 m [][ 2 ]

2. 임시 배열의 값을 가져오는 것이 명확하지 않으므로 이 배열을 검색하는 방법이 명확하지 않습니다.

 n = ArraySearchDouble ( m , e )

3. 그런 다음 일반적으로 진실은 나에게 깊이 숨겨져 있습니다.))))) 값이 없음을 확인한 후 "어떤 값이 명확하지 않은지" 배열의 크기 를 결정하기 시작합니다.

나는 이 이야기의 한 줄기 빛에 대해 매우 감사할 것입니다))))

 
Chanterelle , ArraySearchDouble 함수의 코드는 어떻습니까? 그것이 없으면 프로그램이 무엇을 하는지 이해하는 것이 훨씬 더 어려울 것입니다)
 

안녕하세요! 다음은 후행 정지 기능입니다. 올바른지 확인하십시오. 그러면 내 코드가 극적으로 변경될 것이며 변경을 시작할 때 오류를 처리하기 어려울 것입니다.

 void TrailStop( int ticket, int TStop)                           //ф-ция трейлинг стопа, TStop-расстояние в пп
   {
     if (TStop> 0 )
      {
       OrderSelect (ticket, SELECT_BY_TICKET);
       if ( OrderType ()==OP_BUY)
         {
           if (Bid - OrderOpenPrice ()> Point *TStop)
            {
             if ( OrderStopLoss ()<Bid- Point *TStop)
               {
                 OrderModify ( OrderTicket (), OrderOpenPrice (), 
                Bid- Point *TStop, OrderTakeProfit (), 0 , Blue );
                 return ;
               }
             else { }
            }
             else { }
         }
       else if ( OrderType ()==OP_SELL)
         {
           if ( OrderOpenPrice () - Ask> Point *TStop)
            {
             if ( OrderStopLoss ()>Ask + TStop* Point )
               {
                 OrderModify ( OrderTicket (), OrderOpenPrice (), 
                Ask+ Point *TStop, OrderTakeProfit (), 0 , Blue );
                 return ;
               }
             else { }
            }
           else { }
         }
       else { }
      }
     else { }
    }
 
gogent :

안녕하세요! 다음은 후행 정지 기능입니다. 올바른지 확인하십시오. 그러면 내 코드가 극적으로 변경될 것이며 변경을 시작할 때 오류를 처리하기 어려울 것입니다.

Stoplevel을 고려하지 마십시오. ECN/NDD가 없으면 " bad stop " 오류가 발생할 수 있습니다.

그리고 일반적으로 OrderModify 후에 만일을 대비하여 모든 오류를 처리하는 것이 좋습니다.

 
alsu :
Chanterelle , ArraySearchDouble 함수의 코드는 어떻습니까? 그것이 없으면 프로그램이 무엇을 하는지 이해하는 것이 훨씬 더 어려울 것입니다)


이것들은 모두 KimIV의 기능입니다. 저는 그것들을 이해하려고 노력하고 있습니다. 코드는 다음과 같습니다.


이 함수는 배열의 요소를 double 값으로 검색하고 발견된 요소의 인덱스 또는 -1 을 반환합니다. 이 함수는 하나의 요소만 찾고 결과가 양수이면 검색을 종료합니다.

  • m - 요소를 검색할 배열입니다.
  • e - 배열 m 에서 찾을 double 값입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble ( double & m [] , double e ) {
   for ( int i = 0 ; i < ArraySize ( m ) ; i ++ ) {
     if ( m [ i ] == e ) return ( i ) ;
   }
   return ( - 1 ) ;
}
 
프로, 내가 뭘 잘못하고 있는지 말해줘? 새 막대 가 나타날 때 표시기로 창을 다시 그려야 합니다. if (바 != 프리바) WindowRedraw();
아무것도 주지 않는다. PreBars는 이전 눈금의 막대 수와 같습니다. 잘못된 위치나 잘못된 기능에 삽입하고 있는 것은 아닐까요?
 
kon12 :
프로, 내가 뭘 잘못하고 있는지 말해줘? 새 막대가 나타날 때 표시기로 창을 다시 그려야 합니다. if (바 != 프리바) WindowRedraw();
아무것도 주지 않는다. 내가 거기에 삽입하지 않았거나 뭔가 잘못 되었습니까?

무언가를 다시 그리 려면 먼저 에 그려야 합니다 . 무엇을 그리고 어떻게 그리는가?
 
sergeev :

무언가를 다시 그리 려면 먼저 에 그려야 합니다 . 무엇을 그리고 어떻게 그리는가?


모든 것이 완벽하게 그려져 있고 지표는 지그재그를 기반으로하지만 새로운 막대 의 출현으로 전체 곡선을 다시 그려야하며 새 막대에 지표의 값만 추가됩니다 ...

정수() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);

 
kon12 :


모든 것이 완벽하게 그려져 있고 지표는 지그재그를 기반으로하지만 새로운 막대의 출현으로 전체 곡선을 다시 그려야하며 새 막대에 지표의 값만 추가됩니다 ...

정수() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);

WindowRedraw()는 그래픽 객체를 다시 그립니다. 버퍼와 관련이 없습니다.
 
Zhunko :
WindowRedraw()는 그래픽 객체를 다시 그립니다. 버퍼와 관련이 없습니다.

이해 ... 다시 그리는 다른 방법이 있다면?