MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 66

 
trader781 :

이론적으로 왜 이런 일이 발생했는지 알고 있으므로 간단히 배열을 사용할 수 있습니까?

그 후에 모든 것이 작동하도록 초기화, 삭제 및 처리해야 하는 곳

추신

Google에서 금지하면 다음과 같이 표시됩니다.

그리고 어레이 때문에 결정한 이유는???
 
Alexey Viktorov :
그리고 어레이 때문에 결정한 이유는???
이런 일이 한 번도 없었고, 어디선가 일어난 일이라면 내가 실수를 한 것이므로 여기에서 방향을 전환하는 것입니다. 스스로 알아낼 수 있지만 시간이 훨씬 더 많이 걸립니다.
 
trader781 :

필요

1) 생성할 곳(전역 범위에서, 함수로, onit에서 또는 ontik에서?)

2) 주문을 보낼 때 각 티켓 을 거기에 쓰고 번호를 순서대로 할당하십시오.

3) 필요에 따라 번호를 통해 그곳에서 꺼내십시오.

4) 전체 그리드를 닫을 때 매개변수를 재설정합니다.

항상 염두에 둘 필요는 없습니다. 찾을 필요가있을 때 - 내부 배열이있을 함수를 호출하십시오. 여기에는 루프의 모든 주문 / 위치를 작성하고, 필요에 따라 배열을 정렬하고, 필요한 순서를 선택하고, 필요한 모든 작업을 수행하십시오. 함수를 종료할 때 이 로컬 배열을 잊어버리십시오. 다음에 함수가 호출되면 호출 순간에 있을 주문/포지션을 계산하고 다시 동일한 작업을 수행합니다. 그리고 지속적으로 모니터링하고 제어해야 하는 전역 어레이가 필요하지 않습니다. 더 저렴할 것입니다.
 
Artyom Trishkin :
항상 염두에 둘 필요는 없습니다. 찾을 필요가있을 때 - 내부 배열이있을 함수를 호출하십시오. 여기에는 루프의 모든 주문 / 위치를 작성하고, 필요에 따라 배열을 정렬하고, 필요한 순서를 선택하고, 필요한 모든 작업을 수행하십시오. 함수를 종료할 때 이 로컬 배열을 잊어버리십시오. 다음에 함수가 호출되면 호출 순간에 있을 주문/포지션을 계산하고 동일한 작업을 다시 수행합니다. 그리고 지속적으로 모니터링하고 제어해야 하는 전역 어레이가 필요하지 않습니다. 더 저렴할 것입니다.

글쎄, 얼마나 더 싼지 모르겠다. 모든 상황에 대한 솔루션이 있습니다. MQL4에는 이벤트가 없습니다. OnTradeTransaction() 하지만 어떻게든 "귀하의" 주문을 추적해야 합니다... 여기에서 전역 수준의 변수 배열이 도움이 될 것입니다.

여러 Expert Advisors가 계정에서 일하고 있다고 상상해보십시오. 한 명은 계산량이 많고 다른 한 명은 엄청나게 많은 주문을 하고 있습니다... 계산량이 많은 경우에는 어떻게 될까요??? 그는 또한 엄청난 수의 주문 전표를 파열? 물론 일반적으로 열거 없이는 할 수 없지만이 절차를 최소화하는 것이 바람직합니다.

그리고 정의는 닫혔습니다 - 주문 여부??? 전체 이야기를 살펴볼까요? 너무 비싸지 않습니까?

 
trader781 :
이런 일이 한 번도 없었고, 어디선가 일어난 일이라면 내가 실수를 한 것이므로 여기에서 방향을 전환하는 것입니다. 스스로 알아낼 수 있지만 시간이 훨씬 더 많이 걸립니다.

내 이전 게시물에서 이해했듯이 나는 배열을 꽤 자주 사용하며 배열로 인해 문제를 경험한 적이 없습니다. 한 번은 티켓이 어레이에 저장되어 아무 문제가 없는 2000개 이상의 주문을 여는 고문을 작성했습니다. 문제가 어레이로 인한 것이라는 것이 믿기지 않습니다. 그리고 그러한 문제를 해결하기 위해 어디에서 실수를 할 수 있습니까 ???

영화 '그럴 수 없다' 회상… "사람 죽이는 건 맥주가 아니라 사람 죽이는 물"…

 
Alexey Viktorov :

글쎄, 얼마나 더 싼지 모르겠다. 모든 상황에 대한 솔루션이 있습니다. MQL4에는 이벤트가 없습니다. OnTradeTransaction() 하지만 어떻게든 "귀하의" 주문을 추적해야 합니다... 여기에서 전역 수준의 변수 배열이 도움이 될 것입니다.

여러 Expert Advisors가 계정에서 일하고 있다고 상상해보십시오. 한 명은 계산량이 많고 다른 한 명은 엄청나게 많은 주문을 하고 있습니다... 계산량이 많은 경우에는 어떻게 될까요??? 그는 또한 엄청난 수의 주문 전표를 파열? 물론 일반적으로 열거 없이는 할 수 없지만이 절차를 최소화하는 것이 바람직합니다.

그리고 정의는 닫혔습니다 - 주문 여부??? 전체 이야기를 살펴볼까요? 너무 비싸지 않습니까?

모든 것이 해결되었습니다.

예를 들어, 나는 이미 이 모든 것을 오랫동안 모니터링하는 클래스를 만들었습니다. 각 심볼, 매직, 타임프레임 또는 하나의 계정에 대한 모두 또는 이들의 조합에 대해 클래스 개체를 동적으로 생성/삭제하여 선택할 수 있습니다. 필요한 검색 주기는 이미 새 틱에 대해 한 번 수행되었으며 필요한 모든 데이터가 있습니다. 물론 한 번 더 주기를 생략할 수 없는 경우가 발생하지만 이것은 틱당 두 번째 추가 주기입니다. 그리고 모든 기능에 자체 주기가 있는 것은 아닙니다. 이것은 엄청난 자원 낭비입니다.

 
Artyom Trishkin :

모든 것이 해결되었습니다.

예를 들어, 나는 이미 이 모든 것을 오랫동안 모니터링하는 클래스를 만들었습니다. 각 심볼, 매직, 타임프레임 또는 하나의 계정에 대한 모두 또는 이들의 조합에 대해 클래스 개체를 동적으로 생성/삭제하여 선택할 수 있습니다. 필요한 검색 주기는 이미 새 틱에 대해 한 번 수행되었으며 필요한 모든 데이터가 있습니다. 물론 한 번 더 주기를 생략할 수 없는 경우가 발생하지만 이것은 틱당 두 번째 추가 주기입니다. 그리고 모든 기능에 자체 주기가 있는 것은 아닙니다 . 이것은 엄청난 자원 낭비입니다.

따라서 아무도 이에 대해 이의를 제기하지 않습니다. 구조물의 출현으로 더욱 편리해졌습니다.
 
Artyom Trishkin :
항상 염두에 둘 필요는 없습니다. 찾을 필요가있을 때 - 내부 배열이있을 함수를 호출하십시오. 여기에는 루프의 모든 주문 / 위치를 작성하고, 필요에 따라 배열을 정렬하고, 필요한 순서를 선택하고, 필요한 모든 작업을 수행하십시오. 함수를 종료할 때 이 로컬 배열을 잊어버리십시오. 다음에 함수가 호출되면 호출 순간에 있을 주문/포지션을 계산하고 동일한 작업을 다시 수행합니다. 그리고 지속적으로 모니터링하고 제어해야 하는 전역 어레이가 필요하지 않습니다. 더 저렴할 것입니다.

여기 단순화된 보기가 있습니다.

어레이가 로컬인 경우 어디에 넣을까요? 분명히 온틱에는 없습니다.

void OnTick ()
{  

       if (FindLastOType()== OP_BUY )   //+------ если последний покупка
           {
             if ( Ask <=FindLastOrderOpenPrice()-Step* Point ()) //+------------если ордер в минус
              {
               TotalClose();
              }
             else
             if ( Ask >=FindLastOrderOpenPrice()+Step* Point ()) //+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket= OrderSend ( Symbol (), OP_BUY ,(лот 2 ордера+лот 4 ордера), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure );
              }        
           }  
}

 
trader781 :

여기 단순화된 보기가 있습니다.

어레이가 로컬인 경우 어디에 넣을까요? 분명히 온틱에는 없습니다.

void OnTick ()
{  

       if (FindLastOType()== OP_BUY )   //+------ если последний покупка
           {
             if ( Ask <=FindLastOrderOpenPrice()-Step* Point ()) //+------------если ордер в минус
              {
               TotalClose();
              }
             else
             if ( Ask >=FindLastOrderOpenPrice()+Step* Point ()) //+------------если ордер в плюс и это 5 ордер в списке
              {
               ticket= OrderSend ( Symbol (), OP_BUY ,(лот 2 ордера+лот 4 ордера), Ask , 50 , 0 , 0 , "" ,Magic, 0 , clrAzure );
              }        
           }  
}

기능이 무엇인지 읽어보십시오. 그러면 함수의 본문에 선언된 배열이 프로그램의 나머지 부분에서 보이지 않는 지역적이라는 것을 이해하게 될 것입니다.
 
bool WriteToFile( int FileHandle, string DataToWrite)
  {
// Receives the number of bytes written to the file. Note that MQL can only pass
// arrays as by-reference parameters to DLLs
   int BytesWritten[ 1 ]={ 0 };

// Get the length of the string
   int szData= StringLen (DataToWrite);

// Do the write
   WriteFile(FileHandle,DataToWrite,szData,BytesWritten, 0 );

// Return true if the number of bytes written matches the expected number
   return (BytesWritten[ 0 ] == szData);
  }

파일에 새 줄 번역이 있는 줄을 작성하고 싶지만 작동하지 않습니다. 이 코드는 https://www.mql5.com/en/forum/118999 입니다.

이 코드는 일반적으로 각 문자 뒤에 공백이 있는 줄을 작성합니다. 대체 FileWrite() 를 찾아야 하지만 작동합니다.

Reading and writing files anywhere on disk using CreateFileA() etc.
Reading and writing files anywhere on disk using CreateFileA() etc.
  • www.mql5.com
There are frequent questions in this forum (e.g...
사유: