버그 02.
사용자 지정 기호 따옴표의 마지막 주를 제거해야 합니다. 삭제할 수는 있지만 ChartRedraw조차도 시각적 효과를주지 않습니다.
차트를 마우스로 스크롤해야만 정상으로 돌아옵니다. ChartRedraw로 시각화를 수정할 수 있습니까?
PS 나는 지금 그런 왜곡을하고 있습니다
ChartSetInteger ( 0 , CHART_SHIFT , ! ChartGetInteger ( 0 , CHART_SHIFT )); Sleep ( 1000 ); ChartRedraw (); ChartSetInteger ( 0 , CHART_SHIFT , ! ChartGetInteger ( 0 , CHART_SHIFT ));
버그 03.
TicksAdd에는 다음과 같은 보호 기능이 있습니다. 틱이 Market Watch에 있는 것보다 이전이면 무시됩니다.
불행히도 이 메커니즘은 TicksDelete 및 TicksReplace와의 상호 작용을 제공하지 않습니다.
커스텀 심볼 히스토리의 마지막 날을 삭제하고 삭제 후 Market Watch에서 마지막 눈금을 설정하는 것이 필요합니다.
모든 것이 삭제 순서대로라면 위에서 설명한 규칙 때문에 마지막 눈금을 설정해도 아무 것도 나오지 않습니다.
TicksAdd 규칙을 변경하거나 TicksDelete/TicksReplace가 시간이 현재 시간보다 짧은 경우 Market Watch의 틱을 기록의 마지막 틱으로 교체하도록 제안합니다.
문제 재현
template < typename T> T MyPrint( const T Value, const string Str, const bool DebugFlag = false ) { Print (Str + " = " + ( string )Value); return (Value); } #define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + ( string ) __LINE__ + ": " + #A) // Макрос для удобного и наглядного вывода значений void OnStart () { const string Name = "TEMP1235" ; // Имя кастомного символа const string SymbOrig = "EURUSD" ; // Имя оригинального символа MqlTick Ticks[]; const int Size = _P( CopyTicksRange (SymbOrig, Ticks, COPY_TICKS_ALL , ( long ) D'2019.01.01' * 1000 )); // Считали EURUSD-тики за 2019 год. if ((Size > 0 ) && _P( CustomSymbolCreate (Name, NULL , SymbOrig)) && _P( SymbolSelect (Name, true ))) // Создали символ на основе EURUSD. { _P( CustomTicksReplace (Name, 0 , LONG_MAX , Ticks)); // Поместили в него историю EURUSD. MqlTick AddTicks[ 1 ]; AddTicks[ 0 ] = Ticks[Size - 1 ]; // Последний тик в истории. _P( CustomTicksAdd (Name, AddTicks)); // Последний тик добавили в Обзор рынка и еще раз в историю _P( CustomTicksDelete (Name, ( long ) D'2019.02.01' * 1000 , LONG_MAX )); // Удалили все тики, оставив только данные за январь 2019. _P( CopyTicks (Name, AddTicks, COPY_TICKS_ALL , 0 , 1 )); // Взяли последний тик из оставшейся истории. ArrayPrint (AddTicks); // Посмотрели, что это, действительно, последний тик января. _P( CustomTicksAdd (Name, AddTicks)); // Попробовали записать его в Обзор рынка - не получилось. _P( SymbolSelect (Name, false )); // Удалили символ из Обзора рынка. _P( CustomSymbolDelete (Name)); // Удалили символ. } }
결과
void OnStart (), Line = 11 : CopyTicksRange (SymbOrig,Ticks, COPY_TICKS_ALL ,( long ) D'2019.01.01' * 1000 ) = 3316638 void OnStart (), Line = 13 : CustomSymbolCreate (Name, NULL ,SymbOrig) = true void OnStart (), Line = 13 : SymbolSelect (Name, true ) = true void OnStart (), Line = 15 : CustomTicksReplace (Name, 0 , LONG_MAX ,Ticks) = 3316638 void OnStart (), Line = 20 : CustomTicksAdd (Name,AddTicks) = 1 void OnStart (), Line = 22 : CustomTicksDelete (Name,( long ) D'2019.02.01' * 1000 , LONG_MAX ) = 1159087 void OnStart (), Line = 23 : CopyTicks (Name,AddTicks, COPY_TICKS_ALL , 0 , 1 ) = 1 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [ 0 ] 2019.01 . 31 23 : 59 : 58 1.14461 1.14486 0.0000 0 1548979198644 2 0.00000 void OnStart (), Line = 26 : CustomTicksAdd (Name,AddTicks) = - 1 void OnStart (), Line = 28 : SymbolSelect (Name, false ) = true void OnStart (), Line = 29 : CustomSymbolDelete (Name) = true
소스 코드가 없으면 오류 메시지 가 단어로 남을 것임을 이해합니다. 도색을 하기 위해 부러진 만큼 오류를 보여주고 찾아내고 수정하는 가장 효과적인 방법이 아닐까 합니다.
어제야 합성 물질을 다루기 시작했는데 테스터에 말도 안되는 소리가 있습니다. 합성 물질은 테스터의 공식과 함께 작동합니까?
도움말에서 합성 공식을 만들었습니다. 괜찮은?
테스트 결과는 다음과 같습니다.
어떤 종류의 넌센스, 모든 거래는 수익성이 있으며 그림에서조차 알 수 없으며 테스트가 끝나면 모두 닫히고 이익은 0입니다. 제가 뭔가 잘못하고 있는 것 같습니다. 무엇을 더 볼 수 있습니까? 로그를 첨부합니다.
사용자 정의 기호와 해당 설정이 있는 폴더를 알려주십시오. 터미널 및 소프트웨어에서 삭제해도 도움이 되지 않습니다.
\MetaTrader5\Bases\Custom\
버그 04.
특정 재생과 관련된 또 다른 버그
template < typename T> T MyPrint( const T Value, const string Str, const bool DebugFlag = false ) { Print (Str + " = " + ( string )Value); return (Value); } #define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + ( string ) __LINE__ + ": " + #A) // Макрос для удобного и наглядного вывода значений void OnStart () { const string Name = "TEMP8" ; // Для каждого запуска нужно менять имя символа, чтобы увидеть проблему const string SymbOrig = "EURUSD" ; // Имя оригинального символа MqlTick Ticks[]; const int Size = _P( CopyTicksRange (SymbOrig, Ticks, COPY_TICKS_ALL , ( long ) D'2019.01.01' * 1000 )); // Считали EURUSD-тики за 2019 год. if ((Size > 0 ) && _P( CustomSymbolCreate (Name, NULL , SymbOrig)) && _P( SymbolSelect (Name, true ))) // Создали символ на основе EURUSD. { _P( CustomTicksReplace (Name, 0 , LONG_MAX , Ticks)); // Поместили в него историю EURUSD. MqlTick AddTicks[ 1 ]; AddTicks[ 0 ] = Ticks[Size - 1 ]; // Последний тик в истории. _P( CustomTicksAdd (Name, AddTicks)); // Последний тик добавили в Обзор рынка и еще раз в историю _P( CustomTicksDelete (Name, ( long ) D'2019.02.01' * 1000 , LONG_MAX )); // Удалили все тики, оставив только данные за январь 2019. _P( CopyTicks (Name, AddTicks, COPY_TICKS_ALL , 0 , 1 )); // Взяли последний тик из оставшейся истории. ArrayPrint (AddTicks); // Посмотрели, что это, действительно, последний тик января. const int NewSize = _P( CopyTicksRange (Name, Ticks)); // Запросили всю историю тиков кастомного символа _P( CopyTicks (Name, AddTicks, COPY_TICKS_ALL , 0 , 1 )); // Снова Взяли последний тик из истории. ArrayPrint (AddTicks); // Увидели, что последний тик изменился! _P( SymbolSelect (Name, false )); // Удалили символ из Обзора рынка. _P( CustomSymbolDelete (Name)); // Удалили символ. } }
결과
void OnStart (), Line = 11 : CopyTicksRange (SymbOrig,Ticks, COPY_TICKS_ALL ,( long ) D'2019.01.01' * 1000 ) = 3316638 void OnStart (), Line = 13 : CustomSymbolCreate (Name, NULL ,SymbOrig) = true void OnStart (), Line = 13 : SymbolSelect (Name, true ) = true void OnStart (), Line = 15 : CustomTicksReplace (Name, 0 , LONG_MAX ,Ticks) = 3316638 void OnStart (), Line = 20 : CustomTicksAdd (Name,AddTicks) = 1 void OnStart (), Line = 22 : CustomTicksDelete (Name,( long ) D'2019.02.01' * 1000 , LONG_MAX ) = 1159087 void OnStart (), Line = 23 : CopyTicks (Name,AddTicks, COPY_TICKS_ALL , 0 , 1 ) = 1 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [ 0 ] 2019.01 . 31 23 : 59 : 58 1.14461 1.14486 0.0000 0 1548979198644 2 0.00000 void OnStart (), Line = 26 : CopyTicksRange (Name,Ticks) = 2157552 void OnStart (), Line = 28 : CopyTicks (Name,AddTicks, COPY_TICKS_ALL , 0 , 1 ) = 1 [time] [bid] [ask] [last] [volume] [time_msc] [flags] [volume_real] [ 0 ] 2019.02 . 22 23 : 57 : 59 1.13303 1.13316 0.0000 0 1550879879799 6 0.00000 void OnStart (), Line = 31 : SymbolSelect (Name, false ) = true void OnStart (), Line = 32 : CustomSymbolDelete (Name) = true
버그는 CopyTicksRange에 포함되어 있습니다. 틱 기록 을 변경합니다! 재생산을 위해서는 스크립트에서 사용자 지정 기호의 이름을 항상 변경해야 합니다. 스크립트가 성공적으로 제거했음에도 불구하고 이것은. 캐릭터를 삭제하는 것은 전혀 삭제가 아닌 것으로 밝혀졌습니다.