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

 
친애하는 이고르! e-CloseByPercentProfit.mq4 Expert Advisor에 추가하여 그것이 설치된 차트의 쌍에 대해 TP와 SL을 설정하도록 할 수 있습니까?인터넷 연결이 자주 끊어지기 때문에 이것은 필요합니다.
 

모두에게 좋은 하루.

기능에 대한 질문


//+------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                        |
//|  Описание : Возвращает количество позиций.      |
//+------------------------------------------------------------------+

int NumberOfPositions ( string sy = "" , int op = - 1 , int mn = - 1 ) {
  int i , k = OrdersTotal ( ) , kp = 0 ;  if ( sy = = "0" ) sy = Symbol ( ) ;
  for ( i = 0 ; i < k ; i + + )                                    {
    if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) )      {
      if ( OrderSymbol ( ) = = sy | | sy = = "" )                   {
        if ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) {
          if ( op < 0 | | OrderType ( ) = = op )                   {
            if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) kp + + ;
          } } } } }  return ( kp ) ; }  
          

다중 통화 고문이 있습니다. 쌍은 외부 매개변수에서 설정됩니다. 그의 마법으로 (각 쌍에 대해).

각 악기의 진입 조건은 다음과 같습니다.
if ( NumberOfPositions(Symbol_1, -1,Magic_1)<1){//если нет открытых
//позиций по 1-му инструменту, 
또는(두 번째 쌍의 경우)
if ( NumberOfPositions(Symbol_2, -1,Magic_2)<1){//если нет открытых
//позиций по 2-му инструменту, проверяем ОСТАЛЬНЫЕ условия

어제 EURUSD라는 두 가지 기호를 모두 로드했는데 아침에 두 경우 모두 신호가 있었던 것 같기는 하지만 하나의 거래만 열린 것을 알았습니다.

그러다 문득 떠올랐다. 기능은 무엇입니까

NumberOfPositions ( string sy = "" , int op = - 1 , int mn = - 1 )
먼저 심볼 로 오픈 포지션 을 확인합니다. 그리고 다른 모든 것.

다시 말해서, EIRUSD 상품에 대해 이미 열린 포지션(이 Expert Advisor에 의해)이 있는 경우, 다른 알고리즘에 따라 다른 마법을 사용하더라도 두 번째 포지션이 열리지 않습니까?

사실인지 아닌지 알려주세요.

아니면 내 추론이 틀렸나요? - 그리고 함수는 주어진 모든 기준을 " 완전히 " 평가하고 차례로 평가하지 않습니다...


 

나는 이 함수를 자주 사용하는데, 입력 매개변수에 따라 모든 것을 반환합니다. 함수에 의해 반복되는 위치는 매개변수별로 순차적으로 정렬됩니다. 예, 직접 확인하십시오.

 int NumberOfPositions ( string sy = "" , int op = - 1 , int mn = - 1 ) {
   int i , k = OrdersTotal ( ) , kp = 0 ;

   if ( sy = = "0" ) sy = Symbol ( ) ;
   for ( i = 0 ; i < k ; i + + ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ) {
       if ( OrderSymbol ( ) = = sy | | sy = = "" ) { //далее внутри символа
         if ( OrderType ( ) = = OP_BUY | | OrderType ( ) = = OP_SELL ) {
           if ( op < 0 | | OrderType ( ) = = op ) { //далее внутри типа ордера
             if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) kp + + ; //внутри магика, и только здесь позиция учтена 
           }
         }
       }
     }
   }
   return ( kp ) ;
}
 

즉, 이것은 내 Expert Advisor가 첫 번째 포지션이 열려 있는 동안 다른 마법을 사용하더라도 두 번째 EURUSD 포지션을 열 수 없다는 것을 의미합니까?

분명히 그렇게. 테스터에서도 교차 위치가없는 것처럼 보이기 때문입니다.

//------------------------------------------------ --------

 
Rita >> :

즉, 내 Expert Advisor가 첫 번째 포지션이 열려 있는 동안 다른 마법을 사용하더라도 두 번째 EURUSD 포지션을 열 수 없다는 의미입니까?...

정확히 반대입니다. :) 이것은 함수가 기호와 마법을 별도로 계산한다는 것을 의미합니다. 즉, Magic_1이 있는 EURUSD 포지션이 열리면 NumberOfPositions("EURUSD", -1, Magic_2)==0; 물론 Magic_2에 다른 EURUSD 포지션이 없는 경우입니다.

일반적으로 함수는 원칙(sy && op && mn)에 따라 열린 위치를 계산합니다. 즉, 위치는 이러한 매개변수로 계산됩니다. 하나 이상의 매개변수가 일치하지 않으면 순서가 고려되지 않으며 함수에서 이를 볼 수 없습니다.

댓글에 기능 값을 표시하면 주문 수와 기능의 올바른 작동을 실시간으로 모니터링할 수 있습니다. 알고리즘의 잘못된 작동에 대한 이유는 EA 코드에 있을 가능성이 큽니다.

 
확인. 이제 코드를 확인하겠습니다.
 
hope писал(а) >>

함수 호출에서 기호에 앵커를 추가해도 도움이 되지 않습니다. 그는 왜 각 포지션에 대한 이익을 별도로 계산합니까(위 그림)?

아니, 차라리 내 그림을 당신에게 제안하고 싶습니다 ...

...그리고 스크립트...

 
KimIV писал(а) >>

아니, 차라리 내 그림을 당신에게 제안하고 싶습니다 ...

...그리고 스크립트...

'나 자신이 바보야'를 깨달았다…소고기와 우유를 더하면 젖이 빠질 수 없다…

 
KimIV писал(а) >>
Angela , 컴파일러는 여기에서 내 함수 정의를 볼 것이라고 기대하지 않았습니다. 이것은 코드의 상위 어딘가에 무언가가 없다는 것을 의미합니다. 세미콜론이나 닫는 중괄호일 수 있습니다. 일반적으로 코드를 주의 깊게 확인하십시오.

나는 그것을 알아 냈습니다. 방금 int start () 안에 함수를 삽입했습니다. int start ()에서 꺼내면 모든 것이 컴파일되었습니다. 문제는 다른데, 테스터의 시각화 모드에 있는 지표에서 이 기능은 어드바이저에서 지표로 데이터를 수신하지 않습니다.

 
e-뉴스-럭키$.mq4

Lucky$ & KimIV

http://www.kimiv.ru

안녕하세요 이고르입니다!

나는 당신의 조언자를 사용합니다. 아주 좋습니다. 어제 iCustom 을 통해 표시기를 고정하고 싶었지만 그는 그것을 보지 못했습니다. iCustom 을 통해 표시기를 등록하는 방법은 무엇입니까? 흥미로운 점은 iHigh, iLow 와 같은 내장 기능은 문제 없이 볼 수 있지만 표시기에 따르면 지연을 설정하고 싶지 않고 이미 머리가 깨졌습니다. 무엇이 문제가 될 수 있습니까?

현재 데일리바의 iHigh , iLow에 이렇게 등록 되어 있는데 이 기능으로 예상대로 동작하고 딜레이를 설정하는데 인디케이터에 따라 전혀 동작하지 않습니다(((... 누구나 할 수 있다면, iCustom 함수 호출을 통해서만 가능합니다.

시간이 되시면 감사합니다.

 //глобальные переменные

double Hi_Bar ;
double Lou_Bar ;

//+------------------------------------------------------------------+
//| Установка ордеров                                                |
//+------------------------------------------------------------------+
void SetOrders ( ) {
  Hi_Bar   = iHigh ( Symbol ( ) , PERIOD_D1 , 0 ) ;
  Lou_Bar =    iLow ( Symbol ( ) , PERIOD_D1 , 0 ) ;
   double ldStop = 0 , ldTake = 0 ;
   int     spr = MarketInfo ( Symbol ( ) , MODE_SPREAD ) ;
   double pAsk = Hi_Bar + ( DistanceSet + spr ) * Point ;
   double pBid = Lou_Bar - DistanceSet * Point ;