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

 
Igor Makanu # :

아니 작동하지 않을거야

프로그래밍 방식으로 호출되는 경우 매개변수를 임의로 생성할 수 있습니다.

하지만 수동으로 시작해야 하며 여전히 입력 매개변수를 편집해야 합니다.


미리 정의된 매크로 대체에 현재 무엇이 있는지 확인하려고 합니다. __COUNT___가 있고 현재 무작위로 있는 것은 무엇이며 __COUNT___가 작동하는 방식을 확인하지 않았습니다 . 정적인 것으로 밝혀졌습니다. 의미가 거의 없습니다. 작업에 사용할 무작위

__RANDOM__ 을(를) 찾았지만 값을 변경하려면 코드를 컴파일해야 합니다. 아니면 내가 뭔가를 이해하지 못합니까?

 #define MACRO __RANDOM__ 
input ulong MASlow = MACRO; // Период медленной МА

작동 중에 어떻게든 변경할 수 있습니까?

__RANDOM__
 
Компилятор для каждого объявления __RANDOM__ подставляет в код случайное ulong -число.
 
 
모든 전화에 새로운 번호가 있지 않습니까?
 
Fast235 # :
모든 전화에 새로운 번호가 있지 않습니까?

아니다

 
Fast235 # :
모든 전화에 새로운 번호가 있지 않습니까?
컴파일러는 컴파일할 때를 의미합니다.
 
Vitaly Muzichenko # :

아니다

그렇다면 이 문제는 해결할 수 없습니다.

그리고 과제는 무엇입니까? - 당신은 그것을 다르게 공식화하려고 노력해야합니다

 
Vitaly Muzichenko # :

아니다

비탈리, 왜이 모든 것이? 표시기 창이 1개 이상인 경우 창 번호를 가져와서 거기에 무언가를 넣어야 합니까?
 
Alexey Viktorov # :
비탈리, 왜이 모든 것이? 표시기 창이 1개 이상인 경우 창 번호를 가져와서 거기에 무언가를 넣어야 합니까?

네, 맞습니다.

표시기가 있는 창의 번호를 가져와야 합니다. 이렇게 하려면 버튼을 클릭하고 데이터를 가져옵니다.

   if (id== CHARTEVENT_OBJECT_CLICK && StringFind (sparam,( string )wndNum+ "_butt" )!=- 1 ) {
     Alert ( "Window number:" +( string )wndNum, " => Program name:" +prog_name, " => Short name:" +short_name);
     ObjectSetInteger ( 0 ,sparam, OBJPROP_STATE , false );
  }

mt4 작품


하나의 mt5만 - 첫 번째 설치, 복사본 무시


 

그것은 이미 이것에 이르렀습니다. 글쎄, 이번주의 일은 어떤 식 으로든 해결되지 않았습니다 :(

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2020, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, IgorM"
#property link        " https://www.mql5.com/ru/users/igorm "
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Label1
#property indicator_label1    "Label1"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
//#property indicator_width1  1

input ulong MASlow = __COUNTER__; // Период медленной МА

//+------------------------------------------------------------------+
int wndNum;
string prog_name,short_name;
double Label1Buffer[];
bool flag= false ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
  prog_name= MQLInfoString ( MQL_PROGRAM_NAME );

   int q= 0 ;
   for ( int k= 1 ; k< ChartGetInteger ( 0 , CHART_WINDOWS_TOTAL ); k++) {
     for ( int e= 0 ; e< ChartGetInteger ( 0 , CHART_WINDOWS_TOTAL ); e++) {
       if ( ChartIndicatorName ( 0 ,k,e)==prog_name) {
        q++;
      }
    }
  }

  short_name= "Set (" +( string )MASlow+ ")" ;
   IndicatorSetString ( INDICATOR_SHORTNAME ,short_name);
  wndNum= ChartWindowFind ();
  
   wndNum=q;
  
  ButtonCreate( 0 ,( string )wndNum+ "_butt" , 44 , 18 , 40 , 14 , CORNER_RIGHT_LOWER , "= " +( string )wndNum+ " =" , "Alert" , "Arial" , 9 , clrBlack , C'236,233,216' , clrGray , false , false , false );
  
   SetIndexBuffer ( 0 ,Label1Buffer);
   PlotIndexSetInteger ( 0 , PLOT_LINE_WIDTH ,q+ 1 );

   flag= true ;

   Print ( "INIT SUCCEEDED: " +( string )wndNum, " => Count: " ,q);
//---
   return ( INIT_SUCCEEDED );
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
   ObjectsDeleteAll ( 0 ,( string )wndNum+ "_butt" );
   ChartRedraw ();
}

//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   for ( int i = prev_calculated == 0 ? 0 : prev_calculated - 1 ; i < rates_total; i++) {
    Label1Buffer[i] = close[i];
  }
   if (flag== false ) OnInit ();
   return (rates_total);
}

//+------------------------------------------------------------------+
//| OnChartEvent function                                            |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
   if (id== CHARTEVENT_OBJECT_CLICK && StringFind (sparam,( string )wndNum+ "_butt" )!=- 1 ) {
     Alert ( "Window number:" +( string )wndNum, " => Program name:" +prog_name, " => Short name:" +short_name);
     ObjectSetInteger ( 0 ,sparam, OBJPROP_STATE , false );
  }
   if (id== CHARTEVENT_CHART_CHANGE ) {
    ButtonCreate( 0 ,( string )wndNum+ "_butt" , 44 , 18 , 40 , 14 , CORNER_RIGHT_LOWER , "= " +( string )wndNum+ " =" , "Alert" , "Arial" , 9 , clrBlack , C'236,233,216' , clrGray , false , false , false );
     OnInit ();
  }
}

//===============================================================================================
//--------------------------------------- Создает кнопку ---------------------------------------+
//===============================================================================================
void ButtonCreate( long chart_ID= 0 , string nm= "Button" , int xd= 0 , int yd= 0 , int width= 50 , int height= 18 , int cr= 0 ,
                   string text= "Button" , string tooltip= "Button" , string font= "Arial" , int font_size= 9 , color clr= clrBlack ,
                   color back_clr= C'236,233,216' , color border_clr= clrNONE , bool state= false , bool selection= true , bool selectable= true , bool bc= false )
{
   if ( ObjectFind (chart_ID,nm)< 0 ) {
     ObjectCreate (chart_ID,nm, OBJ_BUTTON ,wndNum, 0 , 0 );
     ObjectSetInteger (chart_ID,nm, OBJPROP_XSIZE ,width);
     ObjectSetInteger (chart_ID,nm, OBJPROP_YSIZE ,height);
     ObjectSetInteger (chart_ID,nm, OBJPROP_CORNER ,cr);
     ObjectSetString (chart_ID,nm, OBJPROP_TEXT ,text);
     ObjectSetString (chart_ID,nm, OBJPROP_TOOLTIP ,tooltip);
     ObjectSetString (chart_ID,nm, OBJPROP_FONT ,font);
     ObjectSetInteger (chart_ID,nm, OBJPROP_FONTSIZE ,font_size);
     ObjectSetInteger (chart_ID,nm, OBJPROP_COLOR ,clr);
     ObjectSetInteger (chart_ID,nm, OBJPROP_BGCOLOR ,back_clr);
     ObjectSetInteger (chart_ID,nm, OBJPROP_BORDER_COLOR ,border_clr);
     ObjectSetInteger (chart_ID,nm, OBJPROP_BACK ,bc);
     ObjectSetInteger (chart_ID,nm, OBJPROP_STATE ,state);
     ObjectSetInteger (chart_ID,nm, OBJPROP_SELECTABLE ,selectable);
     ObjectSetInteger (chart_ID,nm, OBJPROP_SELECTED ,selection);
     ObjectSetInteger (chart_ID,nm, OBJPROP_HIDDEN , false );
     ObjectSetInteger (chart_ID,nm, OBJPROP_YDISTANCE ,yd);
     ObjectSetInteger (chart_ID,nm, OBJPROP_ZORDER , 10 );
     ObjectSetInteger (chart_ID,nm, OBJPROP_XDISTANCE ,xd);
     ChartRedraw ();
  }
}
//+------------------------------------------------------------------+
 
Vitaly Muzichenko # :

네, 맞습니다.

표시기가 있는 창의 번호를 가져와야 합니다. 이렇게 하려면 버튼을 클릭하고 데이터를 가져옵니다.

mt4 작품


하나의 mt5만 - 첫 번째 설치, 복사본 무시


글쎄, 이것은 분명히 향상된 성능의 결과입니다 ...별로 똑똑하지 않은 사용자의 변덕으로 표시기를 100500 번 다시 계산하는 이유는 무엇입니까? 그러나 일부 기회가 보호를 받는 일이 발생했습니다.

지표의 짧은 이름에 외부 매개변수를 입력해야 할 수도 있습니다.

 input int MAFast = 8 ;   // Период быстрой МА
input string shortName = "1" ;   // Префикс…
string short_name = "" ;
/********************************************************************\
|           Custom indicator initialization function                 |
\********************************************************************/
int OnInit ()
 {
//--- indicator buffers mapping
  short_name = shortName + MQLInfoString ( MQL_PROGRAM_NAME ) + "=Set (" + ( string )MASlow + "/" + ( string )MAFast + ")" ;
   IndicatorSetString ( INDICATOR_SHORTNAME , short_name);
   SetIndexBuffer ( 0 , Label1Buffer, INDICATOR_DATA );
   Print ( "INIT_SUCCEEDED" );
   return ( INIT_SUCCEEDED );
 } /******************************************************************/

그것이 작동하는 방식입니다. 확인했습니다.

 
Alexey Viktorov # :

글쎄, 이것은 분명히 향상된 성능의 결과입니다 ...별로 똑똑하지 않은 사용자의 변덕으로 표시기를 100500 번 다시 계산하는 이유는 무엇입니까? 그러나 일부 기회가 보호를 받는 일이 발생했습니다.

지표의 짧은 이름에 외부 매개변수를 입력해야 할 수도 있습니다.

그것이 작동하는 방식입니다. 확인했습니다.

다시 말하지만 다음 복사본을 로드할 때 접두사를 변경해야 합니까?

사유: