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

 
Desead :


그래서 차트에서 로봇을 삭제할 때 deinit가 호출됩니다. 그렇지 않으면 이 조건을 추적할 수 없습니다. ..... 아마도 나머지 보류 중인 모든 것을 제거하는 별도의 스크립트를 작성하는 것이 더 쉬울 것입니다. 다른 방법은 없습니다.

그건 그렇고, 여기에 또 다른 생각이 있습니다.

만세, 주문 삭제 문제를 해결한 것 같습니다. "필요한"(삭제해야 할) 주문의 수 -- Total --을 별도의 함수로 간주하여 이 함수를 호출한 다음 조건( Total>0)일 때 삭제 루프 for(int i= Total-1 ;i<=0l;i --), 다시 "필요한" 수를 세는 기능 , 지정된 수준에 도달했을 때 while 에서 빠져나와 삭제를 시도하는 카운터 . 따라서 모든 것이 제거됩니다.

어떤 이유로 든 주문 중 하나를 계산하는 순간 갑자기 사라지면 무한 루프가 발생할 수 있습니다.


왜 안 돼? 예를 들어 터미널 수준에서 전역 변수를 생성하고 거기에 값을 할당하고 처음부터 시작을 확인하고 종료하기 전에 서비스 --> 전역 변수를 통해 이 변수의 값을 변경합니다.
 
BeerGod :

그래서?


그리고 당신은 그들이 이것으로 무엇을 끝내려고 하는지 동시에 물을 수 있습니까?

for(int i=0; i<OrdersTotal(); i++)

열거 방법은 열린 포지션 을 계산하려는 시도인 것 같습니다...

 

안녕하세요!! 상황에 대한 아름다운 해결책을 찾을 수 없습니다. 다음은 일반적인 주문 배치 입니다. 그러나 로봇의 매개 변수에 0을 전달하면, 즉 정지가없고 이익을 취하면 아무 것도 작동하지 않습니다.

 if (!srabotka){
           OrderSend ( Symbol ( ), OP_BUY, lot , NormalizeDouble (Ask, Digits ), 5 , NormalizeDouble ( Ask- (stop* Point ), Digits ),   NormalizeDouble ( Ask+( 45 * Point ), Digits ), NULL , 450 , 0 , CLR_NONE );
           int Error= GetLastError (); if (Error== 0 ){  
           Sleep ( 2000 ); RefreshRates(); 
           OrderSend ( Symbol ( ), OP_SELL,  lot , NormalizeDouble (Bid, Digits ), 5 , NormalizeDouble ( Bid+ (stop* Point ), Digits ), NormalizeDouble ( Bid-( 45 * Point ), Digits ), NULL , 450 , 0 , CLR_NONE ); 
           Error= GetLastError ();
           if (Error== 0 ){  profit = NormalizeDouble ( Ask+( 45 * Point ), Digits ); //tsena=Ask; perenos = false;  
           srabotka= true ; }}}
           
           if (Error!= 0 ){ string errorcomment = "Ошибка открытия  ордера OP_BUY"   + " " + Symbol () +   " " + ErrorDescript(Error); 
             Print (errorcomment);}
 

다른 if를 입력하고 두 번째로 0으로 순서를 작성할 수 있지만 이는 다소 번거롭습니다.

 
lottamer :


그리고 당신은 그들이 이것으로 무엇을 끝내려고 하는지 동시에 물을 수 있습니까?

for(int i=0; i<OrdersTotal(); i++)

무차별 대입 방법은 열린 위치를 계산하려는 시도 인 것 같습니다 ...


음, 이런 식으로 지정된 매개변수에 따라 주문을 선택합니다.

예를 들어 https://www.mql5.com/en/forum/131859/page3#434221

NumberOfPositions() 함수.

이 함수는 현재 열려 있는 위치의 수를 반환합니다. 계산된 위치의 보다 정확한 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 도구의 위치만 고려합니다. 기본값은 "" 는 모든 시장 상품을 의미합니다. NULL 은 현재 기기를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID, MagicNumber. 기본값 -1 은 모든 식별자를 의미합니다.
  •  //+----------------------------------------------------------------------------+
    //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
    //+----------------------------------------------------------------------------+
    //|  Версия   : 19.02.2008                                                     |
    //|  Описание : Возвращает количество позиций.                                 |
    //+----------------------------------------------------------------------------+
    //|  Параметры:                                                                |
    //|    sy - наименование инструмента   (""   - любой символ,                   |
    //|                                     NULL - текущий символ)                 |
    //|    op - операция                   (-1   - любая позиция)                  |
    //|    mn - MagicNumber                (-1   - любой магик)                    |
    //+----------------------------------------------------------------------------+
    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);
    }

 
lottamer :


그리고 당신은 그들이 이것으로 무엇을 끝내려고 하는지 동시에 물을 수 있습니까?

for(int i=0; i<OrdersTotal(); i++)

무차별 대입 방법은 열린 위치를 계산하려는 시도 인 것 같습니다 ...

... 그리고 당신은 감각에 굴복하지 않고 규칙에서 시작하십시오. 이 경우 루프는 정수 변수 i 와 관련된 매개변수(주문의 "목록"에서)를 열거하고 각 반복마다 값은 1씩 증가합니다. 열거는 주문의 서수로 수행됩니다. :)))
 
BeerGod :

음, 이런 식으로 지정된 매개변수에 따라 주문을 선택합니다.

예를 들어 https://www.mql5.com/ru/forum/131859/page3#434221

NumberOfPositions() 함수.

이 함수는 현재 열려 있는 위치의 수를 반환합니다. 계산된 위치의 보다 정확한 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 도구의 위치만 고려합니다. 기본값은 "" 는 모든 시장 상품을 의미합니다. NULL 은 현재 기기를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID, MagicNumber. 기본값 -1 은 모든 식별자를 의미합니다.


감사합니다...그 포럼 스레드를 내 북마크에 추가하겠습니다. 순수한 혜택! :))
 
Desead :


그래서 차트에서 로봇을 삭제할 때 deinit가 호출됩니다. 그렇지 않으면 이 조건을 추적할 수 없습니다. ..... 아마도 나머지 보류 중인 모든 것을 제거하는 별도의 스크립트를 작성하는 것이 더 쉬울 것입니다. 다른 방법은 없습니다.

그건 그렇고, 여기에 또 다른 생각이 있습니다.

만세, 주문 삭제 문제를 해결한 것 같습니다. "필요한"(삭제해야 할) 주문 수 -- Total --을 별도의 함수로 간주하여 이 함수를 호출한 다음 조건( Total>0)에서 삭제 루프 for(int i= Total-1 ;i<=0l;i --), 다시 "필요한" 수를 세는 기능 , 지정된 수준에 도달했을 때 while 에서 빠져나와 삭제를 시도하는 카운터 . 따라서 모든 것이 제거됩니다.

어떤 이유로 든 주문 중 하나를 계산하는 순간 갑자기 사라지면 무한 루프가 발생할 수 있습니다.


for 루프가 주문을 제거하기 위해 완료된 후 매번 주문이 계산됩니다. break 에 의해 루프를 종료하는 while 루프 반복 카운터가 있습니다. 카운터 값, 외부 변수에서 지정한 값에 도달하면 다음을 수행할 수 있습니다. 결과 출력으로 종료하기 전에 오류 처리를 추가하십시오.
경고 ( ...)
또는
인쇄 ( ...)
글쎄, 내가 무역 허가에 대한 수표를 추가하라는 조언을 받은 방법. 따라서 여기에는 루핑이 없습니다.


 
Dimka-novitsek :

안녕하세요!! 나는 상황에 대한 아름다운 해결책을 찾을 수 없습니다. 다음 은 일반적인 주문 설정 입니다. 그러나 로봇의 매개 변수에 0을 전달하면, 즉 정지가없고 이익을 취하면 아무 것도 작동하지 않습니다.

다른 if를 입력하고 두 번째로 0으로 순서를 작성할 수 있지만 이는 다소 번거롭습니다.

당신은 성인 방식으로 모든 것을 가지고 있습니다 - 예술 수준에서 !!! ;)

그러나 진지하게, 방금 쓴 것에 대해 생각하는 법을 배우십시오. 0 STOP 값을 사용하면 공식에 따라 손절매와 이익실현이 주문 개시 가격 과 같으며 이는 허용되지 않습니다. 다른 솔루션을 제공할 수 있습니까?

 
Dimka-novitsek :

안녕하세요!! 상황에 대한 아름다운 해결책을 찾을 수 없습니다. 다음은 일반적인 주문 배치입니다. 그러나 로봇의 매개 변수에 0을 전달하면, 즉 정지가없고 이익을 취하면 아무 것도 작동하지 않습니다.

다른 if를 입력하고 두 번째로 0으로 순서를 작성할 수 있지만 이는 다소 번거롭습니다.



if (takeprofit!= 0 ) TP = NormalizeDouble (Ask + takeprofit* Point , Digits ); else TP= 0 ;
if (stoploss!= 0 ) SL = NormalizeDouble (Ask - stoploss* Point , Digits ); else SL= 0 ; 
 
rigonich :


... 헛되이 당신은 그렇습니다 (당신은 사람에게 기회를 남기지 않았습니다). 사람이 회백질의 일을 자극하지 않으면 그는 평생을 "베란다에서" 보낼 것입니다. 때문!" :)))