작동하지 않는 이유. 확실하지 않은 경우 ArrayGetAsSeries 함수를 사용하여 직렬성을 명시적으로 검사하세요:
제가 무슨 말을 하고 있는지 상기시켜드리겠습니다. 배열을 복사한 후에만 항상 인덱싱해야 하는지 묻고 있었습니다. SetIndexBuffer 함수 노트를 언급하며 EA에 대해서도 동일해야 한다고 말씀하셨습니다. 이 SetIndexBuffer 함수 노트는"링크된 배열이 시계열처럼 색인되도록 미리 설정되어 있 더라도링크 후에는 동적 배열 버퍼[] 가 일반 배열과 마찬가지로 색인된다" 는 것을 의미합니다.
따라서 저는 CopyTime, CopyHigh, CopyLow 함수를 사용한 후 수신 배열도 일반 배열과 마찬가지로 인덱싱해야 한다는 점에서 EA를 비유할 수 있다고 생각했습니다. 이 유추를 테스트하기 위해 OnInit() 함수에서 CopyHigh 함수 앞에 ArraySetAsSeries 함수를 배치했습니다. 그러나 제 예제와 제안하신 ArrayGetAsSeries 함수에 의한 직렬화 명시적 검사에 따르면 CopyHigh 함수를 사용한 후에도 수신 배열 high[]의 사전 설정된 인덱싱( 시계열에서와 같이)이 변경되지 않았습니다. 이는 다시 말해, 명시적 직렬화 검사에서 IsSeries=false가 표시되어야 하므로 말씀하신 SetIndexBuffer 함수와의 유추가 아직 관찰되지 않았다는 것을 나타냅니다.
이 비유를 테스트하기 위해 OnInit() 함수에서 CopyHigh 함수 앞에 ArraySetAsSeries 함수를 배치했습니다. 그러나 제 예제와 제안하신 ArrayGetAsSeries 함수에 의한 직렬화를 명시적으로 확인한 결과 CopyHigh 함수를 사용한 후에도 수신 배열 high[]의 사전 설정된 인덱싱( 시계열에서와 같이)이 변경되지 않았음을 보여줍니다.
사실, 제 말은 OnInit() 또는 다른 함수에서 전역 배열에 대한 직렬화를 설정한 후에는 이 직렬화가 다른 곳에서는 변경되지 않는다는 뜻이었습니다. 유일한 예외는 SetIndexBuffer() 함수와 관련된 것입니다.
이 문제에 대해서는 합의에 도달했다고 생각하며 이 문제는 해결된 것으로 간주할 수 있습니다.
실행하는 데 매우 오랜 시간이 걸렸고 단 한 건의 거래도 체결되지 않았습니다. 자동 거래가 허용됩니다. 로그에 메시지가 없습니다 ((((편집 아마도 아직 찾는 방법을 모릅니다)). 인디케이터와 전문가 조언자가 있어야 할 곳에 있습니다. WindowsXP, MT (빌드 274).
4. 디버깅 모드를 시도했지만 작동하지 않습니다. 아마도 토요일 때문일 것입니다. 따옴표가 없습니다. 나는 기사에서와 같은 방식으로 정지 지점을 만들었습니다. 내가 맞다면 유감스럽게도 근무일에만 디버깅 할 수 있다는 것이 밝혀졌습니다. 디버깅에 필요한 데이터와 함께 자신의 파일을 업로드 할 수 있고 (또는) 일부 일반적인 데이터 (하루 동안의 기록으로 남겨 두십시오)를 사용하면 디버깅에 충분할 것입니다.
5. 복사 기능을 연구한 사람이 있다면... 누락된 막대가 있는 경우 작동 방식에 대한 정보를 공유해 주세요. 기사를 주문하는 것이 더 나을 수도 있겠지만요.
Оператор return прекращает выполнение текущей функции и возвращает управление
вызвавшей программе. Результат вычисления выражения возвращается вызываемой
функции. Выражение может содержать оператор присваивания.
이 예제에서 반환 문의 현재 함수는 OnTick() 함수입니다.
개인:
4. 디버그 모드를 시도했지만 실행되지 않습니다. 아마도 토요일 때문일 것입니다. 따옴표가 없습니다. 나는 기사에서와 같은 방식으로 정지 지점을 만들었습니다. 내가 맞다면 유감스럽게도 근무일에만 디버깅 할 수 있다는 것이 밝혀졌습니다. 디버깅에 필요한 데이터와 함께 자신의 파일을 업로드 할 수 있고 (또는) 일부 일반적인 데이터 (하루 동안의 기록으로 남겨 두십시오)를 사용하면 디버깅에 충분할 것입니다.
이 사이트에서는 이미 디버깅에 대한 유사한 질문에 대해 논의했습니다. 관심이 있으시면 검색창에서 "디버깅"이라는 단어를 검색해 보세요.
조건 중 하나 이상이 충족되는 경우, 즉 배열 중 하나 이상을 완전히 복사할 수 없는 경우(기록 데이터가 충분하지 않거나 오류가 발생함) - 이 데이터 없이는 추가 계산이 불가능하므로 OnTick 함수가 종료됩니다.
2. MQL4에서는 역 열거가 권장되었습니다.
무엇이 더 낫습니까?
변형
for(i=0;i<PositionsTotal();i++)
и
for(i=PositionsTotal()-1;i>=0;i--)
는 동일하지만 첫 번째 변형이 텍스트 형식이 더 짧기 때문에 사용되었습니다.
3. 전문가 고문 및 표시기를 다운로드했습니다 (중재자 용 Opera 10.54 첨부 파일 다운로드 문제). 모두 컴파일되었습니다. M5의 테스터에서 실행하여 지난 달을 선택했습니다.
실행하는 데 매우 오랜 시간이 걸렸고 단일 거래를 열지 않았습니다. 자동 거래가 허용됩니다. 로그에 메시지가 없습니다 ((((아직 찾는 방법을 모를 수도 있습니다)). 인디케이터와 전문가 조언자가 있어야 할 곳에 있습니다. WindowsXP, MT (빌드 274).
4. 디버깅 모드를 시도했지만 실행되지 않습니다. 아마도 토요일 때문일 것입니다. 따옴표가 없습니다. 나는 기사에서와 같은 방식으로 정지 지점을 만들었습니다. 내가 맞다면 유감스럽게도 근무일에만 디버깅 할 수 있다는 것이 밝혀졌습니다. 디버깅에 필요한 데이터와 함께 자신의 파일을 업로드 할 수 있고 (또는) 일부 일반적인 데이터 (하루 동안의 기록으로 남겨 두십시오)를 사용하면 디버깅에 충분할 것입니다.
5. 복사 기능을 연구한 사람이 있다면... 누락된 막대가 있는 경우 작동 방식에 대한 정보를 공유해 주세요. 기사를 주문하는 것이 더 나을 수도 있지만.
솔직히 말해서 내 테스터도 잘 작동하지 않습니다. 테스트는 MQL4에서 유사한 EA를 테스트하는 것보다 훨씬 오래 걸립니다. 테스트 간격의 처음 1 ~ 2 일 동안 만 거래가 열립니다 (다른 전문가 고문을 테스트 할 때 관찰 됨).
OnTick 및 OnCalculate 기능은 새 견적이 수신되면 시작되므로 디버깅을 위해서는 견적을 수신해야합니다 (주말에는 작동하지 않음). 그렇지 않으면 디버거가 정상적으로 작동합니다(사용해보시고 필요한 것이 있으면 저에게 문의하세요).
배열 시계열 관련 : - 배열의 방향은 언제든지 양방향으로 변경할 수 있으며 메모리의 배열 위치는 변경되지 않고 인덱싱 만 변경됩니다 ( 0,1,2,...,마지막에서 마지막까지 ,...,2,1,0) .
인디케이터 버퍼의 경우 SetIndexBuffer라고 표시됩니다:
전문가 어드바이저의 경우 비슷해야 합니다.
아직 비유가 없습니다. 이 코드를 확인할 때
반환 연산자 반대편에 중단점을 넣었습니다. 디버거는 다음과 같은 결과를 생성합니다: 높은 "동적 배열[8563], S". S는 "시리즈"의 약자라는 것을 알고 있습니다.
이 비유는 아직 작동하지 않습니다. 이 코드를 확인할 때
반환 연산자 반대편에 중단점을 넣었습니다. 디버거는 다음과 같은 결과를 생성합니다: 높은 "동적 배열[8563], S". S가 "시리즈"의 약자라는 것을 알고 있습니다.
그런데 왜 작동하지 않나요? 확실하지 않은 경우 ArrayGetAsSeries 함수로 시리즈에 대한 명시적 검사를 설정하세요:
결과
작동하지 않는 이유. 확실하지 않은 경우 ArrayGetAsSeries 함수를 사용하여 직렬성을 명시적으로 검사하세요:
제가 무슨 말을 하고 있는지 상기시켜드리겠습니다. 배열을 복사한 후에만 항상 인덱싱해야 하는지 묻고 있었습니다. SetIndexBuffer 함수 노트를 언급하며 EA에 대해서도 동일해야 한다고 말씀하셨습니다. 이 SetIndexBuffer 함수 노트는"링크된 배열이 시계열처럼 색인되도록 미리 설정되어 있 더라도링크 후에는 동적 배열 버퍼[] 가 일반 배열과 마찬가지로 색인된다" 는 것을 의미합니다.
따라서 저는 CopyTime, CopyHigh, CopyLow 함수를 사용한 후 수신 배열도 일반 배열과 마찬가지로 인덱싱해야 한다는 점에서 EA를 비유할 수 있다고 생각했습니다. 이 유추를 테스트하기 위해 OnInit() 함수에서 CopyHigh 함수 앞에 ArraySetAsSeries 함수를 배치했습니다. 그러나 제 예제와 제안하신 ArrayGetAsSeries 함수에 의한 직렬화 명시적 검사에 따르면 CopyHigh 함수를 사용한 후에도 수신 배열 high[]의 사전 설정된 인덱싱( 시계열에서와 같이)이 변경되지 않았습니다. 이는 다시 말해, 명시적 직렬화 검사에서 IsSeries=false가 표시되어야 하므로 말씀하신 SetIndexBuffer 함수와의 유추가 아직 관찰되지 않았다는 것을 나타냅니다.
Yedelkin:
이 비유를 테스트하기 위해 OnInit() 함수에서 CopyHigh 함수 앞에 ArraySetAsSeries 함수를 배치했습니다. 그러나 제 예제와 제안하신 ArrayGetAsSeries 함수에 의한 직렬화를 명시적으로 확인한 결과 CopyHigh 함수를 사용한 후에도 수신 배열 high[]의 사전 설정된 인덱싱( 시계열에서와 같이)이 변경되지 않았음을 보여줍니다.
사실, 제 말은 OnInit() 또는 다른 함수에서 전역 배열에 대한 직렬화를 설정한 후에는 이 직렬화가 다른 곳에서는 변경되지 않는다는 뜻이었습니다. 유일한 예외는 SetIndexBuffer() 함수와 관련된 것입니다.
이 문제에 대해서는 합의에 도달했다고 생각하며 이 문제는 해결된 것으로 간주할 수 있습니다.
예, 질문에 대한 답변이 완료되었습니다. 명확하게 설명해 주셔서 감사합니다!
몇 가지 질문이 있습니다.
1.
" if... 연산자에서 반환 연산자는 OnTick 함수 실행을 종료하는 데 사용됩니다."라고 되어 있습니다.
만약 (....) {...}에서 온 것이 아니라 OnTick?
2.
MQL4에서는 역방향 검색이 권장됩니다.
무엇이 더 낫나요?3. 전문가 어드바이저 및 표시기를 다운로드했습니다 ( Opera 10.54 중재자의 경우 첨부 파일 다운로드 문제). 모두 컴파일되었습니다. 지난 달을 선택하는 M5에서 테스터에서 시작했습니다.
로그
2010.05.15 13:16:02 Core 1 연결 끊김
2010.05.15 13:16:01 Core 1 로그 파일 "D:\MetaTrader 5\Tester\Agent-127.0.0.0.1-3000\logs\20100515.log" 작성되었습니다.
2010.05.15 13:16:01 Core 1 EURUSD,M5: 1431016ms 이내에 553908 틱(2580 바) 생성 (총 100352 바 기록)
2010.05.15 13:16:01 Core 1 OnTester 결과 0
2010.05.15 12:52:13 Core 1 EURUSD,Daily: 2009.01.02 00:00부터 기록 시작
2010.05.15 12:52:13 Core 1 EURUSD,Daily: 약 355개의 바에 대한 히스토리 캐시 보유
2010.05.15 12:52:13 Core 1 EURUSD: 2009.01.02 06:01 ~ 2010.05.03 00:00 시작 데이터의 484483 M1 레코드 포함
2010.05.15 12:52:10 Core 1 Lots=0.100000
2010.05.15 12:52:10 Core 1 MAper=240
2010.05.15 12:52:10 Core 1 EndHour=19
2010.05.15 12:52:10 Core 1 StartHour=7
2010.05.15 12:52:10 Core 1 EURUSD,M5: 2010.05.01 00:00 ~ 2010.05.14 00:00에 Experts\expert.ex5의 테스트가 입력으로 시작되었습니다:
실행하는 데 매우 오랜 시간이 걸렸고 단 한 건의 거래도 체결되지 않았습니다. 자동 거래가 허용됩니다. 로그에 메시지가 없습니다 ((((편집 아마도 아직 찾는 방법을 모릅니다)). 인디케이터와 전문가 조언자가 있어야 할 곳에 있습니다. Windows XP, MT (빌드 274).
4. 디버깅 모드를 시도했지만 작동하지 않습니다. 아마도 토요일 때문일 것입니다. 따옴표가 없습니다. 나는 기사에서와 같은 방식으로 정지 지점을 만들었습니다. 내가 맞다면 유감스럽게도 근무일에만 디버깅 할 수 있다는 것이 밝혀졌습니다. 디버깅에 필요한 데이터와 함께 자신의 파일을 업로드 할 수 있고 (또는) 일부 일반적인 데이터 (하루 동안의 기록으로 남겨 두십시오)를 사용하면 디버깅에 충분할 것입니다.
5. 복사 기능을 연구한 사람이 있다면... 누락된 막대가 있는 경우 작동 방식에 대한 정보를 공유해 주세요. 기사를 주문하는 것이 더 나을 수도 있겠지만요.
몇 가지 질문이 있습니다.
1. " if... 연산자에서 반환 연산자는 OnTick 함수 실행을 종료하는 데 사용됩니다."라고 되어 있습니다.
만약 (....) {...}에서 온 것이 아니라 OnTick인가요?
반환 연산자 반환에 대한 설명에서
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается вызываемой функции. Выражение может содержать оператор присваивания.
이 예제에서 반환 문의 현재 함수는 OnTick() 함수입니다.
4. 디버그 모드를 시도했지만 실행되지 않습니다. 아마도 토요일 때문일 것입니다. 따옴표가 없습니다. 나는 기사에서와 같은 방식으로 정지 지점을 만들었습니다. 내가 맞다면 유감스럽게도 근무일에만 디버깅 할 수 있다는 것이 밝혀졌습니다. 디버깅에 필요한 데이터와 함께 자신의 파일을 업로드 할 수 있고 (또는) 일부 일반적인 데이터 (하루 동안의 기록으로 남겨 두십시오)를 사용하면 디버깅에 충분할 것입니다.
이 사이트에서는 이미 디버깅에 대한 유사한 질문에 대해 논의했습니다. 관심이 있으시면 검색창에서 "디버깅"이라는 단어를 검색해 보세요.
자동 업데이트 (빌드 275)를 로드한 후 컴파일러는 다음 유형의 조건이 확인되는 줄에서 경고를 생성하기 시작했습니다.
경고는 동일한 유형입니다: 질문: 컴파일러의 올바른 작동이 지정된 상황에서 이러한 경고의 출현을 의미합니까? 어떤 "변환"에 대해 이야기하고 있나요?자동 업데이트 (빌드 275)를로드 한 후 컴파일러는 해당 유형의 조건이 확인되는 줄에서 경고를 생성하기 시작했습니다.
경고는 동일한 유형입니다: 질문: 컴파일러의 올바른 작업이 지정된 상황에서 이러한 경고의 출현을 의미합니까? 어떤 "변환"에 대해 이야기하고 있나요?이 경고는 프로그래머가 주의를 기울이고 코드를 다시 확인하도록 하기 위해 도입되었습니다.
함수 결과를 열거형 또는 열거형을 int로 명시적으로 캐스팅하면 경고를 제거할 수 있습니다.
몇 가지 질문이 있습니다.
1. " if... 연산자에서 반환 연산자는 OnTick 함수 실행을 종료하는 데 사용됩니다."라고 되어 있습니다.
만약 (....) {...}에서 온 것이 아니라 OnTick?
연산자의 조건 중 하나 이상이 충족되면
조건 중 하나 이상이 충족되는 경우, 즉 배열 중 하나 이상을 완전히 복사할 수 없는 경우(기록 데이터가 충분하지 않거나 오류가 발생함) - 이 데이터 없이는 추가 계산이 불가능하므로 OnTick 함수가 종료됩니다.
2. MQL4에서는 역 열거가 권장되었습니다.
무엇이 더 낫습니까?변형
и
는 동일하지만 첫 번째 변형이 텍스트 형식이 더 짧기 때문에 사용되었습니다.
3. 전문가 고문 및 표시기를 다운로드했습니다 (중재자 용 Opera 10.54 첨부 파일 다운로드 문제). 모두 컴파일되었습니다. M5의 테스터에서 실행하여 지난 달을 선택했습니다.
실행하는 데 매우 오랜 시간이 걸렸고 단일 거래를 열지 않았습니다. 자동 거래가 허용됩니다. 로그에 메시지가 없습니다 ((((아직 찾는 방법을 모를 수도 있습니다)). 인디케이터와 전문가 조언자가 있어야 할 곳에 있습니다. Windows XP, MT (빌드 274).
4. 디버깅 모드를 시도했지만 실행되지 않습니다. 아마도 토요일 때문일 것입니다. 따옴표가 없습니다. 나는 기사에서와 같은 방식으로 정지 지점을 만들었습니다. 내가 맞다면 유감스럽게도 근무일에만 디버깅 할 수 있다는 것이 밝혀졌습니다. 디버깅에 필요한 데이터와 함께 자신의 파일을 업로드 할 수 있고 (또는) 일부 일반적인 데이터 (하루 동안의 기록으로 남겨 두십시오)를 사용하면 디버깅에 충분할 것입니다.
5. 복사 기능을 연구한 사람이 있다면... 누락된 막대가 있는 경우 작동 방식에 대한 정보를 공유해 주세요. 기사를 주문하는 것이 더 나을 수도 있지만.
솔직히 말해서 내 테스터도 잘 작동하지 않습니다. 테스트는 MQL4에서 유사한 EA를 테스트하는 것보다 훨씬 오래 걸립니다. 테스트 간격의 처음 1 ~ 2 일 동안 만 거래가 열립니다 (다른 전문가 고문을 테스트 할 때 관찰 됨).
OnTick 및 OnCalculate 기능은 새 견적이 수신되면 시작되므로 디버깅을 위해서는 견적을 수신해야합니다 (주말에는 작동하지 않음). 그렇지 않으면 디버거가 정상적으로 작동합니다(사용해보시고 필요한 것이 있으면 저에게 문의하세요).
배열 시계열 관련 : - 배열의 방향은 언제든지 양방향으로 변경할 수 있으며 메모리의 배열 위치는 변경되지 않고 인덱싱 만 변경됩니다 ( 0,1,2,...,마지막에서 마지막까지 ,...,2,1,0) .