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

 
hoz :
그래서 그것은 중요하지 않습니다. MathAbs를 통해 모듈로 절대값을 반환합니다.


진입점을 찾고 있다면 MathAbs() 가 블러를 도입합니다. 나를 위해, 언제, 어떤 공차를 가지고 있는지 명확하게 하기 위해 시작과 끝을 표시하는 것이 필요합니다!
 
borilunad :

진입점을 찾고 있다면 MathAbs()가 블러를 도입합니다. 나를 위해, 언제, 어떤 공차를 가지고 있는지 명확하게 하기 위해 시작과 끝을 표시하는 것이 필요합니다!


수정 ... 모두 동일하게 조건이 충족되지 않습니다.

 //+-------------------------------------------------------------------------------------+
//| Получение значений МА на указанном баре                                             |
//+-------------------------------------------------------------------------------------+
double GetMA( int index, int maPeriod)
{
   return ( iMA ( NULL , i_TF, maPeriod, 0 , MODE_EMA , MODE_CLOSE, index));
}
//+-------------------------------------------------------------------------------------+
//| Имеет ли место отскок?                                                              |
//+-------------------------------------------------------------------------------------+
void IsRebound( int crossDir[], bool & returnSign[])
{
   for ( int i = 0 ; i < 4 ; i++)
   {
       if (crossDir[i] == CROSS_NO)
         continue ;

      returnSign[i] = false ;
       double ema = GetMA( 1 , g_maPeriod[i]);

 //     VrPr (ND(MathAbs(ema - Ask)));
   //   VrPr (i_thresholdFromMa * pt);
       if (crossDir[i] == CROSS_UP)
      {
         if (ND(Ask - ema) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
         {
         //   VrPr (ND(MathAbs(ema - Ask)) <= i_thresholdFromMa * pt);
            returnSign[i] = true ;
            VrPr ( " returnSign[" + 0 + "]" + " = " + returnSign[ 0 ]);
            VrPr ( " returnSign[" + 1 + "]" + " = " + returnSign[ 1 ]);
            VrPr ( " returnSign[" + 2 + "]" + " = " + returnSign[ 2 ]);
            VrPr ( " returnSign[" + 3 + "]" + " = " + returnSign[ 3 ]);
         }
      }
       if (crossDir[i] == CROSS_DN)
      {
         if (ND(ema - Bid) <= i_thresholdFromMa * pt) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true ;
            VrPr ( " returnSign[" + 0 + "]" + " = " + returnSign[ 0 ]);
            VrPr ( " returnSign[" + 1 + "]" + " = " + returnSign[ 1 ]);
            VrPr ( " returnSign[" + 2 + "]" + " = " + returnSign[ 2 ]);
            VrPr ( " returnSign[" + 3 + "]" + " = " + returnSign[ 3 ]);
         }
      }
   }
}

returnSign[i] = true 까지 ; 따라서 VrPr 기능(내가 모니터링하는 데이터를 표시하는 기능) 이전에는 사용되지 않습니다. 하향 교차는 이미 시작되었지만.. 여기 화면에서 각각의 빠른 마우스가 느린 것을 교차할 때마다 crossDir[] 배열이 채워지는 것을 볼 수 있습니다..

2개의 눈금이 가장 두꺼운 눈금을 가로지르고 2개의 배열 요소가 이미 값 1 을 인쇄했음을 유의하십시오. 그리고 이것은 그들의 값이 CROSS_DN 임을 의미합니다.

그리고 이것은 조건이 충족되어야 함을 의미합니다

  if (crossDir[i] == CROSS_DN)

그리고 더...

 
borilunad :

진입점을 찾고 있다면 MathAbs()가 블러를 도입합니다. 나를 위해, 언제, 어떤 공차를 가지고 있는지 명확하게 하기 위해 시작과 끝을 표시하는 것이 필요합니다!

누구와 왜.
 
tara :

누구와 왜.

시각적인 지각이 단순하지 않다면, 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%가 되도록 하려면 어떻게 해야 합니까?

감사해요

 

그래서. 마치듯이. 다음은 두 번째 양초에 포장하는 재설계된 틱 피커입니다.

그것은 다음과 같았습니다.

 int start()
  {  
//----
if (flag == true )
  {
   if (tick.time.local == true )
    {
    time = TimeLocal ();
    }
     else {
    time = TimeCurrent ();
    }
   if (t < time)
    { 
         t = time; 
    }
     else { 
         t ++;
    }   

   if ( FileSeek (hand1e, fpos, SEEK_SET ) == false )
           { 
           error = GetLastError ();
           Print ( "out: error(" ,error, "): " ,ErrorDescription(error));
           flag = false ;
           return ;
           }
           else {
           bid = MarketInfo(symbol, MODE_BID);
           ask = MarketInfo(symbol, MODE_ASK);
           
                 FileWriteInteger (hand1e,    t,   LONG_VALUE);            
                 FileWriteDouble (hand1e,  bid, DOUBLE_VALUE);          
                 FileWriteDouble (hand1e,  bid, DOUBLE_VALUE);            
                 FileWriteDouble (hand1e,  ask, DOUBLE_VALUE);    
                 FileWriteDouble (hand1e,  ask, DOUBLE_VALUE);                            
                 FileWriteDouble (hand1e, time, DOUBLE_VALUE);                   
       FileFlush        (hand1e);  

      fpos = FileTell (hand1e);

그것은되었다:

 int i; //аналогично i=0
         while (( 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 ();
    }

처음으로 init()의 맨 끝에 선언했습니다.

4. init() 동적 배열 의 시작 부분에서

   IndicatorBuffers( 2 );
   SetIndexBuffer ( 0 , bid);
   SetIndexBuffer ( 1 , ask);

사용된 변수 대신.

5. 최적화를 위해 이론적으로 WinAPI 파일 기능을 사용하고 44바이트 블록(MarketInfo 구조의 길이 또는 .hst의 길이)에 한 번에 기록을 쓸 수 있습니다.

6. Time[] 셀에 쓰기 위한 작성자의 시간 모델링을 완전히 제거했습니다. 같은 이유로 기본 while 루프에는 TimeLocal()이 없고 TimeCurrent()만 있습니다.

7. 코드를 최적화하기 위해 또 무엇을 제안하시겠습니까?

사유: