오류, 버그, 질문 - 페이지 811

 
abeiks :

안녕하세요.

MQL5를 알아내려고 합니다.   exp_tema.mq5 를 구문 분석하고 코드를 다시 수정했습니다. 이제 각 양초(마지막 20)의 로그 MA에 인쇄해야 합니다. 하지만 로그에 일부 항목이 누락된 이유를 이해할 수 없습니다. 주목 ,   로그에 ma[3]이 없으면 ma[13]도 없습니다. 왜 이런 일이 발생합니까? 실수는 어디에 있습니까?

바로 여기에

 if ( CopyBuffer (Handle[Number], 0 , 0 , 20 ,ma)< 0 )

분명히 누락 된 수표 :

  1. BarsCalculated >= 20
  2. 카피버퍼==20
파일:
exp_tema.mq5  27 kb
 
sergeev :

당신은 비전가가 필요하지 않습니다.

로그에서 중간 변수가 무엇과 같은지 볼 수 있도록 코드에서 자세한 인쇄를 만듭니다.

#property copyright "Copyright 2011, "

#property link      " http://www.mql5.com "
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   double Vhod=0;
      Print("Начало_Vhod="+DoubleToString(Vhod,2));
   Vhod=linfunc(15);
      Print("Конец_Vhod="+DoubleToString(Vhod,2));
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
double  linfunc(double b) // имя функции и список параметров
  {
   double a=1;

   while((a/b)<1 && !IsStopped())//-------------------
     {
      Print("а="+DoubleToString(a,2)+", b="+DoubleToString(b,2)+", a/b="+DoubleToString(a/b,2));
      a=a+1;
     }
   Print("а="+DoubleToString(a,2)+", b="+DoubleToString(b,2)+", a/b="+DoubleToString(a/b,2));
   Print("a+b="+DoubleToString(a+b,2));
         double f=a+b;
         // составной оператор
         return(f);           // возвращаемое значение
         }
//+------------------------------------------------------------------+

여기 코드가 있습니다.

여기 그의 지문이 있습니다

GM 0 1 (EURUSD,M1) 18:11:11 Start_Vhod=0.00
FO 0 1 (EURUSD,M1) 18:11:13 a=1.00, b=15.00, a/b=0.07
JF 0 1 (EURUSD,M1) 18:11:13 a=2.00, b=15.00, a/b=0.13
CQ 0 1 (EURUSD,M1) 18:11:13 a=3.00, b=15.00, a/b=0.20
EH 0 1 (EURUSD,M1) 18:11:13 a=4.00, b=15.00, a/b=0.27
KS 0 1 (EURUSD,M1) 18:11:13 a=5.00, b=15.00, a/b=0.33
PJ 0 1 (EURUSD,M1) 18:11:13 a=6.00, b=15.00, a/b=0.40
PE 0 1 (EURUSD,M1) 18:11:13 a=7.00, b=15.00, a/b=0.47
HL 0 1 (EURUSD,M1) 18:11:13 a=8.00, b=15.00, a/b=0.53
MF 0 1 (EURUSD,M1) 18:11:13 a=9.00, b=15.00, a/b=0.60
JR 0 1 (EURUSD,M1) 18:11:13 a=10.00, b=15.00, a/b=0.67
FK 0 1 (EURUSD,M1) 18:11:13 a=11.00, b=15.00, a/b=0.73
영업 0 1 (EURUSD,M1) 18:11:13 a=12.00, b=15.00, a/b=0.80
MI 0 1 (EURUSD,M1) 18:11:13 a=13.00, b=15.00, a/b=0.87
KF 0 1 (EURUSD,M1) 18:11:13 a=14.00, b=15.00, a/b=0.93
EO 0 1 (EURUSD,M1) 18:11:13 a=15.00, b=15.00, a/b=1.00
DJ 0 1 (EURUSD,M1) 18:11:14 a+b=30.00
RL 0 1 (EURUSD,M1) 18:11:17 End_Vhod=0.00
NH 2 1 (EURUSD,M1) 18:11:24 디버깅 종료됨

 
Fia :


디버그 EX5를 편집기에서 실행하지 않고 터미널에서 직접 실행하면 같은 결과가 나오나요?

디버그 EX5를 첨부할 수 있습니까?

 
Fia :

여기 그의 지문이 있습니다

GM 0 1 (EURUSD,M1) 18:11:11 Start_Vhod=0.00
FO 0 1 (EURUSD,M1) 18:11:13 a=1.00, b=15.00, a/b=0.07
JF 0 1 (EURUSD,M1) 18:11:13 a=2.00, b=15.00, a/b=0.13
CQ 0 1 (EURUSD,M1) 18:11:13 a=3.00, b=15.00, a/b=0.20
EH 0 1 (EURUSD,M1) 18:11:13 a=4.00, b=15.00, a/b=0.27
KS 0 1 (EURUSD,M1) 18:11:13 a=5.00, b=15.00, a/b=0.33
PJ 0 1 (EURUSD,M1) 18:11:13 a=6.00, b=15.00, a/b=0.40
PE 0 1 (EURUSD,M1) 18:11:13 a=7.00, b=15.00, a/b=0.47
HL 0 1 (EURUSD,M1) 18:11:13 a=8.00, b=15.00, a/b=0.53
MF 0 1 (EURUSD,M1) 18:11:13 a=9.00, b=15.00, a/b=0.60
JR 0 1 (EURUSD,M1) 18:11:13 a=10.00, b=15.00, a/b=0.67
FK 0 1 (EURUSD,M1) 18:11:13 a=11.00, b=15.00, a/b=0.73
영업 0 1 (EURUSD,M1) 18:11:13 a=12.00, b=15.00, a/b=0.80
MI 0 1 (EURUSD,M1) 18:11:13 a=13.00, b=15.00, a/b=0.87
KF 0 1 (EURUSD,M1) 18:11:13 a=14.00, b=15.00, a/b=0.93
EO 0 1 (EURUSD,M1) 18:11:13 a=15.00, b=15.00, a/b=1.00
DJ 0 1 (EURUSD,M1) 18:11:14 a+b=30.00
RL 0 1 (EURUSD,M1) 18:11:17 End_Vhod=0.00
NH 2 1 (EURUSD,M1) 18:11:24 디버깅 종료됨

재생할 수 없습니다.

 2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   Конец_Vhod= 30.00
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   a+b= 30.00
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 15.00 , b= 15.00 , a/b= 1.00
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 14.00 , b= 15.00 , a/b= 0.93
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 13.00 , b= 15.00 , a/b= 0.87
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 12.00 , b= 15.00 , a/b= 0.80
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 11.00 , b= 15.00 , a/b= 0.73
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 10.00 , b= 15.00 , a/b= 0.67
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 9.00 , b= 15.00 , a/b= 0.60
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 8.00 , b= 15.00 , a/b= 0.53
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 7.00 , b= 15.00 , a/b= 0.47
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 6.00 , b= 15.00 , a/b= 0.40
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 5.00 , b= 15.00 , a/b= 0.33
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 4.00 , b= 15.00 , a/b= 0.27
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 3.00 , b= 15.00 , a/b= 0.20
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 2.00 , b= 15.00 , a/b= 0.13
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   а= 1.00 , b= 15.00 , a/b= 0.07
2012.08 . 16 18 : 42 : 34      Test_001 (GBPUSD,M15)   Начало_Vhod= 0.00

Win7x64

MT5 x64 빌드 687

 
alexvd :

디버그 EX5를 편집기에서 실행하지 않고 터미널에서 직접 실행하면 같은 결과가 나오나요?

디버그 EX5를 첨부할 수 있습니까?

예, 흥미로운 것으로 밝혀졌습니다. 테스터에서 실행하면 30을 제공하고 고문으로 인쇄하기 위해 30을 제공하면 30을 제공합니다.

디버깅으로 돌아가면 0이 있습니다.


메타드라이버

어떤 빌드와 형식으로 (표현에 대해 사과드립니다) 밝혀졌습니다.

마찬가지로 아무도이 기적을 재현 할 수 없다면 vidyushka를 배치해야 할 것입니다.

파일:
1.ex5  5 kb
 
alexvd :

바로 여기에

분명히 누락 된 수표 :

  1. 막대계산 >= 20
  2. 카피버퍼==20

감사합니다. 추가해 보겠습니다.

 

여기에 비디오가 있습니다 (720보다 높은 해상도를 선택하십시오. 그렇지 않으면 모든 것이 비누로 깨어납니다)

https://www.youtube.com/watch?v=Prpw6DUYvjY&feature=youtu.be

Win7 64비트 MT5 687 빌드

내가 알아낸 것처럼 return이 0을 생성할 때의 효과는 디버거에서만 발생하는 것 같습니다.

동시에 '전화 걸기' 버튼만 사용하면 효과가 있는 것 같다.

while 루프에 진입하여 "총으로 가기" 버튼으로 종료하면 출구 0에서 안정적으로 작동하지 않습니다.

일반적으로 비디오에는 모든 것이 표시되지만 어떻게 해야 하는지, 무엇을 해야 하는지 여전히 명확하지 않습니다(그리고 왜 저에게만 해당됩니까?)

 
Fia :
Win7 64비트 MT5 687 빌드
터미널의 비트는 무엇입니까?
 

최적화 과정에서 이해할 수 없는 문자가 나왔다.

수직 최적화 그래프 탭에서 모든 값은 -1입니다.

 
alexvd :

바로 여기에

분명히 누락 된 수표 :

  1. 막대계산 >= 20
  2. 카피버퍼==20

그러나 여전히 버퍼에 문제가 있습니다. 모든 것이 명확하지만 코드에서 사용하는 방법이 명확하지 않습니다. 어렵지 않다면 이것을 코드에 붙여넣을 수 있습니까?