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

 
Alexander Antoshkin :

나는 또한 예제에서 버튼 코드를 가져 왔습니다 .... 버튼 누름이 고정되지 않도록하는 방법, 즉 기능을 실행 한 후 원래 상태로 돌아갑니다 ..

버튼에 대한 경우 다음은 도움말의 예입니다.

 //+------------------------------------------------------------------+
//|                                               ControlsButton.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"
#property description "Панель индикации и диалогов управления. Демонстрация работы класса CButton"
#include <Controls\Dialog.mqh>
#include <Controls\Button.mqh>
//+------------------------------------------------------------------+
//| defines                                                          |
//+------------------------------------------------------------------+
//--- indents and gaps
#define INDENT_LEFT                         ( 11 )       // indent from left (with allowance for border width)
#define INDENT_TOP                          ( 11 )       // indent from top (with allowance for border width)
#define INDENT_RIGHT                        ( 11 )       // indent from right (with allowance for border width)
#define INDENT_BOTTOM                       ( 11 )       // indent from bottom (with allowance for border width)
#define CONTROLS_GAP_X                      ( 5 )       // gap by X coordinate
#define CONTROLS_GAP_Y                      ( 5 )       // gap by Y coordinate
//--- for buttons
#define BUTTON_WIDTH                        ( 100 )     // size by X coordinate
#define BUTTON_HEIGHT                       ( 20 )       // size by Y coordinate
//--- for the indication area
#define EDIT_HEIGHT                         ( 20 )       // size by Y coordinate
//--- for group controls
#define GROUP_WIDTH                         ( 150 )     // size by X coordinate
#define LIST_HEIGHT                         ( 179 )     // size by Y coordinate
#define RADIO_HEIGHT                        ( 56 )       // size by Y coordinate
#define CHECK_HEIGHT                        ( 93 )       // size by Y coordinate
//+------------------------------------------------------------------+
//| Class CControlsDialog                                            |
//| Usage: main dialog of the Controls application                   |
//+------------------------------------------------------------------+
class CControlsDialog : public CAppDialog
  {
private :
   CButton           m_button1;                       // the button object
   CButton           m_button2;                       // the button object
   CButton           m_button3;                       // the fixed button object

public :
                     CControlsDialog( void );
                    ~CControlsDialog( void );
   //--- create
   virtual bool       Create( const long chart, const string name, const int subwin, const int x1, const int y1, const int x2, const int y2);
   //--- chart event handler
   virtual bool       OnEvent( const int id, const long &lparam, const double &dparam, const string &sparam);

protected :
   //--- create dependent controls
   bool               CreateButton1( void );
   bool               CreateButton2( void );
   bool               CreateButton3( void );
   //--- handlers of the dependent controls events
   void               OnClickButton1( void );
   void               OnClickButton2( void );
   void               OnClickButton3( void );
  };
//+------------------------------------------------------------------+
//| Event Handling                                                   |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CControlsDialog)
ON_EVENT(ON_CLICK,m_button1,OnClickButton1)
ON_EVENT(ON_CLICK,m_button2,OnClickButton2)
ON_EVENT(ON_CLICK,m_button3,OnClickButton3)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CControlsDialog::CControlsDialog( void )
  {
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CControlsDialog::~CControlsDialog( void )
  {
  }
//+------------------------------------------------------------------+
//| Create                                                           |
//+------------------------------------------------------------------+
bool CControlsDialog::Create( const long chart, const string name, const int subwin, const int x1, const int y1, const int x2, const int y2)
  {
   if (!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
       return ( false );
//--- create dependent controls
   if (!CreateButton1())
       return ( false );
   if (!CreateButton2())
       return ( false );
   if (!CreateButton3())
       return ( false );
//--- succeed
   return ( true );
  }
//+------------------------------------------------------------------+
//| Create the "Button1" button                                      |
//+------------------------------------------------------------------+
bool CControlsDialog::CreateButton1( void )
  {
//--- coordinates
   int x1=INDENT_LEFT;
   int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y);
   int x2=x1+BUTTON_WIDTH;
   int y2=y1+BUTTON_HEIGHT;
//--- create
   if (!m_button1.Create(m_chart_id,m_name+ "Button1" ,m_subwin,x1,y1,x2,y2))
       return ( false );
   if (!m_button1.Text( "Button1" ))
       return ( false );
   if (!Add(m_button1))
       return ( false );
//--- succeed
   return ( true );
  }
//+------------------------------------------------------------------+
//| Create the "Button2" button                                      |
//+------------------------------------------------------------------+
bool CControlsDialog::CreateButton2( void )
  {
//--- coordinates
   int x1=INDENT_LEFT+(BUTTON_WIDTH+CONTROLS_GAP_X);
   int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y);
   int x2=x1+BUTTON_WIDTH;
   int y2=y1+BUTTON_HEIGHT;
//--- create
   if (!m_button2.Create(m_chart_id,m_name+ "Button2" ,m_subwin,x1,y1,x2,y2))
       return ( false );
   if (!m_button2.Text( "Button2" ))
       return ( false );
   if (!Add(m_button2))
       return ( false );
//--- succeed
   return ( true );
  }
//+------------------------------------------------------------------+
//| Create the "Button3" fixed button                                |
//+------------------------------------------------------------------+
bool CControlsDialog::CreateButton3( void )
  {
//--- coordinates
   int x1=INDENT_LEFT+ 2 *(BUTTON_WIDTH+CONTROLS_GAP_X);
   int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y);
   int x2=x1+BUTTON_WIDTH;
   int y2=y1+BUTTON_HEIGHT;
//--- create
   if (!m_button3.Create(m_chart_id,m_name+ "Button3" ,m_subwin,x1,y1,x2,y2))
       return ( false );
   if (!m_button3.Text( "Locked" ))
       return ( false );
   if (!Add(m_button3))
       return ( false );
   m_button3.Locking( true );
//--- succeed
   return ( true );
  }
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CControlsDialog::OnClickButton1( void )
  {
   Comment ( __FUNCTION__ );
  }
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CControlsDialog::OnClickButton2( void )
  {
   Comment ( __FUNCTION__ );
  }
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CControlsDialog::OnClickButton3( void )
  {
   if (m_button3.Pressed())
       Comment ( __FUNCTION__ + " Состояние элемента управления: On" );
   else
       Comment ( __FUNCTION__ + " Состояние элемента управления: Off" );
  }
//+------------------------------------------------------------------+
//| Global Variables                                                 |
//+------------------------------------------------------------------+
CControlsDialog ExtDialog;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create application dialog
   if (!ExtDialog.Create( 0 , "Controls" , 0 , 40 , 40 , 380 , 344 ))
       return ( INIT_FAILED );
//--- run application
   ExtDialog.Run();
//--- succeed
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- очистим комментарии
   Comment ( "" );
//--- destroy dialog
   ExtDialog.Destroy(reason);
  }
//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,         // event ID  
                   const long & lparam,   // event parameter of the long type
                   const double & dparam, // event parameter of the double type
                   const string & sparam) // event parameter of the string type
  {
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+

주의: "Button1" 및 "Button2" 버튼은 고정되어 있지 않지만 "Button3" 버튼은 고정되어 있습니다.

파일:
 

움직이는:

조지 :

지금 이 순간을 말해주세요.

1. 어드바이저 + 인디케이터 작동

2. 서버와의 연결이 끊어지고 표시기의 전체 렌더링이 사라지고 제공하는 데이터가 남습니다.

이것에 대해 읽을 수 있는 곳 및/또는 연결이 끊어지면 어떻게 되는지, 렌더링은 사라지지만 데이터는 남아 있는 이유를 알려주시겠습니까? 그림을 다시 그릴 수 있습니까?

미리 감사드립니다!

 
Karputov Vladimir :

움직이는:

조지 :

지금 이 순간을 말해주세요.

1. 어드바이저 + 인디케이터 작동

2. 서버와의 연결이 끊어지고 표시기의 전체 렌더링이 사라지고 제공하는 데이터가 남습니다.

이것에 대해 읽을 수 있는 곳 및/또는 연결이 끊어지면 어떻게 되는지, 렌더링은 사라지지만 데이터는 남아 있는 이유를 알려주시겠습니까? 그림을 다시 그릴 수 있습니까?

미리 감사드립니다!

표시기부터 시작합니다. 즉, "rates_total" 매개변수가 "0"일 때 OnCalculate () 함수에서 어떤 일이 발생합니까?

첫 번째 매개변수 Rates_total은 지표에서 계산할 수 있는 막대의 수를 포함하며 차트에서 사용할 수 있는 막대의 수에 해당합니다.

OnCalculate() 함수에서 반환된 값과 두 번째 입력 매개변수 prev_calculated 사이의 관계에 유의하십시오. 함수를 호출할 때 prev_calculated 매개변수에는 이전 호출 에서 OnCalculate() 함수가 반환 한 값이 포함됩니다. 이를 통해 이 기능의 이전 실행 이후 변경되지 않은 막대에 대한 재계산을 피하기 위해 사용자 지정 지표를 계산하는 경제적인 알고리즘을 구현할 수 있습니다.

이렇게 하려면 일반적으로 현재 함수 호출의 막대 수를 포함하는 Rates_total 매개변수의 값을 반환하는 것으로 충분합니다. OnCalculate() 함수에 대한 마지막 호출 이후 가격 데이터가 변경된 경우(더 깊은 기록이 업로드되었거나 기록 간격이 채워진 경우) prev_calculated 입력 매개변수의 값은 터미널 자체에서 0으로 설정됩니다.  

 
Karputov Vladimir :

버튼에 대한 경우 다음은 도움말의 예입니다.

주의: "Button1" 및 "Button2" 버튼은 고정되어 있지 않지만 "Button3" 버튼은 고정되어 있습니다.

아주 좋은 예는 아닙니다.

1 왜냐하면 라이브러리

2 패널로 만들기 때문에

3 이해하지 못하기 때문입니다.

그래서 두 개의 버튼을 스케치했는데 하나는 고정되어 있고 다른 하나는 고정 해제해야 합니다. "추가"는 마법을 해제해야 합니다.

 //+------------------------------------------------------------------+
//|                                                         0000.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
bool stop_trading; 
 
int OnInit ()
{ //--- Создание Фиксированной кнопки "Старт-Стоп"
   if ( ! ObjectCreate ( 0 , "stop_button" , OBJ_BUTTON , 0 , 0 , 0 ) )
  { MessageBox ( "Кнопка 'Старт-стоп' не создана!" , "Ошибка" , MB_OK | MB_ICONHAND ); return ( INIT_FAILED );}
   else
  { ObjectSetInteger ( 0 , "stop_button" , OBJPROP_CORNER , CORNER_RIGHT_LOWER );
   ObjectSetInteger ( 0 , "stop_button" , OBJPROP_XDISTANCE , 60 );
   ObjectSetInteger ( 0 , "stop_button" , OBJPROP_YDISTANCE , 20 );
   ObjectSetInteger ( 0 , "stop_button" , OBJPROP_XSIZE , 60 );
   ObjectSetInteger ( 0 , "stop_button" , OBJPROP_YSIZE , 20 );
   if ( stop_trading )
    { ObjectSetInteger ( 0 , "stop_button" , OBJPROP_BGCOLOR , clrMagenta );
     ObjectSetInteger ( 0 , "stop_button" , OBJPROP_STATE , true );
     ObjectSetString ( 0 , "stop_button" , OBJPROP_TEXT , "Старт" );}
     else
    { ObjectSetInteger ( 0 , "stop_button" , OBJPROP_BGCOLOR , clrMediumSeaGreen );
     ObjectSetInteger ( 0 , "stop_button" , OBJPROP_STATE , false );
     ObjectSetString ( 0 , "stop_button" , OBJPROP_TEXT , "Стоп" );}  } 

 //--- Создание Нефиксированной кнопки "Добавить 
   if ( ! ObjectCreate ( 0 , "Add" , OBJ_BUTTON , 0 , 0 , 0 ) ) 
  {   Print ( "Кнопка 'Добавить' не создана!" ); return ( INIT_FAILED ); } 
  { 
     ObjectSetInteger ( 0 , "Add" , OBJPROP_CORNER , CORNER_RIGHT_LOWER );
     ObjectSetInteger ( 0 , "Add" , OBJPROP_XDISTANCE , 140 );         //--- установим координаты кнопки            
     ObjectSetInteger ( 0 , "Add" , OBJPROP_YDISTANCE , 20 );
     ObjectSetInteger ( 0 , "Add" , OBJPROP_XSIZE , 80 );                 //--- установим размер кнопки
     ObjectSetInteger ( 0 , "Add" , OBJPROP_YSIZE , 20 ); 
   //---
     ObjectSetInteger ( 0 , "Add" , OBJPROP_BGCOLOR , clrWhite );       //--- установим цвет фона
     ObjectSetInteger ( 0 , "Add" , OBJPROP_STATE , false );             //--- переведем кнопку в состояние false
     ObjectSetString ( 0 , "Add" , OBJPROP_TEXT , "Добавить" );         //--- установим текст  
    
     
  }  
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason )
{
//--- Удаление кнопки старт-стоп
   ObjectDelete ( 0 , "stop_button"   ); 
//--- Удаление кнопки Добавить
   ObjectDelete ( 0 , "Add" );  
}
//+------------------------------------------------------------------+
//| Expert Chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam )
{
   long b_state; 
   long f_state;
//---  
   if ( id == CHARTEVENT_OBJECT_CLICK )
  {
     if ( sparam == "stop_button" )
    {
       if ( ObjectGetInteger ( 0 , "stop_button" , OBJPROP_STATE , 0 , b_state ) )
      {
         if ( b_state == 1 ) 
        {
          stop_trading = true ;
           ObjectSetInteger ( 0 , "stop_button" , OBJPROP_BGCOLOR , clrMagenta );
           ObjectSetString ( 0 , "stop_button" , OBJPROP_TEXT , "Старт" );
        }
         else
        {
          stop_trading = false ;
           ObjectSetInteger ( 0 , "stop_button" , OBJPROP_BGCOLOR , clrMediumSeaGreen );
           ObjectSetString ( 0 , "stop_button" , OBJPROP_TEXT , "Стоп" );
        }
      }
      
    }
     
  }
  
   ChartRedraw ( ChartID ());

   //--Создание Нефиксированной кнопки "Добавить
    
 if (id== CHARTEVENT_OBJECT_CLICK ) // НАЖАТ ГРАФИЧЕСКИЙ ОБЪЕКТ       
         if ( sparam == "Add" ) // Нажата кнопка
         {
       if ( ObjectGetInteger ( 0 , "Add" , OBJPROP_STATE , 0 , f_state ) ) 
      {
         if (f_state == 1 ) 
        
        {
         // то, что то =true; здесь можно выбирать цвет /текст и т.д до нажатия
         //---
           ObjectSetInteger ( 0 , "Add" , OBJPROP_BGCOLOR , clrWhite ); //цвет кнопки
           ObjectSetString ( 0 , "Add" , OBJPROP_TEXT , "Добавить" );   // текст кнопки          
        }
         else
        {
           // то ,что то равно false;
           //---здесь можно изменять цвет /текст  и т.д после нажатия 
         // ObjectSetInteger( 0, "Add", OBJPROP_BGCOLOR,clrMediumSeaGreen );//цвет кнопки
         //  ObjectSetString( 0, "Add", OBJPROP_TEXT, "Добавить" ); // текст кнопки  
        
        }
 ChartRedraw ( ChartID ());

   }
  
}
 return ;  
  
} 
 
매니저 가입은 어떻게 하나요?
 
coon :
매니저 가입은 어떻게 하나요?
지침은 다음과 같습니다. 신호 를 구독 하는 방법
 

mmmm, 관리자가 있습니다. 그의 작업의 효율성을보고 "투자"하고 싶습니다.

ps - 죄송합니다, 저는 찻주전자입니다.

 
coon :

mmmm, 관리자가 있습니다. 그의 작업의 효율성을보고 "투자"하고 싶습니다.

ps - 죄송합니다, 저는 찻주전자입니다.

 

고마워, 공부할게.

사실, 첫 번째 근사치에서 ....... 분명히 알아 내기 위해서는 주제에 있어야합니다.

그래서 내가 원했던...

옵션이 있습니까? 가입 신청을 하고, 부두를 채우고, $를 입금하면 그게 다야?

 
coon :

고마워, 공부할게.

사실, 첫 번째 근사치에서 ....... 분명히 알아 내기 위해서는 주제에 있어야합니다.

그래서 내가 원했던...

옵션이 있습니까? 가입 신청을 하고, 부두를 채우고, $를 입금하면 끝인가요?

자습서 비디오 보기: YouTube 에서 자습서 비디오 보기

유료 구독을 받으려면 MQL5.account에 돈을 입금해야 합니다. 신호에 대한 추가 정보: 신호 서비스에 대한 FAQ

Витрина торговых сигналов в MetaTrader 4/5
Витрина торговых сигналов в MetaTrader 4/5
  • 2015.03.09
  • www.youtube.com
Как выбрать торговый сигнал в платформе MetaTrader и подписаться на него за пару кликов? Очень просто, смотри наше видео и ты узнаешь все о торговых сигналах.
사유: