사용자 정의 기호. 오류, 버그, 질문, 제안. - 페이지 18

 

버그 24.

전달 및 가져온 틱의 데이터베이스가 잘못 공존합니다.

 #define PRINT(A) Print ( #A + " = " + ( string )(A))

void OnInit ()
{
   MathSrand (( int ) TimeLocal ());
   EventSetMillisecondTimer ( 20 ); // С такой частотой будем пробрасывать тики
}

void OnTimer ()
{
   static bool FirstRun = true ;
   static const string Name = _Symbol + ( string ) MathRand ();
    
   static MqlTick Ticks[];
   static int Pos = 0 ;
    
   if (FirstRun)
  {    
     if ( CustomSymbolCreate (Name, NULL , _Symbol ) && SymbolSelect (Name, true )) // Создали символ
      PRINT( CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , ( ulong ) D'2019.06.20' * 1000 , 5 )); // Взяли 5 тиков для проброса
      
    FirstRun = false ;
  }
   else if (Pos < ArraySize (Ticks))
  {
     MqlTick Tick[ 1 ];
    
    Tick[ 0 ] = Ticks[Pos++];
    
    PRINT( CustomTicksAdd (Name, Tick)); // Пробросили тик.
    PRINT( CustomTicksReplace (Name, Tick[ 0 ].time_msc, Tick[ 0 ].time_msc, Tick)); // Заменили его же через импорт.
  }
   else
  {
    PRINT( CopyTicksRange (Name, Ticks)); // Взяли всю тиковую историю
     ArrayPrint (Ticks);                   // Распечатали ее.
    
     ExpertRemove ();
  }
}


결과

 CopyTicks ( _Symbol ,Ticks, COPY_TICKS_ALL ,( ulong ) D'2019.06.20' * 1000 , 5 ) = 5
CustomTicksAdd (Name,Tick) = 1
CustomTicksReplace (Name,Tick[ 0 ].time_msc,Tick[ 0 ].time_msc,Tick) = 1
CustomTicksAdd (Name,Tick) = 1
CustomTicksReplace (Name,Tick[ 0 ].time_msc,Tick[ 0 ].time_msc,Tick) = 1
CustomTicksAdd (Name,Tick) = 1
CustomTicksReplace (Name,Tick[ 0 ].time_msc,Tick[ 0 ].time_msc,Tick) = 1
CustomTicksAdd (Name,Tick) = 1
CustomTicksReplace (Name,Tick[ 0 ].time_msc,Tick[ 0 ].time_msc,Tick) = 1
CustomTicksAdd (Name,Tick) = 1
CustomTicksReplace (Name,Tick[ 0 ].time_msc,Tick[ 0 ].time_msc,Tick) = 1
CopyTicksRange (Name,Ticks) = 10
                 [time]   [bid]   [ask] [last] [volume]    [time_msc] [flags] [volume_real]
[ 0 ] 2019.06 . 20 00 : 00 : 05 1.12255 1.12268 0.0000          0 1560988805004        6        0.00000
[ 1 ] 2019.06 . 20 00 : 00 : 07 1.12259 1.12268 0.0000          0 1560988807693        2        0.00000
[ 2 ] 2019.06 . 20 00 : 00 : 08 1.12259 1.12267 0.0000          0 1560988808627        4        0.00000
[ 3 ] 2019.06 . 20 00 : 00 : 09 1.12256 1.12267 0.0000          0 1560988809561        2        0.00000
[ 4 ] 2019.06 . 20 00 : 00 : 10 1.12255 1.12268 0.0000          0 1560988810083        6        0.00000
[ 5 ] 2019.06 . 20 00 : 00 : 05 1.12255 1.12268 0.0000          0 1560988805004        6        0.00000
[ 6 ] 2019.06 . 20 00 : 00 : 07 1.12259 1.12268 0.0000          0 1560988807693        6        0.00000
[ 7 ] 2019.06 . 20 00 : 00 : 08 1.12259 1.12267 0.0000          0 1560988808627        6        0.00000
[ 8 ] 2019.06 . 20 00 : 00 : 09 1.12256 1.12267 0.0000          0 1560988809561        6        0.00000
[ 9 ] 2019.06 . 20 00 : 00 : 10 1.12255 1.12268 0.0000          0 1560988810083        6        0.00000


5개의 틱을 연속적으로 드롭/임포트하여 히스토리에서 10개의 틱을 찾았습니다.동시에 5개의 틱이 먼저 이동한 다음 동일한 5개의 틱이 이동합니다. 저것들. 틱 데이터베이스의 항목 시간조차도 일관되지 않습니다.

틱의 후반부의 플래그에주의를 기울이십시오. 첫 번째와 다릅니다.

 
Slava :

재생할 수 없습니다. 막대를 가져온 직후 빈 차트가 업데이트됩니다.

그래프가 열려 있지 않으면 어떻게 됩니까? 막대를 가져온 후 차트를 엽니 다.

또는 차트를 닫았다가 엽니다.

또는 차트의 컨텍스트 메뉴에서 차트를 업데이트합니다.

선행 질문 )))

막대를 가져오고 모든 창을 닫았습니다.

그런 다음 심볼을 다시 열고 막대 탭으로 이동하여 내 심볼을 선택했습니다.

막대가 표시되어야 합니까? 거기는 비어 있습니다.

로드 버튼을 클릭하면(커버링 기간의 예비 선택 포함) - 또한 표시되지 않습니다.

시도 버전 1970 - 동일한 상황입니다.

차트와 프로그램을 열고 닫는 것은 도움이 되지 않습니다.

아직 프로그래밍에 입문하는 것은 쉽지 않습니다.

뭐, 이렇게 되어야...


가능하다면 원격으로 연결하고 그녀에게 필요한 것이 무엇인지 살펴보세요.

 

https://www.mql5.com/ru/forum/147666/page2#comment_3720399

아마도 누군가가 도울 것입니다
하지만 나는 다른 파슬리를 가지고 있었다
1. 2019.hcc 파일에 추가로 1970.hcc 파일이 생성되었습니다.
제거 후 이미 생명을 얻었습니다.
2. o 또는 h가 lh 밖에 있는 빨간색 선이 있었습니다.

1970은 어디에서 왔습니까 - 불분명
그런 날짜가 없었고 빈 줄이 없었습니다
아마도 많은 양초, 50k 미만

볼 수 있지만 더 눈에 띄는 진폭의 그래프를 확장하는 방법은 무엇입니까?
물건을 만들 때 양초의 끝을 정확하게 겨냥해야 합니다.
속성으로 이동하여 수동으로 값을 입력하는 것이 불편합니다.
그 후, 그래프가 끝으로 이동합니다. 다시 감아야 합니다.
마지막 막대로 점프하지 않도록 수정하는 방법은 무엇입니까?

Тестер не работает
Тестер не работает
  • 2013.11.04
  • www.mql5.com
2013.11.03 17:25:58 TestGenerator: no history data 'EURUSD1' Вот такое сообщение появляется в журнале после нажатия кнопки "Старт"...
 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

Stanislav Korotky , 2019.08.22 17:34

사용자 정의 기호와 관련하여 다음과 같은 문제가 발생한 사람이 있습니까? 일반적인 따옴표는 CustomRatesUpdate 함수에 전달되지만 실제로 차트와 데이터 창에 이상한 것이 표시됩니다(이 경우 닫기 및 낮은 값은 전달된 값보다 100배 작음).

또한 단일 틱은 로그와 동일한 종가 값으로 CustomTicksAdd를 사용하여 동시에 에뮬레이트됩니다(CustomRatesUpdate 직전). 따옴표로 묶인 감소된 값의 출처는 명확하지 않습니다.

상향:

USDCAD에서는 어떤 의미에서 "역" 상황이 발생했습니다. 기록 이후에 따옴표가 10배 증가합니다. 이것은 내가 얻는 로그입니다.

 2019.08 . 23 00 : 04 : 10.579 RenkoCharts (USDCAD,M1)                  [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
2019.08 . 23 00 : 04 : 10.579 RenkoCharts (USDCAD,M1) [ 0 ] 2019.08 . 23 00 : 02 : 00 1.32987 1.32987 1.32980 1.32987            457        48              0
2019.08 . 23 00 : 04 : 10.579 RenkoCharts (USDCAD,M1) Retry: 1 0
2019.08 . 23 00 : 04 : 10.579 RenkoCharts (USDCAD,M1)                  [time]  [open]   [high]   [low]  [close] [tick_volume] [spread] [real_volume]
2019.08 . 23 00 : 04 : 10.579 RenkoCharts (USDCAD,M1) [ 0 ] 2019.08 . 23 00 : 02 : 00 1.32980 13.29730 1.32980 13.29730            457        52              0

첫 번째 ArrayPrint는 CustomRatesUpdate에 쓰여진 것이고, 두 번째 ArrayPrint는 쓰기 직후 가장 최근의 바에서 CopyRates를 사용하여 읽은 것입니다. 첫째, 차이는 시가의 마지막 자릿수에 있지만 더 중요한 것은 고가와 종가가 10배 증가한다는 것입니다.

추신. 틱에서 모든 것이 정상입니다.

 

Stanislav Korotky :

추신. 틱에서 모든 것이 정상입니다.

버그 22.

 
fxsaber :

버그 22.

최신 빌드에서 수정되었습니까?

 

오류 4022는 무엇입니까? 사용자 정의 기호에 막대를 쓰려는 시도와 어떻게든 연결되었습니다. 그러나 코드로 판단하면 일반에 속합니다.

이것이 먼저 나왔습니다.

KI       0        16 : 24 : 20.957     RenkoCharts (XAUUSD,M1) Alert : Error on writing custom record: 3082 , err: 4401
HS       0        16 : 24 : 20.957     RenkoCharts (XAUUSD,M1) Failed to add:
LE       0        16 : 24 : 20.957     RenkoCharts (XAUUSD,M1)                  [time]   [open]   [high]    [low]  [close] [tick_volume] [spread] [real_volume]
KG       0        16 : 24 : 20.957     RenkoCharts (XAUUSD,M1) [ 0 ] 2019.08 . 28 00 : 06 : 00 1542.500 1542.500 1542.400 1542.400              15        170              0
GF       0        16 : 24 : 20.957     RenkoCharts (XAUUSD,M1) Last known 10 M1:
JN       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1)                  [time]   [open]   [high]    [low]  [close]       [tick_volume] [spread]       [real_volume]
JJ       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 0 ] 2019.08 . 28 00 : 00 : 00 1543.100 1543.100 1543.000 1543.000                    4        180                    0
DE       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 1 ] 2019.08 . 28 00 : 01 : 00 1543.000 1543.000 1542.900 1542.900                    2        180                    0
EP       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 2 ] 2019.08 . 28 00 : 02 : 00 1542.900 1542.900 1542.800 1542.800                    1        180                    0
ES       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 3 ] 2019.08 . 28 00 : 03 : 00 1542.800 1542.800 1542.700 1542.700                    1        180                    0
EN       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 4 ] 2019.08 . 28 00 : 04 : 00 1542.700 1542.700 1542.600 1542.600                    1        180                    0
QH       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 5 ] 2019.08 . 28 00 : 05 : 00 1542.600 1542.700 1542.500 1542.500                    30        170                    0
RE       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 6 ] 1970.01 . 01 00 : 00 : 00    + 0.000    + 0.000    + 0.000    + 0.000            5365435195          1 1827299883397152768
FF       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 7 ] 2106.02 . 07 06 : 28 : 16      0.078    + 0.000    + 0.000    + 0.000 4597373804417646592          1                  9481
KR       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 8 ] 1970.01 . 01 00 : 00 : 00    + 0.000    + 0.000    + 0.000    + 0.000            136454688          1 1827300776750350336
KL       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) [ 9 ] 0000.00 . 00 00 : 00 : 00    + 0.000      2.150    + 0.000    + 0.000 1287860306076237824          0            4294967300
CH       0        16 : 24 : 20.973     RenkoCharts (XAUUSD,M1) Timeout before retry...

4401 CustomRatesUpdate 를 호출할 때 다음으로 CopyRates를 사용하여 사용자 정의 기호의 마지막 10개 막대를 읽습니다(데이터베이스에 일종의 쓰레기가 있음을 알 수 있음). 그 후 몇 번의 타임아웃 끝에 4022가 나올 때까지 한 마디를 다시 녹음하려고 몇 번 시도하다가 Expert Advisor의 비정상 종료 후 다시 시작되었습니다.

 

질문은 ~이야.

사용자 지정 기호에서 정지 및 정지 수준을 동적으로 변경해야 합니다.

다음 테스트 EA 코드가 있습니다.

 //+------------------------------------------------------------------+
//| Globals                                                          |
//+------------------------------------------------------------------+
string symbol_name= "EURUSD_1" ;
string symbol_path= "" ;
string symbol_origin= "EURUSD" ;
long stop_lvl= 20 ;
long freeze_lvl= 30 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- 1) create
   if (!:: SymbolInfoInteger (symbol_name, SYMBOL_CUSTOM ))
     {
       ResetLastError ();
       if (!:: CustomSymbolCreate (symbol_name,symbol_path,symbol_origin))
        {
         PrintFormat ( "Error code: %d" , GetLastError ());
         return INIT_FAILED ;
        }
     }
//--- 2) set levels
   ResetLastError ();
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL ,stop_lvl))
     {
       PrintFormat ( "Error code: %d" , GetLastError ());
       return INIT_FAILED ;
     }
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL ,freeze_lvl))
     {
       PrintFormat ( "Error code: %d" , GetLastError ());
       return INIT_FAILED ;
     }
//---
   return INIT_SUCCEEDED ;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- 1) stop level
   stop_lvl=:: SymbolInfoInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL );
   if (stop_lvl== 20 )
      stop_lvl= 30 ;
   else
      stop_lvl= 20 ;
   ResetLastError ();
   if (:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL ,stop_lvl))
     {
       PrintFormat ( "Error code while setting a new value for the stop level: %d" ,
                   GetLastError ());
       return ;
     }
//--- 2) freeze level
   freeze_lvl=:: SymbolInfoInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL );
   if (freeze_lvl== 30 )
      freeze_lvl= 40 ;
   else
      freeze_lvl= 30 ;
   if (:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL ,freeze_lvl))
     {
       PrintFormat ( "Error code while setting a new value for the freeze level: %d" ,
                   GetLastError ());
       return ;
     }
  }
//+------------------------------------------------------------------+

일반 디버깅 모드에서는 OnTick() 핸들러 본문에만 오류가 발생합니다. 그리고 에러코드는 0입니다.

 2019.09 . 09 23 : 25 : 05.010 TestingLevels (EURUSD,M1)       Error code while setting a new value for the stop level: 0


기록의 디버그 모드 에서 초기화 즉시 오류가 발생합니다. 오류는 다음과 같습니다.

 2019.09 . 09 23 : 29 : 43.005 2019.09 . 02 00 : 00 : 00    Error code: 4014

저것들. 시스템 함수 호출에 대한 금지가 있습니다.

ERR_FUNCTION_NOT_ALLOWED

4014

시스템 기능을 호출할 수 없습니다.


일반적으로 EA가 사용자 지정 기호에서 실행되는 동안 정지 수준 및 정지 수준 값을 변경할 수 있습니까?

 
Denis Kirichenko :

질문은 ~이야.

사용자 지정 기호에서 정지 및 정지 수준을 동적으로 변경해야 합니다.

다음 테스트 EA 코드가 있습니다.

일반 디버깅 모드에서는 OnTick() 핸들러 본문에만 오류가 발생합니다. 그리고 에러코드는 0입니다.


기록의 디버그 모드 에서 초기화 즉시 오류가 발생합니다. 오류는 다음과 같습니다.

저것들. 시스템 함수 호출에 대한 금지가 있습니다.

ERR_FUNCTION_NOT_ALLOWED

4014

시스템 기능을 호출할 수 없습니다.


일반적으로 EA가 사용자 지정 기호에서 실행되는 동안 정지 수준 및 정지 수준 값을 변경할 수 있습니까?

그리고 왜 OnTick() 라인에서

 if (:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL ,stop_lvl))

그리고

 if (:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL ,freeze_lvl))

기호 속성이 성공적으로 변경되면 오류 처리 블록의 본문을 입력합니까? ("!" 기호 없음)

 
Artyom Trishkin :

그리고 왜 OnTick() 라인에서

그리고

기호 속성이 성공적으로 변경되면 오류 처리 블록의 본문을 입력합니까? ("!" 기호 없음)

Artyom, 감사합니다! 내 감독.

업데이트된 버전:

 //+------------------------------------------------------------------+
//| Globals                                                          |
//+------------------------------------------------------------------+
string symbol_name= "EURUSD_1" ;
string symbol_path= "" ;
string symbol_origin= "EURUSD" ;
long stop_lvl= 20 ;
long freeze_lvl= 30 ;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- 1) create
   if (!:: SymbolInfoInteger (symbol_name, SYMBOL_CUSTOM ))
     {
       ResetLastError ();
       if (!:: CustomSymbolCreate (symbol_name,symbol_path,symbol_origin))
        {
         PrintFormat ( "Error code: %d" , GetLastError ());
         return INIT_FAILED ;
        }
     }
//--- 2) set levels
   ResetLastError ();
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL ,stop_lvl))
     {
       PrintFormat ( "Error code: %d" , GetLastError ());
       return INIT_FAILED ;
     }
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL ,freeze_lvl))
     {
       PrintFormat ( "Error code: %d" , GetLastError ());
       return INIT_FAILED ;
     }
//---
   return INIT_SUCCEEDED ;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- 1) stop level
   stop_lvl=:: SymbolInfoInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL );
   if (stop_lvl== 20 )
      stop_lvl= 30 ;
   else
      stop_lvl= 20 ;
   ResetLastError ();
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL ,stop_lvl))
     {
       PrintFormat ( "Error code while setting a new value for the stop level: %d" ,
                   GetLastError ());
       return ;
     }
//--- 2) freeze level
   freeze_lvl=:: SymbolInfoInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL );
   if (freeze_lvl== 30 )
      freeze_lvl= 40 ;
   else
      freeze_lvl= 30 ;
   if (!:: CustomSymbolSetInteger (symbol_name, SYMBOL_TRADE_FREEZE_LEVEL ,freeze_lvl))
     {
       PrintFormat ( "Error code while setting a new value for the freeze level: %d" ,
                   GetLastError ());
       return ;
     }
  }
//+------------------------------------------------------------------+

이제 모든 것이 일반 디버깅 모드 에서 작동합니다. 그러나 테스터에는 없습니다. 그곳에서 그는 계속해서 다음과 같이 쓰고 있습니다.

 2019.09 . 10 07 : 16 : 49.867 2019.09 . 03 00 : 00 : 00    Error code: 4014