returnSign[i] =true 까지 ; 따라서VrPr 기능(내가 모니터링하는 데이터를 표시하는 기능) 이전에는 사용되지 않습니다. 하향 교차는 이미 시작되었지만.. 여기 화면에서각각의 빠른 마우스가 느린 것을 교차할 때마다 crossDir[] 배열이 채워지는 것을 볼 수 있습니다..
2개의 눈금이 가장 두꺼운 눈금을 가로지르고 2개의 배열 요소가 이미 값 1 을 인쇄했음을 유의하십시오. 그리고 이것은 그들의 값이 CROSS_DN 임을 의미합니다.
int i; //аналогично i=0while (( TimeCurrent ()-time)> 1 ){ //то заносим старые значения столько раз, сколько было пропущено секунд минус одинif ( FileSeek (hand1e, fpos, SEEK_SET ) == false ){ //перемещаем указатель на новую позицию, которую мы запомнили в FileTell
error = GetLastError (); //если ошибкаPrint ( "out: error(" ,error, "): " ,ErrorDescription(error)); //записываем её в лог
flag = false ;
return ; //и выходим
} else { //выдумываем несуществующую свечу (т.к. тика в эту секунду не было)
time++;
FileWriteInteger (hand1e, time, LONG_VALUE); //TimeCurrent()//выбор выдуманной свечи (секунда, при которой тика не было)://прочерк на Close[]/*
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Open[]
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//High[]
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Low[]
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Close[]
FileWriteDouble (hand1e, 0, DOUBLE_VALUE);//Volume[]
*///свеча без теней/*
FileWriteDouble (hand1e, bid[0], DOUBLE_VALUE);//Open[]
FileWriteDouble (hand1e, bid[0], DOUBLE_VALUE);//High[]
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Low[]
FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE);//Close[]
FileWriteDouble (hand1e, last.index+1, DOUBLE_VALUE);//Volume[]
*///такая же свеча, как и была (не прочерк и не без теней)FileWriteDouble (hand1e, bid[ 0 ], DOUBLE_VALUE); //Open[]FileWriteDouble (hand1e, bid[ ArrayMaximum (bid)], DOUBLE_VALUE); //High[]FileWriteDouble (hand1e, ask[ ArrayMinimum (ask)], DOUBLE_VALUE); //Low[]FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE); //Close[]FileWriteDouble (hand1e, last.index+ 1 , DOUBLE_VALUE); //Volume[]//конец выбораFileFlush (hand1e);
fpos = FileTell (hand1e); //запоминаем позицию записи в файле
}
}
ArrayResize (bid, 1 ); //урезаем и обнуляем использованные нмассивыArrayResize (ask, 1 );
if (flag== true ){
if (tick.time.local== true ){ //если флаг работы с историей поднят
time = TimeLocal (); //работаем с локальным временемwhile (time== TimeLocal ()){ //пока секунда не прошла
bid[i]=MarketInfo(symbol, MODE_BID); //заносим в индикаторный массив данные тиков
ask[i]=MarketInfo(symbol, MODE_ASK);
i++;
}
} else { //иначе
time = TimeCurrent (); //работаем с временем сервераwhile (time== TimeCurrent ()){ //пока секунда не прошла
bid[i]=MarketInfo(symbol, MODE_BID); //заносим в индикаторный массив данные тиков
ask[i]=MarketInfo(symbol, MODE_ASK);
i++;
}
}
}
//Вышли из цикла, т.к. время изменилось. Заносим в файл:if ( FileSeek (hand1e, fpos, SEEK_SET ) == false ){ //перемещаем указатель на новую позицию, которую мы запомнили в FileTell
error = GetLastError (); //если ошибкаPrint ( "out: error(" ,error, "): " ,ErrorDescription(error)); //записываем её в лог
flag = false ;
return ; //и выходим
} else {
int last.index= ArraySize (ask)- 1 ;
FileWriteInteger (hand1e, time, LONG_VALUE); //TimeCurrent()FileWriteDouble (hand1e, bid[ 0 ], DOUBLE_VALUE); //Open[]FileWriteDouble (hand1e, bid[ ArrayMaximum (bid)], DOUBLE_VALUE); //High[]FileWriteDouble (hand1e, ask[ ArrayMinimum (ask)], DOUBLE_VALUE); //Low[]FileWriteDouble (hand1e, ask[last.index], DOUBLE_VALUE); //Close[]FileWriteDouble (hand1e, last.index+ 1 , DOUBLE_VALUE); //Volume[]FileFlush (hand1e);
fpos = FileTell (hand1e); //запоминаем позицию записи в файле
}
코드에 대한 참고 사항.
1. CPU 시간을 절약하기 위해 가상 양초를 선택할 때 대소문자를 바꾸지 않고 대신 선택 항목이 있는 섹션을 주석 처리했습니다.
2. 현지 시간(오프라인, 즉)으로 작업하기 위해 염두에 두지 않았습니다. 루프 " while(time==TimeLocal()){//1초가 지날 때까지 ", FileWriteDouble 에 MarketInfo 가 있어야 한다고 생각합니다. 거기에서 더 논리적인 것이 무엇인지 말씀해 주시면 감사하겠습니다.
3. 작가의 디자인
if (flag == true )
{
if (tick.time.local == true )
{
time = TimeLocal ();
}
else {
time = TimeCurrent ();
}
그래서 그것은 중요하지 않습니다. MathAbs를 통해 모듈로 절대값을 반환합니다.
진입점을 찾고 있다면 MathAbs() 가 블러를 도입합니다. 나를 위해, 언제, 어떤 공차를 가지고 있는지 명확하게 하기 위해 시작과 끝을 표시하는 것이 필요합니다!
진입점을 찾고 있다면 MathAbs()가 블러를 도입합니다. 나를 위해, 언제, 어떤 공차를 가지고 있는지 명확하게 하기 위해 시작과 끝을 표시하는 것이 필요합니다!
수정 ... 모두 동일하게 조건이 충족되지 않습니다.
returnSign[i] = true 까지 ; 따라서 VrPr 기능(내가 모니터링하는 데이터를 표시하는 기능) 이전에는 사용되지 않습니다. 하향 교차는 이미 시작되었지만.. 여기 화면에서 각각의 빠른 마우스가 느린 것을 교차할 때마다 crossDir[] 배열이 채워지는 것을 볼 수 있습니다..
2개의 눈금이 가장 두꺼운 눈금을 가로지르고 2개의 배열 요소가 이미 값 1 을 인쇄했음을 유의하십시오. 그리고 이것은 그들의 값이 CROSS_DN 임을 의미합니다.
그리고 이것은 조건이 충족되어야 함을 의미합니다
if (crossDir[i] == CROSS_DN)
그리고 더...
진입점을 찾고 있다면 MathAbs()가 블러를 도입합니다. 나를 위해, 언제, 어떤 공차를 가지고 있는지 명확하게 하기 위해 시작과 끝을 표시하는 것이 필요합니다!
누구와 왜.
누구와 왜.
시각적인 지각이 단순하지 않다면, MathAbc()가 없어도 습관처럼 .. 별차이가 없습니다. 그러나 우리는 주제에서 벗어납니다. 일부 있습니다. 내 코드에 대한 설명? 질문은 열려 있습니다 ...
아니요.
좋은 오후에요 여러분!
Alpari의 MT-4에서 USD/JPY 쌍을 테스트하고 있습니다.
로드된 USD/JPY 분 기록
참고: 시세 아카이브에서 분 기록을 다운로드한 후 "1분"을 두 번 클릭합니다.
어떤 이유로 데이터베이스의 Quotes Archive 창에 분 인용문 목록이 나타나지 않았습니다.
TF-1시간.
모든 틱
기간 01.01.2000. - 2013년 1월 1일.
테스트가 끝나면 REPORT 탭에 빨간색 막대가 표시되고 시뮬레이션 품질이 25%라고 표시됩니다.
동일한 매개변수로 같은 기간을 테스트 했지만 ......별로 매월
매월 - 스트립은 녹색이고 시뮬레이션 품질은 90%입니다.
그런 다음 같은 기간을 테스트했지만 2000-2006년과 2006-2013년의 동일한 두 부분으로 나눴습니다.
각 부품에 대해 - 스트립은 녹색이고 모델링 품질은 90%입니다.
문제
13년 동안 전체 테스트의 품질도 90%가 되도록 하려면 어떻게 해야 합니까?
감사해요
그래서. 마치듯이. 다음은 두 번째 양초에 포장하는 재설계된 틱 피커입니다.
그것은 다음과 같았습니다.
그것은되었다:
코드에 대한 참고 사항.
1. CPU 시간을 절약하기 위해 가상 양초를 선택할 때 대소문자를 바꾸지 않고 대신 선택 항목이 있는 섹션을 주석 처리했습니다.
2. 현지 시간(오프라인, 즉)으로 작업하기 위해 염두에 두지 않았습니다. 루프 " while (time== TimeLocal ()){ //1초가 지날 때까지 ", FileWriteDouble 에 MarketInfo 가 있어야 한다고 생각합니다. 거기에서 더 논리적인 것이 무엇인지 말씀해 주시면 감사하겠습니다.
3. 작가의 디자인
처음으로 init()의 맨 끝에 선언했습니다.
4. init() 동적 배열 의 시작 부분에서
사용된 변수 대신.
5. 최적화를 위해 이론적으로 WinAPI 파일 기능을 사용하고 44바이트 블록(MarketInfo 구조의 길이 또는 .hst의 길이)에 한 번에 기록을 쓸 수 있습니다.
6. Time[] 셀에 쓰기 위한 작성자의 시간 모델링을 완전히 제거했습니다. 같은 이유로 기본 while 루프에는 TimeLocal()이 없고 TimeCurrent()만 있습니다.
7. 코드를 최적화하기 위해 또 무엇을 제안하시겠습니까?