초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1178

 
Aleksey Vyazmikin :

따라서 지침에는 이 기능에 대한 팬에 대한 언급이 없습니다.

하나의 가격 좌표에 있는 개체는 여러 값을 가질 수 있으므로 행 번호를 지정해야 합니다. 이 기능은 다음 개체에만 적용할 수 있습니다.

  • 추세선(OBJ_TREND)
  • 각도별 추세선 (OBJ_TRENDBYANGLE)
  • 간 라인(OBJ_GANNLINE)
  • 등거리 채널(OBJ_CHANNEL) - 2라인
  • 선형 회귀 채널(OBJ_REGRESSION) - 3줄
  • 표준편차 채널(OBJ_STDDEVCHANNEL) - 3줄
  • 화살표 라인(OBJ_ARROWED_LINE)

어쨌든 팬에는 두 가지 점이 있습니다. 그것에 평행한 추세선을 한 점씩 추가하고 계산합니다. 항상 탈출구를 찾을 수 있습니다.

 
Uladzimir Izerski :

ObjectGetValueByTime을 사용 하여 계산 하면 팬의 백분율을 찾을 수 있습니다.

테스터에서 작동합니다. 확인하지 않았습니다.

코드로 보여줄 수 있습니까?

 
Aleksey Vyazmikin :

코드로 보여줄 수 있습니까?

방금 코드를 확인했습니다. 채널에서 작동합니다. 팬에 대해 정의합니다.

 F_Draw_Object( "FAN" , OBJ_FIBOFAN ,Time[ 20 ],High[ 20 ],Time[ 5 ],Low[ 5 ], 0 , 0 , 0 , 2 , C'00,00,200' , OBJPROP_FILL , false );
 PriseCLv= ObjectGetValueByTime ( 0 , "FAN" ,Time[ 10 ], 0 );

추세선을 팬에 연결하고 결정할 수도 있습니다. 하지만 그렇게 작동합니다.

 
Uladzimir Izerski :

방금 코드를 확인했습니다. 채널에서 작동합니다. 팬에 대해 정의합니다.

추세선을 팬에 연결하고 결정할 수도 있습니다. 하지만 그렇게 작동합니다.

어떻게 작동합니까?

적어도 시각적 테스터에서는 작동하지 않습니다 ...

 bool fiboFanCreate( string ffname, datetime tm1, double pr1, datetime tm2, double pr2)
{
   Print ( __FUNCSIG__ );
   
   //if(!ObjectCreate(0,ffname,OBJ_FIBOFAN,0,tm1,pr1,tm2,pr2))
   if (! ObjectCreate ( 0 ,ffname, OBJ_FIBOFAN , 0 ,tm1,pr1,tm2,pr2, 0 , 0 , 0 , 2 , C'00,00,200' , OBJPROP_FILL , false ))
   {
       Print ( __FUNCSIG__ ,
             ": не удалось создать \"Веер Фибоначчи\"! Код ошибки = " , GetLastError ());
       return ( false );
   }
   
   ChartRedraw ();
   Sleep ( 1000 );
   
   return ( true );
}
//+------------------------------------------------------------------+
bool fiboFanLevelsSet( double   &values[],   // значения линий уровня
                       string   name)       // имя веера
{
   Print ( __FUNCSIG__ );
   
   levels = ArraySize (values);
   ArrayPrint (values);
   //--- установим количество уровней
   ObjectSetInteger ( 0 ,name, OBJPROP_LEVELS ,levels);
   
   //--- установим свойства уровней в цикле
   for ( int i= 0 ;i<levels;i++)
   {
       //--- значение уровня
       ObjectSetDouble ( 0 ,name, OBJPROP_LEVELVALUE ,i,values[i]);
       //--- описание уровня
       ObjectSetString ( 0 ,name, OBJPROP_LEVELTEXT ,i, IntegerToString (i+ 1 ));
   }
   ChartRedraw ();
   Sleep ( 1000 );
   //--- успешное выполнение
   return ( true );
}

시험

 void OnTick ()
{
   new_bars    = current_chart.isNewBar();   // проверить появление нового бара
   
   if (new_bars > 0 )
   {
       if ( ObjectFind ( 0 ,ff_name) >= 0 ) Print (ff_name, "4 = " , NormalizeDouble ( ObjectGetValueByTime ( 0 ,ff_name, TimeCurrent (), 4 ), Digits ()));

....

 2020.01 . 19 19 : 38 : 50.208 2019.09 . 19 11 : 15 : 00    bool fiboFanCreate( string , datetime , double , datetime , double )
2020.01 . 19 19 : 38 : 50.208 2019.09 . 19 11 : 15 : 01    bool fiboFanLevelsSet( double &[], string )
2020.01 . 19 19 : 38 : 51.365 2019.09 . 19 11 : 30 : 00    FFan4 = 0.0
 

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

질문 2개

세르게이 타볼린 , 2020.01.20 11:52

EA 에서 표시기를 호출 할 때 오류가 발생하는 원인은 무엇입니까? 표시기 자체가 일반적으로 차트에 수동으로 배치된다는 사실에도 불구하고.

   ResetLastError ();
   handle_ICTMP1 = iCustom ( Symbol (), 0 , "my_used\\ICTMP_3.01" , 0 ,in_symb1, false , false ,in_smoothing);
   if (handle_ICTMP1 == INVALID_HANDLE )                                                 // проверяем наличие хендла индикатора
   {
       Print ( "Не удалось получить хендл индикатора handle_ICTMP1..." , GetLastError ());   // если хендл не получен, то выводим сообщение в лог об ошибке
       return ( INIT_FAILED );                                                             // завершаем работу с ошибкой
   }
   else
   {
       Print ( "Получен хендл индикатора handle_ICTMP1" );
       if (! MQLInfoInteger ( MQL_OPTIMIZATION ))
      {
         if (! ChartIndicatorAdd ( ChartID (), 0 ,handle_ICTMP1)) Print ( "Ошибка подключения индикатора к графику" ); // подключаем индикатор к графику
      }
   }
2020.01.20 13:42:09.390 Core 1  file Indicators\my_used\ICTMP_3.01 read error
2020.01.20 13:42:09.390 Core 1   loading of ICTMP_ EURGBP,M15 failed [557]
2020.01.20 13:42:09.390 Core 1  2019.09.19 00:00:00   cannot load custom indicator 'my_used\ICTMP_3.01' [4802]
2020.01.20 13:42:09.390 Core 1  2019.09.19 00:00:00   Не удалось получить хендл индикатора handle_ICTMP1...4802
2020.01.20 13:42:09.390 Core 1  tester stopped because OnInit returns non-zero code
추신 테스터에 있습니다.

그리고 이것은 고문이 실시간 차트에서 시작된다는 사실에도 불구하고. 표시기 도면 포함. (((

특히, 이것은 무엇입니까?

 

친애하는, 글쎄, 정말 아무도 아무것도 추측할 수 없습니까?

표시기는 테스터와 차트에서 별도로 작동합니다. 테스터의 EA에서 시작하면 이해할 수없는 오류가 발생합니다. 이 표시기가 있는 Expert Advisor는 정상적으로 시작되어 차트에서 작동합니다.

어디서 파나요?

 
Сергей Таболин :

친애하는, 글쎄, 정말 아무도 아무것도 추측할 수 없습니까?

표시기는 테스터와 차트에서 별도로 작동합니다. 테스터의 EA에서 시작하면 이해할 수없는 오류가 발생합니다. 이 표시기가 있는 Expert Advisor는 정상적으로 시작되어 차트에서 작동합니다.

어디서 파나요?

테스터의 표시등 으로 가는 경로를 향해?
 
Artyom Trishkin :
테스터의 표시기로 가는 경로를 향하고 있습니까?

어떤가요?

필요한 모든 지표가 이 경로에 있습니다.

handle_ICTMP1 = iCustom ( Symbol (), 0 , "my_used\\ICTMP_3.01"
handle_HMA7C = iCustom ( Symbol (), 0 , "my_used\\my_HMA7C_201" ,

이것은 전에 일어난 적이 없습니다. 또한 테스터의 표시기에 대한 별도의 경로에 대해 처음으로 듣습니다 ...

다른 지표의 경우 경로가 적합하지만 이 지표에는 적합하지 않습니까?

 

특별히 그 앞에 하나의 지표를 더 추가했습니다.

   ResetLastError ();
      handle_HMA7C = iCustom ( Symbol (), 0 , " my_used\\my_HMA7C_201 " , 45 , 9 );
       if (handle_HMA7C == INVALID_HANDLE )                                                   // проверяем наличие хендла индикатора
      {
         Print ( "Не удалось получить хендл индикатора handle_HMA7C..." , GetLastError ());     // если хендл не получен, то выводим сообщение в лог об ошибке
         return ( INIT_FAILED );                                                             // завершаем работу с ошибкой
      }
       else
      {
         Print ( "Получен хендл индикатора handle_HMA7C" );
         if (! MQLInfoInteger ( MQL_OPTIMIZATION ))
         {
             if (! ChartIndicatorAdd ( ChartID (), 0 ,handle_HMA7C)) Print ( "Ошибка подключения индикатора к графику" ); // подключаем индикатор к графику
         }
      }
   
   handle_ICTMP1 = iCustom ( Symbol (), 0 , " my_used\\ICTMP_3.01 " , 0 ,in_symb1, false , false ,in_smoothing);
   if (handle_ICTMP1 == INVALID_HANDLE )                                                 // проверяем наличие хендла индикатора
   {
       Print ( "Не удалось получить хендл индикатора handle_ICTMP1..." , GetLastError ());   // если хендл не получен, то выводим сообщение в лог об ошибке
       return ( INIT_FAILED );                                                             // завершаем работу с ошибкой
   }
   else
   {
       Print ( "Получен хендл индикатора handle_ICTMP1" );
       if (! MQLInfoInteger ( MQL_OPTIMIZATION ))
      {
         if (! ChartIndicatorAdd ( ChartID (), 0 ,handle_ICTMP1)) Print ( "Ошибка подключения индикатора к графику" ); // подключаем индикатор к графику
      }
   }
2020.01.20 20:15:34.713 program file added: Indicators\my_used\my_HMA7C_201.ex5. 41715 bytes loaded
2020.01.20 20:15:34.920 2019.09.19 00:00:00   Получен хендл индикатора handle_HMA7C
2020.01.20 20:15:34.921 file Indicators\my_used\ICTMP_3.01 read error
2020.01.20 20:15:34.921 loading of ICTMP_ EURGBP,M15 failed [557]
2020.01.20 20:15:34.921 2019.09.19 00:00:00   cannot load custom indicator 'my_used\ICTMP_3.01' [4802]
2020.01.20 20:15:34.921 2019.09.19 00:00:00   Не удалось получить хендл индикатора handle_ICTMP1...4802
2020.01.20 20:15:34.921 tester stopped because OnInit returns non-zero code

어드바이저는 여전히 차트에 정상적으로 배치됩니다. 모든 표시기가 로드되고 작동합니다....

 
Сергей Таболин :

친애하는, 글쎄, 정말 아무도 아무것도 추측할 수 없습니까?

어디서 파나요?

핸들을 반복적으로 수신하고 점차적으로 메모리를 오버플로한다고 가정할 수 있습니다. 라이브 차트에 있는 것은 천천히 하며 모든 메모리를 채울 시간이 없습니다. 테스터는 초당 여러 번 이 작업을 수행하고 빠르게 메모리를 막힙니다.

사유: