오류, 버그, 질문 - 페이지 2817

 
MQL을 사용하여 이 수치를 제어할 수 있습니까? (MT 차트의 선에서 본 창입니다.)
 
TesterMaxProfit.all_symbols.M1. 20200727.20200805 . 42.405 CEC9C4975113F378E5F241968A332 .opt

어떤 알고리즘에 의해 형성된 opt-file의 이름이 무엇인지 말해 주십시오.

 

MT4에서 - 내가 보기에 ChartSaveTemplate(...)은 오류와 함께 작동하고 1280을 빌드합니다.

스크립트는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                              Test.mq4            |
//|                   Copyright 2006-2015, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright    "2006-2015, MetaQuotes Software Corp."
#property link          "http://www.mql4.com"
#property strict
#property show_inputs

void OnStart ()
{
   string s_Symbol = Symbol ();
   string s_EA_Name = "eStomper_02" ;
   string s_MagicChartIDSuffix = "MagicChart" ;
   int i_Magic = 1 ;
   string s_GlobalMagicChartID;
   string s_Period = _Period ;
   
   s_GlobalMagicChartID = StringConcatenate (s_EA_Name, "-" ,s_MagicChartIDSuffix, "-" ,i_Magic, "-" ,s_Symbol, "-" ,s_Period);
   if ( ChartSaveTemplate ( 0 ,s_GlobalMagicChartID))
   {
       Print ( "s_GlobalMagicChartID=" ,s_GlobalMagicChartID);     
   }
   else
   {
       Print ( __FUNCTION__ , " Couldnot Save template : " + s_GlobalMagicChartID + ".tpl" + "Error = " + GetLastError ());
       return ;
   }
}
//+------------------------------------------------------------------+
для М1 и М5 имя шаблона усекается, _Period - в имени шаблона не присутсвует..

смотрю полный игнор, но вот если сделать так, то все в порядке. явно в компиляторе ошибка, что-то типа неправильного выравнивания.


//+------------------------------------------------------------------+
//|                                              Test.mq4            |
//|                   Copyright 2006-2015, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright    "2006-2015, MetaQuotes Software Corp."
#property link          "http://www.mql4.com"
#property strict
#property show_inputs

void OnStart ()
{
   string s_Symbol = Symbol ();
   string s_EA_Name = "eStomper_02" ;
   string s_MagicChartIDSuffix = "MagicChart" ;
   int i_Magic = 1 ;
   string s_GlobalMagicChartID;
   string s_Period = _Period ;
   
   if (s_Period == "1" || s_Period == "5" )
   {
      s_Period = "0" + s_Period;
   }
   s_GlobalMagicChartID = StringConcatenate (s_EA_Name, "-" ,s_MagicChartIDSuffix, "-" ,i_Magic, "-" ,s_Symbol, "-" ,s_Period);
   if ( ChartSaveTemplate ( 0 ,s_GlobalMagicChartID))
   {
       Print ( "s_GlobalMagicChartID=" ,s_GlobalMagicChartID);     
   }
   else
   {
       Print ( __FUNCTION__ , " Couldnot Save template : " + s_GlobalMagicChartID + ".tpl" + "Error = " + GetLastError ());
       return ;
   }
}
//+------------------------------------------------------------------+



 
fxsaber :

어떤 알고리즘에 의해 형성된 opt-file의 이름이 무엇인지 말해 주십시오.

이것은 EA 입력 매개변수 값의 MD5입니다(최적화된 매개변수의 경우 시작-단계-정지, 최적화되지 않은 매개변수의 경우 - 현재 값)

42 - 실제 틱, 기호 최적화

Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для совершения торговых операций на рынках, а вторые — для анализа котировок и выявления закономерностей в их изменении. При этом индикаторы могут использоваться непосредственно в роботах, образуя полноценную...
 
Pavel Verveyko :
MQL을 사용하여 이 수치를 제어할 수 있습니까? (MT 차트의 선에서 본 창입니다.)
라이브러리와 함께
 
Rorschach :
라이브러리와 함께

매우 감사합니다

 

까다로운 질문입니다. 표시기 핸들에 의해 생성된 기호 및 기간을 찾는 방법은 무엇입니까?

MQL API에는 표시기 매개변수를 읽는 IndicatorParameters 기능이 있지만 충분하지 않습니다. 예를 들어 기호와 기간을 알 수 없는 경우 기간을 아는 것이 무슨 소용이겠습니까? 이것이 생략되었거나 어떻게 완료되었는지 찾을 수 없습니다. 링크를 주세요.

 
Stanislav Korotky :

까다로운 질문입니다. 표시기 핸들에 의해 생성된 기호 및 기간을 찾는 방법은 무엇입니까?

절대 안돼

작년에 @fxsaber 가 같은 질문을 했지만 파일과 관련하여 핸들로 파일 이름을 찾는 방법에는 솔루션이 없습니다.

이러한 목적으로만 자신의 컨테이너를 사용하십시오. 여기에서 @fxsaber 의 파일 핸들에 대해 제안된 컨테이너를 찾았습니다.

 struct FILE
{
   const int handle;
  
  FILE( const string FileName, const int Flags ) : handle(:: FileOpen (FileName, Flags)) {}  
  ~FILE( void ) { if ( this .handle != INVALID_HANDLE ) :: FileClose ( this .handle); }
};
 
Stanislav Korotky :

까다로운 질문입니다. 표시기 핸들에 의해 생성된 기호 및 기간을 찾는 방법은 무엇입니까?

MQL API에는 표시기 매개변수를 읽는 IndicatorParameters 기능이 있지만 충분하지 않습니다. 예를 들어 기호와 기간을 알 수 없는 경우 기간을 아는 것이 무슨 소용이겠습니까? 이것이 생략되었거나 어떻게 완료되었는지 찾을 수 없습니다. 링크를 주세요.

이고르 마카누 :

절대 안돼

할 수 있다.

 bool FindIndicatorByHandle( long handle, string &symbol, ENUM_TIMEFRAMES &timeframe, long &ChartId, int &sub_win, string &Name) {
   long chart_id = ChartFirst ();
   while (chart_id!=- 1 ) {
       int total_sub = ( int ) ChartGetInteger (chart_id, CHART_WINDOWS_TOTAL );
       int total_ind;
       for ( int i= 0 ; i<total_sub; i++) {
         total_ind = ChartIndicatorsTotal (chart_id,i);
         for ( int j= 0 ; j<total_ind; j++) {
             string name = ChartIndicatorName (chart_id,i,j);
             if ( ChartIndicatorGet (chart_id,i,name)== handle) {
               ChartId=chart_id;
               symbol= ChartSymbol (chart_id);
               timeframe= ChartPeriod (chart_id);
               sub_win=i;
               Name=name;
               return true ;
            }
         }
      }
      chart_id= ChartNext (chart_id);
   }
   return false ;
}

첨부파일은 테스트 스크립트입니다.

스크립트 결과:

 2020.08 . 07 01 : 39 : 43.435 All_Indicators (US30Index,M1)   Market Watch: CADRUB  USDRUB  USDCAD  EURCAD  EURUSD  .BrentCrud  XAUUSD  GBPAUD  BTCUSD  US30Index  USDJPY  Symb001  USD-BTC  EURCHF  USDCHF  
2020.08 . 07 01 : 39 : 43.498 All_Indicators (US30Index,M1)   Chart EURUSD PERIOD_M1 has indicators: TestMinMax(handle= 10 )   RVI( 10 )(handle= 11 )   RSI_154( 14 )(handle= 12 )   
2020.08 . 07 01 : 39 : 43.499 All_Indicators (US30Index,M1)   Chart .BrentCrud PERIOD_M1 has indicators: 
2020.08 . 07 01 : 39 : 43.500 All_Indicators (US30Index,M1)   Chart CADRUB PERIOD_M1 has indicators: 
2020.08 . 07 01 : 39 : 43.501 All_Indicators (US30Index,M1)   Chart USDCAD PERIOD_M5 has indicators: 
2020.08 . 07 01 : 39 : 43.502 All_Indicators (US30Index,M1)   Chart US30Index PERIOD_M1 has indicators: MA( 100 )(handle= 13 )   TestMinMax(handle= 14 )   
2020.08 . 07 01 : 39 : 43.505 All_Indicators (US30Index,M1)   Chart .BrentCrud PERIOD_D1 has indicators: DinTF(handle= 15 )   
2020.08 . 07 01 : 39 : 43.509 All_Indicators (US30Index,M1)   Chart USDRUB PERIOD_M1 has indicators: Bands( 200 )(handle= 16 )   Env( 10 )(handle= 17 )   MACD( 12 , 26 , 9 )(handle= 18 )    RSI( 14 )(handle= 19 )   
2020.08 . 07 01 : 39 : 43.523 All_Indicators (US30Index,M1)   Chart EURUSD PERIOD_M30 has indicators: MA( 15 )(handle= 20 )   TestMinMax(handle= 21 )   
2020.08 . 07 01 : 39 : 43.527 All_Indicators (US30Index,M1)   Chart .BrentCrud PERIOD_M5 has indicators: 
2020.08 . 07 01 : 39 : 43.527 All_Indicators (US30Index,M1)   Chart USDCAD PERIOD_M15 has indicators: DinTF(handle= 22 )   
2020.08 . 07 01 : 39 : 43.527 All_Indicators (US30Index,M1)   Chart USDCAD PERIOD_H1 has indicators: pMa( 2 - 940 )(handle= 23 )   !Channels_3. 05 )(handle= 24 )   
2020.08 . 07 01 : 39 : 43.528 All_Indicators (US30Index,M1)   Chart USDCAD PERIOD_H4 has indicators: 
2020.08 . 07 01 : 39 : 43.528 All_Indicators (US30Index,M1)   Chart XAUUSD PERIOD_M1 has indicators: Tick(handle= 25 )   
2020.08 . 07 01 : 39 : 43.528 All_Indicators (US30Index,M1)   --------------------------------------------------------------------------------
2020.08 . 07 01 : 39 : 43.528 All_Indicators (US30Index,M1)   Попробуем найти индикатор по хэндлу h = 18
2020.08 . 07 01 : 39 : 43.529 All_Indicators (US30Index,M1)   Нашли: USDRUB   PERIOD_M1 , chart_id = 128968168864101623 , подокно = 1 , короткое имя = MACD( 12 , 26 , 9 )
파일:
 
Nikolai Semko :

할 수 있다.

귀하의 코드는 아마도 작동할 것입니다.

나는 ChartIndicatorGet() 을 사용한 적이 없으며 이제서야 도움말에서 찾았습니다.

그러나 어쨌든 표시기 핸들을 코드의 표시기 이름에 직접 바인딩하는 것이 더 쉽습니다. 작업이 사용자가 직접 실행했는지 알아내는 것일 수도 있지만


감사하다! 유익한