Questions des débutants MQL5 MT5 MetaTrader 5 - page 609

 
Alexander Antoshkin:

J'ai également repris le code du bouton dans les exemples, ..... Comment faire en sorte que l'appui sur un bouton ne soit pas fixe, c'est-à-dire qu'après l'exécution de sa fonction, il revienne à son état initial.

En ce qui concerne les boutons, voici un exemple tiré de l'aide :

//+------------------------------------------------------------------+
//|                                               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);
  }
//+------------------------------------------------------------------+

Veuillez noter que les boutons 1 et 2 ne sont pas verrouillables, tandis que le bouton 3 est verrouillable.

Dossiers :
 

Reporté :

George:

Veuillez me conseiller sur un tel point :

1. L'indicateur EA + fonctionne

2. La connexion au serveur est déconnectée et tout le rendu de l'indicateur est perdu, les données qu'il fournit restent.

Pouvez-vous suggérer où lire à ce sujet et/ou ce qui se passe lorsque la connexion est perdue, pourquoi le dessin est perdu, mais les données restent. Est-il possible de le redessiner à nouveau ?

Merci d'avance !

 
Karputov Vladimir:

Reporté :

George:

Veuillez me conseiller sur un tel point :

1. L'indicateur EA + fonctionne

2. La connexion au serveur est déconnectée et tout le rendu de l'indicateur est perdu, les données qu'il fournit restent.

Pouvez-vous suggérer où lire à ce sujet et/ou ce qui se passe lorsque la connexion est perdue, pourquoi le dessin est perdu, mais les données restent. Est-il possible de le redessiner à nouveau ?

Merci d'avance !

Commencez par l'indicateur - à savoir, ce qui se passe dans OnCalculate() lorsque le paramètre "rates_total" est "0" :

Le premier paramètre rates_total contient le nombre de barres dont dispose l'indicateur pour le calcul et correspond au nombre de barres disponibles dans le graphique.

Notez le lien entre la valeur renvoyée par OnCalculate() et le deuxième paramètre d'entrée prev_calculated. Le paramètre prev_calculated de l'appel de fonction contient une valeurrenvoyée par OnCalculate() lors de l'appelprécédent. Cela permet d'utiliser des algorithmes économiques pour calculer l'indicateur personnalisé afin d'éviter des calculs répétés pour les barres qui n'ont pas changé depuis l'appel précédent de cette fonction.

Pour cela, il suffit généralement de renvoyer la valeur du paramètre rates_total, qui contient le nombre de barres dans l'appel de fonction actuel. Si depuis le dernier appel de OnCalculate() les données de prix ont changé (un historique plus profond a été pompé ou les blancs de l'historique ont été remplis), alors la valeur du paramètre d'entrée prev_calculated sera mise à zéro par le terminal.

 
Karputov Vladimir:

S'il s'agit de boutons, voici un exemple tiré de l'aide :

Remarque : les boutons 1 et 2 ne sont pas verrouillables, mais le bouton 3 est verrouillable.

Ce n'est pas un bon exemple :

1 parce que les bibliothèques

2 parce qu'il est réalisé par un panel

3 parce que vous ne le comprenez pas.

J'ai esquissé deux boutons, l'un est fixe et l'autre doit être déverrouillé - "Ajouter" qui doit être déverrouillé

//+------------------------------------------------------------------+
//|                                                         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;  
  
} 
 
comment rejoindre le manager ?
 
coon:
comment rejoindre un manager ?
Voici les instructions :Comments'inscrire pour recevoir des signaux
 

mmm, avoir un manager, voir l'efficacité de son travail, vouloir "investir".

ps - désolé, je suis une théière.

 
coon:

mmm, avoir un manager, voir l'efficacité de son travail, vouloir "investir".

Je suis désolé, je suis un débutant complet.

 

Merci, je vais m'en occuper.

Vraiment, à première approximation....... il faut être sur le terrain pour s'en rendre compte apparemment.

Mais je voudrais....

Des options ? Dois-je faire une demande d'adhésion, remplir les documents, déposer les fonds et c'est tout ?

 
coon:

Merci, je vais m'en occuper.

Vraiment, à première approximation....... il faut être sur le terrain pour s'en rendre compte apparemment.

Mais je voudrais....

Des options ? Faire une demande d'adhésion, remplir la paperasse, déposer l'argent et c'est tout ?

Voir la vidéo du tutoriel :Voir lavidéo du tutoriel sur les signaux sur YouTube

Vous devez déposer de l'argent sur votre compte MQL5.pour commencer un abonnement payant. En savoir plus sur laFAQ du service Signaux

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