초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 442

 

모두 좋은 저녁,

하나.

전략 - 바가 나타났습니다. 손절매와 이익실현(sl, tp) 으로 보류 주문을 하는 것 외에는 아무 것도 없습니다.

현재 막대에서 잠시 후 주문이 작동하기 위해 가격이 표시되고 나중에 가격 sl 이 올 것이고 그 다음 가격 tp 가 올 것이라고 가정해 보겠습니다.

명확히 하십시오 - 개시 가격으로 테스트할 때: 새로운 바의 개시 가격 = sl 및 tp 경계에서 멀리 떨어진 어딘가에 있다고 가정해 봅시다. 계산은 어떻게 이루어지나요?

논리적으로, 안 돼요, 테스터에게는 다음 바 시작 가격만 있기 때문인가요? 하지만 미결제 주문 개시 조건에 명시된 가격과 일치하지 않아 해당 주문을 건드리면 안 된다.

그러나 테스터에서 실행될 때 거래가 어떻게 든 이루어지고 중지가 트리거됩니다. 어떤 방법으로?

2.

테스터는 시작할 때마다 fxt를 생성합니다. 그리고 지금이 시간입니다. 나는 이것을 피하는 것을 암시하는 설정을 찾지 못했습니다 ... 이론상: 한 번 만들고 아무것도 변경하지 않으면 이 파일을 사용하지만 아니요, 터미널에서 덮어씁니다.

 
말해 주세요. EA가 init()를 처리하기 위해 틱이 필요합니까?
 
-Aleks- :
말해 주세요. EA가 init()를 처리하기 위해 틱이 필요합니까?

아니요. 필요하지 않습니다. 볼 수 있도록 도와주는 코드는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                                  test_expert.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright    "Copyright 2015, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version      "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- 
   Print ( __FUNCTION__ );
   return ( INIT_FAILED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   Print ( __FUNCTION__ );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   Print ( __FUNCTION__ );
  }
//+------------------------------------------------------------------+
차트에 첨부하고 주말에 어떤 기능이 작동하는지 확인하십시오.
 
-Aleks- :
말해 주세요. EA가 init()를 처리하기 위해 틱이 필요합니까?
그렇지 않은 것 같다.
 
Karputov Vladimir :

아니요. 필요하지 않습니다. 볼 수 있도록 도와주는 코드는 다음과 같습니다.

차트에 첨부하고 주말에 어떤 기능이 작동하는지 확인하십시오.
타포춘 :
그렇지 않은 것 같다.
귀하의 신속한 응답에 감사드립니다. 그런 다음 작동하지 않는 이유를 이해할 수 없습니다. 인쇄가 필요하지 않습니다.
 
-Aleks- :
귀하의 신속한 응답에 감사드립니다. 그런 다음 작동하지 않는 이유를 이해할 수 없습니다. 인쇄가 필요하지 않습니다.
당신의 지문은 어디에 있습니까? 재현할 코드가 있습니까?
 
Karputov Vladimir :
당신의 지문은 어디에 있습니까? 재현할 코드가 있습니까?

초기화는 단말이 로드될 때 발생하는 것이 아니라 시간대가 변경될 때 발생하는 것으로 밝혀졌습니다.

10명의 Expert Advisors가 초기 초기화 과정에서 하나의 파일을 읽을 때 문제가 없는지 확인해야 하는데...

클래스를 사용하고 있습니다.

 int init()
  {
//Автоматическая настройка
   if (Use_SetupLoad== true )
     {
      CSVReader FileLoads(FileLoadSetup);
      FileLoads.SetDelimiter( ';' );
      FileLoads.SetCommon( true );
       int StrokaSetup= 0 ;
       if (FileLoads.Load( 1 ))
        {
         PrintFormat ( "File %s loaded. Total rows=%d, Total columns=%d" ,FileLoads.FileName(),FileLoads.TotalRows(),FileLoads.TotalColumns());
         
         for ( int i= 1 ;i< 30 ; i++)
         //for (int i=1; i<100 || StrokaSetup!=0; i++)
         {
           if (Magic==FileLoads.GetIntValue(i, 13 ))
           {
            StrokaSetup=i ;
             Print ( "StrokaSetup=" ,StrokaSetup);
             break ;
            }
         //   if (i==100) i=1;
         //  Print (FileLoads.GetIntValue(i,13));
         }
         /*
         for (int i=1; i<30; i++)
         {
         Print (FileLoads.GetIntValue(i,13));         
         }
         */
         if (StrokaSetup!= 0 )
           {
            pipsXH=FileLoads.GetIntValue(StrokaSetup, 4 )/ 10 ;
             if (pipsXH> 0 )
            {
            pMAH=FileLoads.GetIntValue(StrokaSetup, 3 );
   //         typeMAH=FileLoads.GetIntValue(StrokaSetup,3);
   //         priceMAH=FileLoads.GetIntValue(StrokaSetup,2);
            
   //          if (pipsXH<0)
   //          PrintFormat("pMAH=%d",pMAH,"typeMAH=%d",typeMAH,"priceMAH=%d",priceMAH,"pipsXH=%d",pipsXH);
            }
             else pipsXH=(- 1 );
            
            pipsXL=FileLoads.GetIntValue(StrokaSetup, 7 )/ 10 *(- 1 );
             if (pipsXL> 0 )
            {
            pMAL=FileLoads.GetIntValue(StrokaSetup, 6 );
     //       typeMAL=FileLoads.GetIntValue(StrokaSetup,3);
     //       priceMAL=FileLoads.GetIntValue(StrokaSetup,2);
            
       //      PrintFormat("pMAL=%d",pMAL,"typeMAL=%d",typeMAL,"priceMAL=%d",priceMAL,"pipsXL=%d",pipsXL);
            }
             else pipsXL=(- 1 );
                        
            pMAT=FileLoads.GetIntValue(StrokaSetup, 9 );
       //      typeMAT=FileLoads.GetIntValue(StrokaSetup,3);
       //      priceMAT=FileLoads.GetIntValue(StrokaSetup,2);
       //      PrintFormat("pMAT=%d",pMAT,"typeMAT=%d",typeMAT,"priceMAT=%d",priceMAT);
            
            lot=FileLoads.GetDoubleValue(StrokaSetup, 11 );
       //    PrintFormat("pMAH=%d",pMAH,"pipsXH=%d",pipsXH,"pMAL=%d",pMAL,"pipsXL=%d",pipsXL,"lot=%d",lot);            
             Print ( "Magic=" ,Magic, " pMAH=" ,pMAH, " pipsXH=" ,pipsXH, " pMAL=" ,pMAL, " pipsXL=" ,pipsXL, " lot=" ,lot);            
            
           }

        }
       else PrintFormat ( "Error in loading data from %s" ,FileLoads.FileName());
     }
///Конец автоматической настройки///  
   return ( INIT_SUCCEEDED );
  } 

파일 읽기를 담당하는 클래스의 일부

 //+------------------------------------------------------------------+
//| Load                                                             |
//+------------------------------------------------------------------+
bool CSVReader::Load( int start_line)
  {
   int filehandle= FileOpen (m_filename, FILE_CSV | FILE_READ | FILE_ANSI | FILE_SHARE_READ , '\n' );
   if (filehandle== INVALID_HANDLE )
     {
       Alert ( "Error in open of file " ,m_filename, ", error" , GetLastError ());
       return ( false );
     }
//---
   int line_index= 0 ;
   while (! FileIsEnding (filehandle))
     {
       string str= FileReadString (filehandle);
       //--- skip 0th row
       if (line_index>=start_line)
         if (str!= "" )
           {
             if (line_index== 1 ) AddData(str, true );
             else AddData(str, false );
           }
      line_index++;
     }
//---
   FileClose (filehandle);
   return ( true );
  } 
 
-Aleks- :

초기화는 단말이 로드될 때 발생하는 것이 아니라 시간대가 변경될 때 발생하는 것으로 밝혀졌습니다.

10명의 Expert Advisors가 초기 초기화 과정에서 하나의 파일을 읽을 때 문제가 없는지 확인해야 하는데...

클래스를 사용하고 있습니다.

파일 읽기를 담당하는 클래스의 일부

따라서 인쇄하기 전에 코드에 많은 검사와 조건이 있습니다. 디버그 모드 로 들어가서 정확히 무엇이 작동하지 않는지 확인하십시오.
 
Karputov Vladimir :
따라서 인쇄하기 전에 코드에 많은 검사와 조건이 있습니다. 디버그 모드 로 들어가서 정확히 무엇이 작동하지 않는지 확인하십시오.
테스터에서 모든 것이 작동하지만 터미널을 로드할 때 인쇄가 표시되지 않습니다. 이것은 저를 혼란스럽게 했습니다.
 
-Aleks- :
테스터에서 모든 것이 작동하지만 터미널을 로드할 때 인쇄가 표시되지 않습니다. 이것은 저를 혼란스럽게 했습니다.
따라서 더 많은 인쇄물을 추가하고 알고리즘이 이동하는 위치를 추적할 가치가 있습니다.
사유: