포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 900

 
lufer :
이것은 문제를 해결하지 못합니다. 이제 OnTick ()에서 뭔가 잘못된 것을 보는 것이 이상합니다. 어드바이저를 터미널 창에 로드할 때 아무 일도 일어나지 않고 삭제하려고 할 때 터미널이 매우 오랫동안 죽습니다. 시간이 지난 후에야 삭제됩니다. 여러 요소에 수동으로 값을 할당하려고 시도했지만 모든 것이 정상입니다. 분명히 배열 초기화 주기와 관련된 것입니다.

"풀지 않는다"은(는) 무슨 뜻인가요? 데이터를 1보다 작은 두 배를 int 배열에 밀어넣으면 당연히 출력에 0이 생깁니다. 글쎄, 사이클이 서툴렀다.

이것은 작동해야 하는 코드입니다:

 #property strict

extern int N= 100 ;                       // Количество баров

double Mas[];                             // Объявление массива
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit ()
  { 
     ArrayResize (Mas,N);
     return ( INIT_SUCCEEDED );
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit ( const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick ()
  {                                       
       for ( int i= 0 ; i<N; i++)                     // Цикл записи данных
         {                      
    
              Mas[i]= iATR ( NULL , 0 , 5 ,i+1);           // Вычисление значений          
         }
           Print (DoubleToStr(Mas[ 0 ], _Digits ), "," ,DoubleToStr(Mas[ 50 ], _Digits ), "," ,DoubleToStr(Mas[ 99 ], _Digits ));       // Вывод значений
  }
 
evillive :

"풀지 않는다"은(는) 무슨 뜻인가요? 데이터를 1보다 작은 두 배를 int 배열에 밀어넣으면 당연히 출력에 0이 생깁니다. 글쎄,주기가 서투른.

이것은 작동해야 하는 코드입니다:

아니요, double Mas[] 에 대해 절대적으로 옳다고 말씀하셨습니다 (어째서인지 APR에서는 정수 값의 포인트 수가 계산된다고 생각했습니다). 포인트는 변경한 후에도 값이 표시되지 않는다는 점이었습니다. 배열 유형이지만 이미 버그가 있는 위치를 파악했습니다. 도와 주셔서 정말로 고맙습니다!
 
아직 따로 토픽을 만들고 싶지 않아서 여기에 여쭤봅니다. OrderSelect 기능 에 대한 설명서에는 모든 주문 데이터가 "소프트웨어 환경"에 복사된다고 나와 있습니다. 소프트웨어 환경은 현재 차트만 참조하거나 전체 터미널을 참조합니까? 동일한 Expert Advisor가 설치된 다른 차트의 여러 주문을 동시에 작업할 때 문제가 있어 질문드립니다.
 
.roman. :
아직 따로 토픽을 만들고 싶지 않아서 여기에 여쭤봅니다. OrderSelect 기능에 대한 설명서에는 모든 주문 데이터가 "소프트웨어 환경"에 복사된다고 나와 있습니다. 소프트웨어 환경은 현재 차트만 참조하거나 전체 터미널을 참조합니까? 동일한 Expert Advisor가 설치된 다른 차트의 여러 주문을 동시에 작업할 때 문제가 있어 질문드립니다.
주문 데이터는 이 주문이 열리는 터미널에서 실행되는 모든 사용자 프로그램에서 사용할 수 있습니다.
 
evillive :
주문 데이터는 이 주문이 열리는 터미널에서 실행되는 모든 사용자 프로그램에서 사용할 수 있습니다.
그렇다면 다른 차트에서 동시에 선택된 소프트웨어 환경에 다른 주문의 데이터를 잘못 복사하지 않도록 자신을 보호하는 방법은 무엇입니까?
 
.roman. :
그렇다면 다른 차트에서 동시에 선택된 소프트웨어 환경에 다른 주문의 데이터를 잘못 복사하지 않도록 자신을 보호하는 방법은 무엇입니까?
다른 주문의 데이터는 어떤 식으로든 교차하지 않으며 보호할 대상이 없습니다.
 
evillive :
다른 주문의 데이터는 어떤 식으로든 교차하지 않으며 보호할 대상이 없습니다.

그런 다음 우리는 다른 것에 대해 이야기합니다. 나는 원래 문서에 쓰여진 "소프트웨어 환경"이 무엇인지에 대한 질문을 의미했습니다. 전체 터미널을 의미합니까?

특히 내 문제는 OrderSelect 함수 에서 OrderSymbol과 Symbol의 단독 비교에도 불구하고 한 쌍의 차트에서 데이터(주문 개시 시간, 개시 가격 등)가 완전히 다르게 나타날 수 있는 문제가 있었다는 것입니다. 즉, EURUSD와 같은 쌍에서 고문의 OrderSelect 기능을 작동하는 동안 고문이 OrderSelect 기능과 주문으로 작업을 시작할 수 있는지에 대한 질문에 관심이 있습니다. 이 함수에 대한 마지막 호출의 데이터?

 
.roman. :

그런 다음 우리는 다른 것에 대해 이야기합니다. 나는 원래 문서에 쓰여진 "소프트웨어 환경"을 구성하는 것이 무엇인지에 대한 질문을 염두에 두었습니다. 전체 터미널을 의미합니까?

특히 내 문제는 OrderSelect 함수에서 OrderSymbol과 Symbol의 단독 비교에도 불구하고 한 쌍의 차트에서 데이터(주문 개시 시간, 개시 가격 등)가 완전히 다르게 나타날 수 있는 문제가 있었다는 것입니다. 즉, EURUSD와 같은 쌍에서 고문의 OrderSelect 기능을 작동하는 동안 고문이 OrderSelect 기능과 주문으로 작업을 시작할 수 있는지에 대한 질문에 관심이 있습니다. 이 함수에 대한 마지막 호출의 데이터?

코드가 필요합니다. 그것에 오류
 
.roman. :

그런 다음 우리는 다른 것에 대해 이야기합니다. 나는 원래 문서에 쓰여진 "소프트웨어 환경"을 구성하는 것이 무엇인지에 대한 질문을 염두에 두었습니다. 전체 터미널을 의미합니까?

특히 내 문제는 OrderSelect 함수에서 OrderSymbol과 Symbol의 단독 비교에도 불구하고 한 쌍의 차트에서 데이터(주문 개시 시간, 개시 가격 등)가 완전히 다르게 나타날 수 있는 문제가 있었다는 것입니다. 즉, EURUSD와 같은 쌍에서 고문의 OrderSelect 기능을 작동하는 동안 고문이 OrderSelect 기능과 주문으로 작업을 시작할 수 있는지에 대한 질문에 관심이 있습니다. 이 함수에 대한 마지막 호출의 데이터?

각 주문에는 다른 주문과 명확하게 구별할 수 있는 고유한 매개변수가 있습니다. 이것은 티켓과 개장 시간입니다(이력으로 보면 폐장). 그들은 망막 패턴과 같이 하나의 거래 계정 내에서 고유합니다.

OrderSelect 함수를 사용하여 주문을 선택하는 것만으로는 충분하지 않으며, 이것이 우리가 선택한 주문인지 또는 다음 주문을 선택해야 하는지 여부도 확인해야 합니다.

 
Vinin :
코드가 필요합니다. 그것에 오류
 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
        {
             if ( OrderSelect (i,SELECT_BY_POS) && OrderSymbol()== Symbol () && OrderMagicNumber()==magic)
               {
                   if (OrderType()==OP_BUY)
                     {
                         double openPrice = 0 ;
                        openPrice = OrderOpenPrice();
                         if (Ask>openPrice)
                           {
                               Print ( "OrderSymbol " ,OrderSymbol(), " OrderTicket " ,OrderTicket(), " OrderOpenPrice " ,OrderOpenPrice());
                           }
                     }
                   if (OrderType()==OP_SELL)
                     {
                         double openPrice = 0 ;
                        openPrice = OrderOpenPrice();
                         if (Bid<openPrice)
                           {
                               Print ( "OrderSymbol " ,OrderSymbol(), " OrderTicket " ,OrderTicket(), " OrderOpenPrice " ,OrderOpenPrice());
                           }
                     }
               }
        }

불필요한 계산을 제거했습니다(문제와 관련 없음). 특히 잼을 표시하기 위해 코드에 지문이 추가되었습니다. 주문 기호를 Expert Advisor가 열리는 기호와 비교하더라도 다음을 표시할 수 있습니다(예: 이 경우와 같이 osi 차트에서 유로에 대한 주문 데이터를 가져옴).