MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1280

 

안녕하세요!

1) 어드바이저 작성

2) 테스터에서 시작되었습니다.

3) 로그에는 세 가지 항목이 있습니다.

2020.10.25 20:06:08.484 2020.09.24 00:00:00 CLOUD 테스트 시작

2020.10.25 20:06:07.015 TestGenerator: 현재 스프레드 7 사용
2020.10.25 20:05:51.296 Expert CLOUD GBPUSD,M1: 성공적으로 로드됨


4) 시각화는 여전히 멈춥니다.

예를 들어 어떤 논리적 오류가 발생하더라도 거래는 이루어지지 않지만 테스터는 막대 계산을 시작해야 합니다. 그리고 일정이 빡빡합니다.

다른 여러 고문을 실행하려고 시도했습니다. 모두 작동합니다.

나는 이것을 시작한다 - 모든 것이 멈춘다.

누구든지 그런 문제가 발생했습니까? 어떻게 고치는 지?

 
Andrey Ilinykh :

계산된 값을 로그나 파일에 쓰면 이것이 어떻게 도움이 될까요?

오류를 찾아 알고리즘을 구성합니다.

 
Alexey Viktorov :

음, 접선을 통해 계산할 수 있습니다. 그리고 좋은 점은 각도 자체가 필요하지 않기 때문에 탄젠트만 알면 충분합니다.

탄젠트는 시간당 km 또는 마일당 포인트 또는 하루에 천 포인트이며 이것이 속도입니다. 그래프 차원 . 그리고 그 접선은 세로 좌표와 가로 좌표의 치수에 연결된 각도입니다. 여기에서 시작해야 합니다.

 
Aleksei Stepanenko :

예, 다시 속도를 얻습니다. 단위는 분당 포인트입니다. 그리고 주말과 구멍에 관해서는, 나는 이것을 스스로 취했습니다. 차트에 촛불이 무엇인지, 시간 간격이 있고, 그렇지 않은 것(일/시간)은 존재하지 않습니다. 주말을 고려하고 현재 가격이 제자리에 있다면 여기의 속도는 아무 이유없이 눈에 띄게 떨어질 것입니다. 그러나 다시, 각자에게:)

왜 속도를 두려워합니까? 이것은 유형 캐스팅에 대한 규칙일 뿐입니다.
각도 감지 기능의 변형:

 struct PointPriceTime
  {
   double             price;
   datetime           time;
                     PointPriceTime( double p, datetime t) { price=p; time=t; };
   void               Set( double p, datetime t){ price=p; time=t;};
                     PointPriceTime(PointPriceTime &p){ price=p.price; time=p.time; };
                     PointPriceTime() { price= 0.0 ; time= 0 ; };
  };

double Angle(PointPriceTime &p1,PointPriceTime &p2) // возвращает угол в градусах в приведенной системе координат price-price, где по оси X 
  {                                                 // расстояние между x1 и  x2  = N*_Point, где N - количество минутных баров во временном промежутке отрезка. 
   static int tf[ 9 ]= { PERIOD_M1 , PERIOD_M5 , PERIOD_M15 , PERIOD_M30 , PERIOD_H1 , PERIOD_H4 , PERIOD_D1 , PERIOD_W1 , PERIOD_MN1 };
   int i= 0 ;
   while (i< 9 && SeriesInfoInteger ( _Symbol ,tf[i], SERIES_FIRSTDATE )>p1.time)
      i++;
   if (i== 9 )
     {
       Print ( "Время левой границы вне диапазона исторических данных" );
       return DBL_MAX ;
     }
   int bar1 = iBarShift ( _Symbol ,tf[i],p1.time);
   int bar2 = iBarShift ( _Symbol ,tf[i],p2.time);
   if (bar1==bar2)
       return 0.0 ;
   return atan ((p2.price-p1.price)/((bar1-bar2)* PeriodSeconds (tf[i])* _Point / 60 ))* 180 / M_PI ;
  }

MT5 이후에는 MT4로 작업하는 느낌이 끔찍합니다. 역사에 대한 접근은 어떻게든 거세되었습니다. 나는 진드기에 대해서도 침묵을 지킨다.



파일:
Angle.mq4  11 kb
iCanvas.mqh  49 kb
 

차트에서 거래 수준에 대한 설명 표시를 프로그래밍 방식으로 제어할 수 있습니까? MQL4를 사용하여 비활성화(차트에 거래 수준 자체는 그대로 둠)하거나 변경할 수 있습니까?


일부 거래 수준을 시각적으로 강조 표시하고 내 설명을 제공해야 합니다. 이를 위해 거래 수준의 스타일과 일치하지만 색상이 다른 수평선을 만들고 설명을 설정하고(OBJPROP_TEXT) 차트에 개체 설명 표시를 켭니다(ChartSetInteger(0, CHART_SHOW_OBJECT_DESCR ,true) ). 동시에 내가 만든 설명이 스크린샷에 표시된 내용에 중첩되어 결과적으로 둘 중 하나를 식별할 수 없습니다.

터미널에서 생성한 거래 수준에 대한 설명을 어떻게든 비활성화하거나 변경할 수 있습니까? MQL 프로그램에서 이러한 설명에 액세스할 수 있습니까?

 
Janis Ozols :

차트에서 거래 수준에 대한 설명 표시를 프로그래밍 방식으로 제어할 수 있습니까? MQL4를 사용하여 비활성화(차트에 거래 수준 자체는 그대로 둠)하거나 변경할 수 있습니까?


일부 거래 수준을 시각적으로 강조 표시하고 내 설명을 제공해야 합니다. 이를 위해 거래 수준의 스타일과 일치하지만 색상이 다른 수평선을 만들고 설명을 설정하고(OBJPROP_TEXT) 차트에 개체 설명 표시를 켭니다(ChartSetInteger(0, CHART_SHOW_OBJECT_DESCR ,true) ). 동시에 내가 만든 설명이 스크린샷에 표시된 내용에 중첩되어 결과적으로 둘 중 하나를 식별할 수 없습니다.

터미널에서 생성한 거래 수준에 대한 설명을 어떻게든 비활성화하거나 변경할 수 있습니까? MQL 프로그램에서 이러한 설명에 액세스할 수 있습니까?

할 수 있다,

선택을 취소합니다.

하나

 
Alekseu Fedotov :

할 수 있다,
선택을 취소합니다.

이 확인란을 선택하지 않으면 거래 수준 (선) 자체가 설명과 함께 차트에서 사라집니다.

질문을 하면서 저는 선을 제거하고 싶지 않고 차트에서 설명을 변경하거나 제거하기만 하면 된다는 사실에 초점을 맞추려고 했습니다(스크린샷에서 화살표로 표시됨).

 
Janis Ozols :

이 확인란을 선택하지 않으면 거래 수준 (선) 자체가 설명과 함께 차트에서 사라집니다 .

질문을 하면서 저는 선을 제거하고 싶지 않고 차트에서 설명을 변경하거나 제거하기만 하면 된다는 사실에 초점을 맞추려고 했습니다(스크린샷에서 화살표로 표시됨).

당신은 그것들이 필요하지 않습니다, 당신은 그 장소에서 당신의 자신의 라인을 만듭니다

 
Vitaly Muzichenko :

당신은 그것들이 필요하지 않습니다, 당신은 그 장소에서 당신의 자신의 라인을 만듭니다

기존 레벨 중 일부만 선택하고( 예: 스크린샷 표시된 상위 레벨) 나머지는 그대로 둡니다.

이러한 레벨에 대한 설명에 프로그래밍 방식으로 액세스할 수 없는 경우 레벨 자체를 끄고 각 눈금에서 터미널을 폴링하여 직접 그려야 합니다. 필요한 레벨을 다른 색상으로 강조 표시하고 다음을 제공합니다. 다른 설명. 그리고 거기에는 결국 포지션을 여는 수준뿐만 아니라 손실을 멈추고 이익을 취해야 하는 수준도 있습니다.

아마도 거래 수준에 대한 설명 표시를 비활성화하거나(줄만 남기고) 변경할 수 있는 더 간단한 방법이 있습니까?

 

이 기능들의 차이점이 무엇인지 간단히 말씀해 주시겠습니까?

 //+------------------------------------------------------------------+
int     CountOrder( int Order_Type) 
   {
     int Orders= 0 ;
     for ( int a= OrdersTotal ()- 1 ;a>= 0 ;a--)
    {
     if ( OrderSelect (a, SELECT_BY_POS, MODE_TRADES)== false ) continue ;
     if (OrderSymbol()!= _Symbol ) continue ;
     if (Order_Type == OrderType() || Order_Type == - 1 ) Orders++;
    }
     return Orders;
   }
//+------------------------------------------------------------------+
int CounterOrderTradeType( ENUM_ORDER_TYPE order_type)
  {
   int cnt= 0 ;
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
       if ( OrderSelect (pos,SELECT_BY_POS)== true )
         if (OrderSymbol()== _Symbol )
             if (OrderType()==order_type)
               cnt++;
   return (cnt);
  }
//+------------------------------------------------------------------+