mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 133

 
Alexey Viktorov :
왜요?
이미 시도
 
Nikolai Semko :
이미 시도

하지만 여기는

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

mql5 언어의 특징, 미묘함 및 작업 방법

니콜라이 셈코 , 2019.04.03 22:33

네, 알렉스 감사합니다. 이 기능을 잊어버렸습니다. 전에 본 적이 있지만 한 번도 사용하지 않았습니다.

시험을 마친. 문제가 발생하고 있습니다. 삭제하면 삭제되지만 제거 후에는 모든 것이 중지됩니다.

다음 매개변수를 사용 하여 표시기를 계산 하기 전에 DrawSetup() 함수에 한 줄의 코드를 추가했습니다.

 IndicatorRelease (handle);
handle= iMA ( _Symbol , _Period ,per1, 0 ,MaMethod,PriceBase);
for ( int i= 0 ;i<N;i++) handle= iMA ( _Symbol , _Period ,per2, 0 ,MaMethod,handle);

표시기가 단순히 작동을 멈추고 아직 이유를 이해할 수 없습니다.

나는 당신과 절대적으로 동의합니다. 그냥 쓸모없는 장난감일 뿐입니다.


별말씀을요.
 
Alexey Viktorov :

하지만 여기는


별말씀을요.
전에 시도했습니다. 코드 자체가 실패로 삭제되었습니다.
 
가장 깊이 묻힌 핸들부터 시작하여 체인의 모든 핸들을 해제할 수도 있습니다.
 
Andrey Khatimlianskii :
가장 깊이 묻힌 핸들부터 시작하여 체인의 모든 핸들을 해제할 수도 있습니다.

글쎄요, 그건 퓨리칫이 아닙니다. 또는 깜박이면 일종의 브레이크가 켜집니다.

 void BuildMaFromMa()
  {
   static int h[];
   for ( int i= 0 ;i< ArraySize (h);i++) IndicatorRelease (h[i]);
   handle= iMA ( _Symbol , _Period ,per1, 0 ,MaMethod,PriceBase);
   ArrayResize (h,N);
   if (N> 0 ) h[ 0 ]=handle; 
   for ( int i= 0 ;i<N;i++)
     {
      handle= iMA ( _Symbol , _Period ,per2, 0 ,MaMethod,handle);
      h[i]=handle;
     }
  }

IndicatorRelease 라인을 문서화하면 모든 것이 잘 작동하지만 일부 브레이크가 켜지고 무슨 일이 일어나고 있는지 이해하지 못합니다.

파일:
 

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

지표: MaFromMa

니콜라이 셈코 , 2019.04.04 01:00

재귀와 반복의 속도를 비교하고 싶었습니다.

재귀가 두 배 이상 빠르다는 것이 밝혀졌습니다 ...

아마도 스택이 더 빠르기 때문일 것입니다 ...

근처에서 놀랍습니다. 나는 반대의 효과를 예상했다. ))

 #define size 1000000
uint sum1= 0 ,sum2= 0 ;
int i;
int X[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart ()
  {
   ArrayResize (X,size);
   for (i= 0 ;i<size;i++) X[i]= rand ();

   ulong t= GetMicrosecondCount ();
   i= 0 ;
   while (i<size) { sum1+=X[i]; i++;}
//Recursion();
   ulong t1= GetMicrosecondCount ()-t;

   t= GetMicrosecondCount ();
   i= 0 ;
//while(i<size) { sum1+=X[i]; i++;}
   Recursion();
   ulong t2= GetMicrosecondCount ()-t;
   Print ( "время выполнения цикла    = " + string (t1)+ " , контрольная сумма = " + string (sum1));
   Print ( "время выполнения рекурсии = " + string (t2)+ " , контрольная сумма = " + string (sum2));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Recursion()
  {
   sum2+=X[i];
   i++;
   if (i<size) Recursion();
  }
//+------------------------------------------------------------------+
 2019.04 . 03 19 : 06 : 40.776 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1667 , контрольная сумма = 3510404212
2019.04 . 03 19 : 06 : 40.776 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 697 , контрольная сумма = 3510404212
2019.04 . 03 19 : 06 : 41.697 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1653 , контрольная сумма = 3492310620
2019.04 . 03 19 : 06 : 41.697 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 699 , контрольная сумма = 3492310620
2019.04 . 03 19 : 06 : 42.549 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1529 , контрольная сумма = 3510953577
2019.04 . 03 19 : 06 : 42.549 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 696 , контрольная сумма = 3510953577
2019.04 . 03 19 : 06 : 43.332 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1559 , контрольная сумма = 3512212419
2019.04 . 03 19 : 06 : 43.332 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 698 , контрольная сумма = 3512212419
2019.04 . 03 19 : 06 : 44.098 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1707 , контрольная сумма = 3497178596
2019.04 . 03 19 : 06 : 44.098 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 472 , контрольная сумма = 3497178596
2019.04 . 03 19 : 06 : 44.839 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 2088 , контрольная сумма = 3485051380
2019.04 . 03 19 : 06 : 44.839 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 482 , контрольная сумма = 3485051380
2019.04 . 03 19 : 06 : 45.538 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1612 , контрольная сумма = 3487817581
2019.04 . 03 19 : 06 : 45.538 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 448 , контрольная сумма = 3487817581
2019.04 . 03 19 : 06 : 46.397 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1742 , контрольная сумма = 3475121003
2019.04 . 03 19 : 06 : 46.397 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 497 , контрольная сумма = 3475121003
2019.04 . 03 19 : 06 : 47.262 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1701 , контрольная сумма = 3485556615
2019.04 . 03 19 : 06 : 47.262 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 701 , контрольная сумма = 3485556615

 

얘들 아, 정지 손실 없이 MT 5의 보증금 비율로 로트를 계산하는 입증되고 신뢰할 수있는 기능이 있습니까?

공유하다...

 
최적화하는 동안 테스터 로그에 이 메시지가 표시될 수 있습니다.
Tester   OnTesterInit failed. Optimization cannot be started.


이 메시지에 따르면 이유를 이해하는 것은 거의 불가능합니다. 왜냐하면. 터미널 로그에 대한 참조가 완전히 부족합니다. 거기에서 원인을 찾아야 합니다.


그러한 조언자의 예

 input int Range = 0 ; // 1..9

int Tmp = 1 / Range;

void OnTesterDeinit () {}

double OnTester ()
{
   return (Tmp);
}


Expert Advisor는 Range가 0에 도달하지 않는 범위에서 최적화됩니다. 그러나 최적화에 실패합니다.

그 이유는 Expert Advisors의 프레임 모드는 항상 EX5에 하드 코딩된 입력 매개변수로 시작되기 때문입니다. 이 경우 프레임 모드에서는 0 으로 나눕니다.

OnTesterDeinitdummy 가 소스 코드에서 제거되면 최적화는 문제 없이 진행됩니다.


이러한 상황에서 테스터 로그에 터미널 로그에 대한 참조가 있으면 좋을 것입니다. 그렇지 않으면 무슨 일이 일어나고 있는지 항상 이해할 수 있는 것은 아닙니다(최적화 중에는 디버그를 사용할 수 없음).

 

차트에서 Expert Advisors가 실행되지 않는 상황이 발생할 수 있습니다.

왼쪽 - Expert Advisor를 차트로 끌 때 일반 커서입니다. 오른쪽은 우리의 경우입니다.


로그에 항목이 없습니다. 일반적으로 비활성화 커서는 이러한 차트의 유일한 시각적 식별자입니다.


tpl 템플릿을 저장하면 이 차트가 한 줄로 구분됩니다.

tester= 1

이것은 차트 유형을 결정하는 유일한 소프트웨어 옵션일 것입니다. 이것은 프레임 차트입니다.


따라서 자동 거래로부터 자신을 보호하려면 그러한 차트로만 작업할 수 있습니다.

 

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

오류, 버그, 질문

Nikolai Semko :

합성 도구 공식에서 기호 이름이 점으로 시작(또는 포함)되면 "알 수 없는 구문 분석 오류" 오류가 발생합니다.

슬라바 , 2019.04.19 06:08

기호 이름 에 점, 대시 또는 다른 것이 포함되어 있으면("RTS-12.19"는 어떻습니까?) 이 이름은 아포스트로피로 묶어야 합니다.