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

 
Vladimir Pastushak :

지시 자나 조언자가 만든 개체와 수동으로 만든 그래픽 개체를 어떻게 든 구별할 수 있습니까?

기능에서

OBJPROP_HIDDEN

터미널 메뉴 "차트" - "개체" - "개체 목록"의 개체 목록에 그래픽 개체의 이름을 표시하는 것을 금지합니다. true 값을 사용하면 사용자에게 불필요한 개체를 목록에서 숨길 수 있습니다. 기본적으로 달력 이벤트, 거래 내역을 표시하는 개체에 대해 true가 설정되고   MQL5 프로그램에서 작성되었습니다 . 그런 것을 보기 위해   그래픽 개체   속성에 액세스하려면 "개체 목록" 창에서 "전체" 버튼을 클릭해야 합니다.

부울

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
  • www.mql5.com
Все объекты, используемые в техническом анализе, имеют привязку на графиках по координатам цены и времени – трендовая линия, каналы, инструменты Фибоначчи и т.д.  Но есть ряд вспомогательных объектов, предназначенных для улучшения интерфейса, которые имеют привязку к видимой всегда части графика (основное окно графика или подокна индикаторов...
 
아마도 잘 알려진 일이지만 그 자신은 그러한 뉘앙스를 알지 못했습니다.

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

도서관: 전문가

fxsaber , 2020.10.09 04:55

 bool ReloadChart( const long Chart )
{
   return ( ChartSaveTemplate (Chart, "\\Files\\" + __FILE__ + ".tpl" ) &&
           ChartApplyTemplate (Chart, "\\Files\\" + __FILE__ + ".tpl" ) && // Поставили задание в очередь чарта.
           ChartGetInteger (Chart, CHART_WINDOW_HANDLE ));                 // Заставляем двигаться очередь.
}

코드에서 중요한 위치를 강조 표시했습니다. 그것이 없으면 템플릿은 스크립트가 끝날 때까지 적용되지 않습니다.

 
EventChartCustom의 첫 번째 입력 매개변수 정보

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

MT5와 속도

안톤 , 2020.10.08 11:00

다른 의미와 다른 실행 메커니즘. 0 - "자체" 차트 대기열의 이벤트입니다. -1 - 자체 대기열의 이벤트입니다.

 
Vladimir Pastushak :

주말까지 머리가 끓지 않습니다.

MT5의 헤지에 오픈 포지션 티켓이 있습니다(예: 123456).

포지션 을 청산한 후 이익을 계산하고 싶지만 어떻게 해서인지 계산할 수 없습니다.

이러는데 커미션만 받고...

티켓의 클로즈드 포지션에서 어떻게 이익을 봅니까?

HistorySelectByPosition () 으로 거래를 더 잘 선택하십시오.

Документация по MQL5: Торговые функции / HistorySelectByPosition
Документация по MQL5: Торговые функции / HistorySelectByPosition
  • www.mql5.com
Не следует путать между собой ордера из торговой истории и действующие отложенные ордера, которые отображаются на вкладке "Торговля" в панели "Инструменты". Список ордеров, которые были отменены или привели к проведению торговой операции, можно посмотреть  в закладке "История" на панели "Инструменты" клиентского терминала. Функция...
 

이전에 다른 mqh에서 호출되었는지 여부를 하나의 mqh 내부에서 알아낼 필요가 있었습니다. 동시에 mqh는 서로의 존재를 인식하지 못합니다. 그 중 일부는 포함될 수 있고 일부는 포함되지 않을 수 있습니다.

일반적으로 작업은 일반적이지 않습니다(저에게는). 다소 목발 방식으로 해결했습니다.

 void f1()
{
   SetUserError ( 0 );
}

void f2()
{
   if ( _LastError == ERR_USER_ERROR_FIRST )
     Print ( "f1() была вызвана." );
   else
     Print ( "f1() не была вызвана" );
}

void OnStart ()
{
  f1();
  f2();
}

이것은 매우 나쁜 습관이라고 생각하지만 효과가 있습니다.

 
누군가 경고 창을 닫아야 하는 경우.
 // Закрытие Alert-окна
bool CloseAlert()
{  
   const long Chart = ChartOpen ( _Symbol , _Period );  
   const bool Res = Chart && ! ChartSaveTemplate (Chart, NULL );
                            
   if (Chart)
     ChartClose (Chart);
    
   return (Res);  
}
 
fxsaber :

이전에 다른 mqh에서 호출되었는지 여부를 하나의 mqh 내부에서 알아낼 필요가 있었습니다. 동시에 mqh는 서로의 존재를 인식하지 못합니다. 그 중 일부는 포함될 수 있고 일부는 포함되지 않을 수 있습니다.

일반적으로 작업은 일반적이지 않습니다(저에게는). 다소 목발 방식으로 해결했습니다.

이것은 매우 나쁜 습관이라고 생각하지만 효과가 있습니다.

_LastError를 사용하면 타사 라이브러리를 포함할 때 사용자 오류 코드의 충돌 가능성이 0이 아닌 한 가지 치명적인 문제가 있습니다. 옵션으로 lastError를 유지하십시오. 모든 mqhs에서 또는 단독으로 includeguard로 래핑된 전역 변수 를 시작하십시오.
 

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

MT5와 속도

fxsaber , 2020.10.20 12:28

빠르고 언로드된 기계에 대한 소계입니다.

가격 데이터와 관련하여 막대 및 지표를 통해 거래하는 사람들에게는 매우 모호합니다.

티키와 안경 - 실시간으로 하기 어렵습니다.

 
MT5에서 Sleep(0) == Sleep(1) . 이러한 이유로 MT4와 같이 Sleep(0)을 사용할 때 CPU 부하가 크지 않습니다.

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

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

슬라바 , 2018.09.20 15:40

추신. MQL5 의 Sleep() 함수 는 win API 함수 ::Sleep()에 대한 리디렉션이 아닙니다. 오히려 값이 100보다 작으면 리디렉션입니다. 그리고 100개 이상이 이미 와인 API 슬립 내부에 있는 사이클이므로 IsStopped에서 인터럽트할 수 있습니다.

그리고 또 다른 뉘앙스가 있습니다. 밀리초가 0보다 작으면 1로 대체됩니다. 즉, ::Sleep(0)을 호출하지 않습니다.

이미 잊었다. MT5에만 해당됩니다. MT4에서 Sleep(0)은 터미널을 걸 수 있습니다.

 
각 호출에서 추가 확인을 하지 않기 위해 포인터용 Virtual을 리메이크하는 아이디어가 있었습니다. 상태.
   static double VirtualSymbolInfoDouble( const string Symb, const ENUM_SYMBOL_INFO_DOUBLE Property )
  {
     return ( VIRTUAL::SelectOrders ? VIRTUAL::SelectOrders. SymbolInfoDouble (Symb, Property) : :: SymbolInfoDouble (Symb, Property) );
  }


그러나 먼저 간단한 예와 성능을 비교하기로 결정했습니다.

 // Сравнение производительности функции с доп. условием и указателя на функцию.

#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

typedef double (*TFunc)( const int ); // Определяем нужный тип указателя на функцию.

double Prices[];

double GetPrices2( const int Pos )
{
   return (Prices[Pos]);
}

double GetPrices( const int Pos )
{
   return (Pos >= 0 ? GetPrices2(Pos) : 0 ); // Специально введено доп. условие, чтобы уменьшить производительность.
}

void OnStart ()
{
   const int Size = ArrayResize (Prices, 1 e7);
  
   double Sum1 = 0 ;
   double Sum2 = 0 ;

  TFunc Func = GetPrices2;
    
   // Замер производительности через указатель функции.
  _BV(
   for ( int i = 0 ; i < Size; i++)
    Sum2 += Func(i);
      , 1 )


   // Замер производительности через функцию с доп. условием.
  _BV(
   for ( int i = 0 ; i < Size; i++)
    Sum1 += GetPrices(i);
      , 1 )  

   Print (Sum1);
   Print (Sum2);
}


결과.

 2020.10 . 21 01 : 07 : 00.745 Test9 (AUDCAD,H1)       Alert : Bench_Stack = 0 , 1 <= Time[Test9.mq5 29 in OnStart : for (inti= 0 ;i<Size;i++)Sum2+=Func(i);] = 33906 mcs.
2020.10 . 21 01 : 07 : 00.756 Test9 (AUDCAD,H1)       Alert : Bench_Stack = 0 , 1 <= Time[Test9.mq5 36 in OnStart : for (inti= 0 ;i<Size;i++)Sum1+=GetPrices(i);] = 10923 mcs.


typedef-variant는 세 번 잃습니다. 중요한 곳에 사용을 거부했습니다. 예를 들어, 동일한 TS OrdersTotal은 Optimizer의 각 패스 틱에서 한 번 이상 호출됩니다.


위협 디버그 모드에서는 상황이 반대입니다. 따라서 MT4에서는 속도 향상을 위해 typedef를 사용하는 것이 좋습니다.