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

 
저에게 이것은 엄청난 계시입니다.
 // Скрипт показыает, что цены открытия/закрытия не просто не нормализованы, но и разные при схожем значении

#property strict

#include <MT4Orders.mqh>

// Заполнение массива ценами открытия/закрытия
int FillPrices( double &Prices[] )
{
   const int Total = OrdersHistoryTotal ();
  
   ArrayResize (Prices, Total << 1 );
  
   int Amount = 0 ;
  
   for ( int i = 0 ; i < Total; i++)
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ))
    {
      Prices[Amount++] = OrderOpenPrice ();
      Prices[Amount++] = OrderClosePrice ();
    }

   return ( ArrayResize (Prices, Amount));
}

// true - нормализованная разность равна нуля, сама разность - отлична от нуля.
bool IsBadPrices( const double &Price1, const double &Price2 )
{
   return (! NormalizeDouble (Price1 - Price2, 5 ) && (Price1 != Price2));
}

// Находит цены открытия/закрытия, которые
// с нормализацией равны друг другу,
// без нормализации - не равны.
int CheckPrices( const double &Prices[] )
{
   int Res = 0 ;
   const int Size = ArraySize (Prices);
  
   for ( int i = 0 ; i < Size - 1 ; i++)
  {
     const double Price = Prices[i];
    
     for ( int j = i + 1 ; j < Size; j++)
       if (IsBadPrices(Price, Prices[j]))
      {
         Print (( string )Price + " - " + ( string )Prices[j] + " = " + ( string )(Price - Prices[j])); // Распечатываем найденые цены
        
        Res++;
      }
  }
    
   return (Res);
}

void OnStart ()
{
   double Prices[];
  
  FillPrices(Prices);
   Print (CheckPrices(Prices)); // Количество "несовпадающих" пар цен.
}


결과

 1.95562 - 1.95562 = - 2.220446049250313 e- 016
1.95562 - 1.95562 = - 2.220446049250313 e- 016
1.71599 - 1.71599 = - 2.220446049250313 e- 016
1.71599 - 1.71599 = - 2.220446049250313 e- 016
1.58028 - 1.58028 = - 2.220446049250313 e- 016
14.806 - 14.806 = - 1.77635683940025 e- 015
1.95521 - 1.95521 = - 2.220446049250313 e- 016
1.95521 - 1.95521 = - 2.220446049250313 e- 016
8


MT4에서 동일한 스크립트를 실행하는 것은 훨씬 더 우울합니다. 더 많은 기록이 있습니다. 설명하겠습니다.


같은 가격으로 포지션을 오픈하고 마감한 것을 볼 수 있습니다. 그러나 정규화 없이 비교할 때 가격은 동일하지 않습니다!


추신 : 나는 테스터를 확인했습니다 - 그런 쓰레기가없는 것 같습니다.

 
Ilya Malev :

봉인된 모양입니다.

저것들. 실제 최소 스프레드가 있습니까? 그렇다면 기술 지원에 문의하여 문제를 해결해야 합니다(평균적으로). 그렇지 않으면 테스터 grails 를 위한 맛있는 음식입니다.

 
fxsaber :

추신 : 나는 테스터를 확인했습니다 - 그런 쓰레기가없는 것 같습니다.

실제 틱을 제외한 모든 테스터 모드에서 가격이 정규화되지 않습니다!

 // Советник выводит цены, которые не нормализованы

#property strict

// true - нормализованная цена не равна оригинальной
bool IsBadPrice( const double &Price )
{
   return ( NormalizeDouble (Price, 5 ) != Price);
}

#define TOSTRING(A) #A + " = " + ( string )(A) + " "

//const bool Init = EventSetMillisecondTimer(50);
//void OnTimer()
void OnTick ()
{
   for ( int i = SymbolsTotal ( true ) - 1 ; i >= 0 ; i--)
  {
     const string Symb = SymbolName (i, true );
    
     const double PriceBid = SymbolInfoDouble (Symb, SYMBOL_BID );
     const double PriceAsk = SymbolInfoDouble (Symb, SYMBOL_ASK );
    
     if (IsBadPrice(PriceBid))
       Print (TOSTRING(Symb) + TOSTRING(PriceBid) + TOSTRING( NormalizeDouble (PriceBid, 5 ) - PriceBid));

     if (IsBadPrice(PriceAsk))
       Print (TOSTRING(Symb) + TOSTRING(PriceAsk) + TOSTRING( NormalizeDouble (PriceAsk, 5 ) - PriceAsk));
  }
}


결과

 2019.02 . 18 23 : 57 : 24    Symb = EURUSD PriceBid = 1.13088 NormalizeDouble (PriceBid, 5 )-PriceBid = - 2.220446049250313 e- 016 
2019.02 . 18 23 : 57 : 26    Symb = EURUSD PriceAsk = 1.13112 NormalizeDouble (PriceAsk, 5 )-PriceAsk = - 2.220446049250313 e- 016 
2019.02 . 18 23 : 57 : 27    Symb = EURUSD PriceBid = 1.13085 NormalizeDouble (PriceBid, 5 )-PriceBid = - 2.220446049250313 e- 016 
2019.02 . 18 23 : 58 : 18    Symb = EURUSD PriceAsk = 1.13112 NormalizeDouble (PriceAsk, 5 )-PriceAsk = - 2.220446049250313 e- 016 


간단히 말해서 이것은 테스터 버그입니다.

 

계정에 로그인하려고 할 때 거래 서버에 연결할 수 없다고 가정해 보겠습니다.

또는 예를 들어 데모 계정이 만료되었고 로그인을 시도하면 "유효하지 않은 계정"이 표시됩니다.


이 실패에도 불구하고 전체 거래 내역은 터미널에 표시되지 않더라도 사용할 수 있습니다!

 
fxsaber :

계정에 로그인하려고 할 때 거래 서버에 연결할 수 없다고 가정해 보겠습니다.

또는 예를 들어 데모 계정이 만료되었고 로그인을 시도하면 "유효하지 않은 계정"이 표시됩니다.


이 실패에도 불구하고 전체 거래 내역은 터미널에 표시되지 않더라도 사용할 수 있습니다!

역사는 어디에 보관됩니까?

 
Alexey Navoykov :

저것들. 실제 최소 스프레드가 있습니까? 그렇다면 기술 지원에 문의하여 문제를 해결해야 합니다(평균적으로). 그렇지 않으면 이것은 테스터 성배를위한 맛있는 음식입니다.

"오류, 질문" 스레드에서 그들은 이미 공식적으로 아무것도 변경하지 않을 것이라고 대답했습니다. 보다 정확하게는, 그들은 단순히 모든 합리적인 질문을 무시하고 "실제 진드기에 대한 테스트"라고 대답했습니다. 나는 이것을 엄격하게 부정적인 대답으로 해석합니다.

이것은 성가신 자기기만에 대한 "소식"입니다. 다른 사람이 속임수를 위해 상업적으로 어떻게 든 사용할 수 있지만 (즉, DC - 따라서 확산율에 대한 잘못된 인상을줍니다. 그 사람이 실제 틱에 빠지지 않으면 99.9 %가 오르지 않을 것입니다)
 
Ilya Malev :

다른 사람이 속임수를 위해 상업적으로 어떻게 든 사용할 수 있지만 (즉, DC - 따라서 확산율에 대한 잘못된 인상을줍니다. 그 사람이 실제 틱에 빠지지 않으면 99.9 %가 오르지 않을 것입니다)

이론적으로 모든 것이 서버에서 동기화되어야 합니다. 눈금에 있는 것은 막대에 있어야 합니다. 그러나 물론 실제로 어떻게 작동하는지 모릅니다.

 
이 주제와 관련이 없는 댓글은 " mql4 언어의 특징, 미묘함 및 작업 방법 "으로 이동되었습니다.
 

ME는 ALT + V의 조합으로 시스템 클립보드의 이전 값을 볼 수 있습니다. 브라우저에서 무언가를 복사하고 ME가 백그라운드에서 실행되더라도 ME는 그것을 보고 기억할 것입니다.

대략적으로 말하면 ME는 당신이 컴퓨터에서 하는 일을 많이 봅니다. 예를 들어 버퍼를 통해 다른 자원의 계정이나 개인 계정에 비밀번호를 붙여넣으면 현재 ME 세션의 이력으로 이동합니다.

 
fxsaber :

ME는 ALT + V의 조합으로 시스템 클립보드의 이전 값을 볼 수 있습니다. 브라우저에서 무언가를 복사하고 ME가 백그라운드에서 실행되더라도 ME는 그것을 보고 기억할 것입니다.

대략적으로 말하면 ME는 당신이 컴퓨터에서 하는 일을 많이 봅니다. 예를 들어 버퍼를 통해 계정 비밀번호를 붙여넣으면 현재 ME 세션의 기록으로 이동합니다.

와우, 암호화폐 거래소에서 비밀번호를 복사하고 있습니다. 나에게 얼마나 나쁜가?