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

 
기능을 약간 수정했습니다. 이제 교차가 실패 없이 계산됩니다.
입력 매개변수: |
nm1 - 첫 번째 줄 이름 |

nm2 - 두 번째 줄 이름

출구 M에서 물가 수준입니다.

 void Middle( string nm1, string nm2)
  {
   double x1, x2, x3, x4;
   double y1, y2, y3, y4;
   double k1, k3;
  
   if ( ObjectFind (nm1)== 0 && ObjectFind (nm2)== 0 )
    {
    y1= ObjectGet (nm1, OBJPROP_PRICE1);
    y2= ObjectGet (nm1, OBJPROP_PRICE2);
    x1= ObjectGetShiftByValue (nm1, y1);
    x2= ObjectGetShiftByValue (nm1, y2);
    
    y3= ObjectGet (nm2, OBJPROP_PRICE1);
    y4= ObjectGet (nm2, OBJPROP_PRICE2);
    x3= ObjectGetShiftByValue (nm2, y3);
    x4= ObjectGetShiftByValue (nm2, y4);
    
    k1=(y2-y1)/(x2-x1); 
    k3=(y4-y3)/(x4-x3);
    
     if (k1 != k3)
      {
      T = (y1 - y3 + k3*x3 - k1*x1)/(k3 - k1);
      M = y1 + k1*(T - x1);
      }
    }
   return ( 0 );
  }

추신. 여기에 내 코드를 게시한 것에 대해 지점 작성자에게 사과드립니다. 나는 누군가가 교차로로 고통받을 수도 있다고 생각했습니다 ...

 
Shuba : 다른 사람도 교차로에서 고민하고 있는 건 아닐까...

나는 기억했다 (이미 연대기 에서):

Novozar 23.07.2011 12:18
상황에서 탈출구를 제안하십시오. 평균 방향 이동 지수 표시기가 있으며 점선을 그립니다. 선의 교차점을 잡고 싶습니다. 하지만 점으로 인해 정상적으로 교차로를 잡기가 불가능하다.
 
Shuba :

추신. 여기에 내 코드를 게시한 것에 대해 지점 작성자에게 사과드립니다. 나는 누군가가 교차로로 고통받을 수도 있다고 생각했습니다 ...

그러면 그렇게 해. 그를 용서하자...
 
Shuba :
기능을 약간 수정했습니다. 이제 교차가 실패 없이 계산됩니다.
입력 매개변수: |
nm1 - 첫 번째 줄 이름 |

nm2 - 두 번째 줄 이름

출구 M에서 물가 수준입니다.

추신. 여기에 내 코드를 게시한 것에 대해 지점 작성자에게 사과드립니다. 나는 누군가가 교차로로 고통받을 수도 있다고 생각했습니다 ...

글쎄, 아마도 이 함수가 이 동일한 가격 수준(이전 버전에서와 같이)을 반환하도록 하시겠습니까? 또한 코드에 선언되지 않은 "T" 변수 가 있습니다.
 
TarasBY :
글쎄, 아마도 이 함수가 이 동일한 가격 수준(이전 버전에서와 같이)을 반환하도록 하시겠습니까? 또한 코드에 선언되지 않은 "T" 변수가 있습니다.

글쎄, 그녀는 그것을 반환)

선언되지 않은 변수에 대해 - 죄송합니다. 나는 나 자신을 수정하고 있습니다.

더블 M - 가격 교차 수준. 맨 처음에 이 변수를 선언합니다.

 void Middle( string nm1, string nm2)
  {
   double x1, x2, x3, x4;
   double y1, y2, y3, y4;
   double k1, k3;
  
   if ( ObjectFind (nm1)== 0 && ObjectFind (nm2)== 0 )
    {
    y1= ObjectGet (nm1, OBJPROP_PRICE1);
    y2= ObjectGet (nm1, OBJPROP_PRICE2);
    x1= ObjectGetShiftByValue (nm1, y1);
    x2= ObjectGetShiftByValue (nm1, y2);
    
    y3= ObjectGet (nm2, OBJPROP_PRICE1);
    y4= ObjectGet (nm2, OBJPROP_PRICE2);
    x3= ObjectGetShiftByValue (nm2, y3);
    x4= ObjectGetShiftByValue (nm2, y4);
    
    k1=(y2-y1)/(x2-x1); 
    k3=(y4-y3)/(x4-x3);
    
     if (k1 != k3)
      {
       double T = (y1 - y3 + k3*x3 - k1*x1)/(k3 - k1);
      M = y1 + k1*(T - x1);
      }
    }
   return ( 0 );
  }

예고편에서 - 기능이 어떻게 작동하는지 보기 위한 고문.

 

뭔가 로드되지 않았습니다...

파일:
proba_per_1.mq4  11 kb
 
Shuba :

뭔가 로드되지 않았습니다...


당신은 물을 더럽히지 않을 것입니다, IMHO - 여기 에서 설명과 함께 함수 라이브러리에 폭탄을 터뜨릴 것이고 그게 전부입니다 ...

누가 그것을 필요로 하는지 - 검색을 통해 찾을 것입니다.

 

ClosePosByTakeProfitZone() 함수.

이 기능은 가격이 TakeProfit에 가까운 영역에서 짓밟히거나 이 영역에서 일정 수의 막대를 벗어나려고 하는 경우 시장 가격으로 포지션을 닫습니다. 마감 위치 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 도구 이름. 이 매개변수를 설정하면 이 기능은 지정된 기기의 위치만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.
  • tf - 가격이 TakeProfit 영역을 짓밟고 있는 동안 막대를 계산할 차트 타임프레임입니다. 기본값 0 - 현재 기간.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.04.2012                                                     |
//|  Описание : Закрытие позиций при нахождении цены в зоне TakeProfit         |
//|             в течение заданного количества баров,                          |
//|             а также при попыте выйти из этой зоны.                         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    tf - таймфрейм                  ( 0   - текущий таймфрейм)              |
//+----------------------------------------------------------------------------+
void ClosePosByTakeProfitZone( string sy= "" , int op=- 1 , int mn=- 1 , int tf= 0 ) {
   double pa, pb, po, pp, tp;
   int     i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i=k- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
         if ((mn< 0 || OrderMagicNumber ()==mn) && OrderTakeProfit ()> 0 ) {
          po= MarketInfo ( OrderSymbol (), MODE_POINT);
           if (po== 0 ) Message( "В обзоре рынка отсутствует символ " + OrderSymbol ());
           else {
             if ( OrderType ()==OP_BUY) {
               RefreshRates ();
              pb= MarketInfo ( OrderSymbol (), MODE_BID);
              pp= iLow ( OrderSymbol (), tf, iLowest ( OrderSymbol (), tf, MODE_LOW, TP.ZoneBars, 0 ));
              tp= OrderTakeProfit ()-TP.ZonePoint*po;
               if (pp>tp || (pb<tp && ( iHigh ( OrderSymbol (), tf, 0 )>tp) || ( iHigh ( OrderSymbol (), tf, 1 )>tp))) ClosePosBySelect();
            }
             if ( OrderType ()==OP_SELL) {
               RefreshRates ();
              pa= MarketInfo ( OrderSymbol (), MODE_ASK);
              pp= iHigh ( OrderSymbol (), tf, iHighest ( OrderSymbol (), tf, MODE_HIGH, TP.ZoneBars, 0 ));
              tp= OrderTakeProfit ()+TP.ZonePoint*po;
               if (pp<tp || (pb>tp && ( iLow ( OrderSymbol (), tf, 0 )<tp) || ( iLow ( OrderSymbol (), tf, 1 )<tp))) ClosePosBySelect();
            }
          }
        }
      }
    }
  }
}
ClosePosByTakeProfitZone() 함수를 테스트하기 위한 Expert Advisor가 첨부되어 있습니다. 테스터에서와 같이 테스트할 수 있습니다. 뿐만 아니라 온라인.
 

좋은 저녁입니다, 이고르!

얼마 전에 귀하의 기능을 연구하기 시작했습니다. 36페이지에서 기능을 잘 이해하지 못했습니다. 이해하는 데 도움을 주세요.


GetArrowInterval() 함수.

//+----------------------------------------------- --------------------+
//| 신호 포인터 설정 간격을 반환합니다. |
//+----------------------------------------------- --------------------+
int GetArrowInterval() {
정수 p = 마침표();

스위치 (p) {
사례 1: return(4);
사례 5: return(5);
사례 15: return(6);
사례 30: return(8);
사례 60: return(10);
케이스 240: return(20);
사례 1440: return(40);
사례 10080: return(80);
케이스 43200: return(150);
}
}

저것들. 이 함수는 SetArrow() 함수를 사용하여 화살표를 설정하는 데 사용되었습니다. 즉, ObjectCreate(nm, OBJ_ARROW , 0, 0,0) 행의 가격 수준 대신 어떻게 이런 일이 발생했는지 알려주십시오. 반환된 값은 평균( 4,5,6,8,10....)


함수의 새 버전도 불분명했습니다.


//+----------------------------------------------- ------------------------------+
//| 저자 : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------- ------------------------------+
//| 버전: 2007년 10월 12일 |
//+----------------------------------------------- ------------------------------+
//| 설명: 신호 포인터 설정 간격을 반환합니다. |
//| 옵션: |
//| pr - 가격 창 크기에 대한 백분율 |
//+----------------------------------------------- ------------------------------+
int GetArrowInterval(int pr=7) {
(pr<=0) pr=7인 경우;

return((WindowPriceMax()-WindowPriceMin())/100*pr/포인트);


WindowPriceMax() 함수는 수직 스케일의 최대값을 반환합니다. 이것은 가격의 최대 가치입니다. 그러나 어떤 기간 동안입니까?

그리고 노고에 감사드립니다....

 
Lisi4ka330 :

얼마 전에 귀하의 기능을 연구하기 시작했습니다. 36페이지에서 기능을 잘 이해하지 못했습니다. 이해하는 데 도움을 주세요.

저것들. 이 함수는 SetArrow() 함수를 사용하여 화살표를 설정하는 데 사용되었습니다. 즉, ObjectCreate(nm, OBJ_ARROW, 0, 0,0) 행의 가격 수준 대신 어떻게 이런 일이 발생했는지 알려주십시오 ...

이 기능의 목적을 잘못 이해했습니다. 그들은 가격으로 작동하지 않고 아이콘을 넣지 않고 현재 시간 프레임에 따라 포인트 단위로 거리를 반환합니다. 아래 그림을 참조하십시오

비슷한 아이콘을 가격에 가깝지 않고 일정 거리에 놓고 예를 들어 H1 시간대 차트에 놓고 M1으로 전환하면 아이콘이 표시되지 않을 가능성이 큽니다. 눈금이 변경되고 아이콘이 훨씬 아래 또는 위로 이동합니다. 언급한 기능은 아이콘이 언제든지 차트에 표시되도록 설계되었습니다.

리시4카330 :

...반환 값(4,5,6,8,10....)은 무엇을 의미합니까?

현재 시간대에 따른 거리(포인트 단위).


리시4카330
:

WindowPriceMax() 함수는 수직 스케일의 최대값을 반환합니다. 이것은 가격의 최대 가치입니다. 그러나 어떤 기간 동안입니까?

전혀... 현재 창에서만. 예를 들어 아래 사진에서 최고가 는 97.35