그래픽 개체를 만드는 방법을 배우는 방법? MQL4. - 페이지 2

 
barabashkakvn :
포인트의 시간과 날짜를 알고 있으면 bool TrendCreate() 만 호출하면 됩니다.

조언 해주셔서 감사합니다. 모든 것이 더 쉬워졌습니다.

다음과 같이 했습니다.

 #property strict
#property script_show_inputs

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   long    chart_ID= 0 ;         // ID графика
   string name= "TrendLine" ;   // имя линии
   int     sub_window= 0 ;       // номер подокна
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим трендовую линию по заданным координатам
   if (! ObjectCreate (chart_ID,name, OBJ_TREND ,sub_window,Time[ 41 ], 1.0656 ,Time[ 65 ], 1.0494 ))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать линию тренда! Код ошибки = " , GetLastError ());
       return ;
     }
   
  }
//+------------------------------------------------------------------+

추신: 내가 이해할 수 없는 한 가지는 이 예에서 정확히 이 숫자를 선택한 이유입니다.

InpDate1= 35 ;        
InpPrice1= 60 ;        
InpDate2= 65 ;        
InpPrice2= 40 ; 

그들로부터 추세선은 범위의 중간 어딘가에 배치됩니다.

 
이제 다음 작업은 오른쪽으로 선을 계속하고 EA에서 선의 값을 얻는 방법을 해결하는 것입니다.
 
forexman77 :

...

그들로부터 추세선은 범위의 중간 어딘가에 배치됩니다.

따라서 이것은 OBJ_TREND 개체 의 생성 및 작동을 시연하는 것이 주요 작업인 스크립트일 뿐입니다. 그리고 숫자는 명확성을 위해 취해진 것입니다.
 
forexman77 :
이제 다음 작업은 오른쪽으로 선을 계속하고 EA에서 선의 값을 얻는 방법을 해결하는 것입니다.

모든 것이 스크립트 코드에 있습니다.

 //+------------------------------------------------------------------+
//| Создает линию тренда по заданным координатам                     |
//+------------------------------------------------------------------+
bool TrendCreate( const long             chart_ID= 0 ,         // ID графика
.
.
.
//--- включим (true) или отключим (false) режим продолжения отображения линии влево
   ObjectSetInteger (chart_ID,name, OBJPROP_RAY_LEFT ,ray_left);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger (chart_ID,name, OBJPROP_RAY_RIGHT ,ray_right);
.
.
.
 
barabashkakvn :

모든 것이 스크립트 코드에 있습니다.

1. 테스터에서 호출되면 거래가 열립니다. 모든 곳에서 최적화를 지출하면 0입니다. 나는 트랜잭션의 최적화에서 실행을 시작합니다. 어떻게 될 것인가?

2. 거래가 발생한 경우(각 거래에 대해) 라인이 저장되고 그렇지 않은 경우 삭제되는지 어떻게 확인할 수 있습니까?

   long    chart_ID= 0 ;         // ID графика
   string name= "TrendLine" ;   // имя линии
   int     sub_window= 0 ;       // номер подокна
   ObjectDelete (chart_ID,name);
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим трендовую линию по заданным координатам
   if (! ObjectCreate (chart_ID,name, OBJ_TREND ,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
     {
       Print ( __FUNCTION__ ,
             ": не удалось создать линию тренда! Код ошибки = " , GetLastError ());
       return ( 0 );
     }
    ObjectSet( "TrendLine" ,OBJPROP_TIME1,Time[minbar]);
    ObjectSet( "TrendLine" ,OBJPROP_PRICE1,Low[minbar]);
    ObjectSet( "TrendLine" ,OBJPROP_TIME2,Time[IPMIN]);
    ObjectSet( "TrendLine" ,OBJPROP_PRICE2,Low[IPMIN]);

   if (IPMIN!= 0 ){ double uroven= ObjectGetValueByTime (chart_ID,name,Time[ 1 ],sub_window);}
   
}
Print ( "uroven=" ,uroven);
if (Time[ 0 ] > b && Close[ 1 ] < uroven){Opn_B= true ;}
 
거래는 귀하가 통제해야 합니다. 그러나 각 거래에 고유한 라인이 있으려면 생성할 때 각 라인에 고유한 이름을 할당해야 합니다.
 
barabashkakvn :
거래는 귀하가 통제해야 합니다. 그러나 각 거래에 고유한 라인이 있으려면 생성할 때 각 라인에 고유한 이름을 할당해야 합니다.
어떻게? 예를 들어도 될까요?
 
forexman77 :
어떻게? 예를 들어도 될까요?
사례가 있는 분들의 도움 부탁드립니다.
 

테스트 중 그래픽 개체

테스트를 시각화할 때 EA는 실제 차트와 상호 작용합니다. 시각화가 없는 일반 테스트 중에 EA는 그려지지 않은 "가상" 차트로 작업하며 이 경우 미묘한 차이가 발생할 수 있습니다. 테스터가 최적화 모드에서 실행 중일 때 그래픽 개체 작업 은 지원되지 않습니다.

연구하는데 이틀이 걸렸지만 최적화를 할 수 없다는 것이 밝혀졌습니다.

지표를 만드는지 궁금합니다. 이를 통해 Expert Advisor의 라인 가치를 얻을 수 있습니까?

누가 무엇을 말할 것입니다. 누군가가 이미 이 문제를 연구했을 수도 있습니다.

 
forexman77 :

...

지표를 만드는지 궁금합니다. 이를 통해 Expert Advisor의 라인 가치를 얻을 수 있습니까?

...

표시기 가 그래픽 개체 를 생성한 다음 해당 매개변수를 수신하면 아니오입니다.

그러나 마찬가지로 지표를 사용하여 모든 것을 해결하는 것이 더 쉽습니다. 계산은 표시기에서 수행되고 그 결과는 표시기 버퍼를 통해 표시됩니다.

대안도 있습니다. 라인 대신에 라인 매개변수를 사용하여 전역 변수를 생성합니다. 그러면 GetValueByShift() 함수가 작동하지 않으므로 해당 아날로그를 작성해야 합니다.