Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 609

 
Alexander Antoshkin:

Ich habe auch den Code der Schaltfläche aus den Beispielen übernommen, .... Wie kann man erreichen, dass das Drücken einer Taste nicht fixiert ist, d.h. dass sie nach der Ausführung ihrer Funktion in ihren Ausgangszustand zurückkehrt.

Was die Schaltflächen anbelangt, so ist hier ein Beispiel aus der Hilfe:

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

Bitte beachten Sie: Die Tasten 1 und 2 sind nicht abschließbar, während die Taste 3 abschließbar ist.

Dateien:
 

Übertragen:

George:

Bitte weisen Sie auf einen solchen Punkt hin:

1. EA + Indikator wird ausgeführt

2. Die Verbindung zum Server wird unterbrochen und die Darstellung der Indikatoren geht verloren, die Daten, die sie liefern, bleiben jedoch erhalten.

Können Sie vorschlagen, wo man darüber lesen kann und/oder was passiert, wenn die Verbindung unterbrochen wird, warum die Zeichnung verloren geht, aber die Daten erhalten bleiben? Ist es möglich, es noch einmal neu zu zeichnen?

Vielen Dank im Voraus!

 
Karputov Vladimir:

Übertragen:

George:

Bitte weisen Sie auf einen solchen Punkt hin:

1. EA + Indikator wird ausgeführt

2. Die Verbindung zum Server wird unterbrochen und die gesamte Darstellung des Indikators verschwindet, die Daten, die er liefert, bleiben erhalten.

Können Sie vorschlagen, wo man darüber lesen kann und/oder was passiert, wenn die Verbindung unterbrochen wird, warum die Zeichnung verloren geht, aber die Daten erhalten bleiben. Ist es möglich, es noch einmal neu zu zeichnen?

Vielen Dank im Voraus!

Beginnen Sie mit dem Indikator, d. h. mit dem, was in OnCalculate() passiert, wenn der Parameter "rates_total" "0" ist:

Der erste Parameter rates_total enthält die Anzahl der Balken, die dem Indikator zur Berechnung zur Verfügung stehen, und entspricht der Anzahl der im Diagramm verfügbaren Balken.

Beachten Sie die Verbindung zwischen dem von OnCalculate() zurückgegebenen Wert und dem zweiten Eingabeparameter prev_calculated. Der Parameter prev_calculated im Funktionsaufruf enthält einen Wert, der von OnCalculate() beimvorherigen Aufrufzurückgegeben wurde. Dies ermöglicht sparsame Algorithmen für die Berechnung des benutzerdefinierten Indikators, um wiederholte Berechnungen für die Balken zu vermeiden, die sich seit dem letzten Aufruf dieser Funktion nicht verändert haben.

Dazu reicht es in der Regel aus, den Wert des Parameters rates_total zurückzugeben, der die Anzahl der Takte im aktuellen Funktionsaufruf enthält. Wenn sich seit dem letzten Aufruf von OnCalculate() die Preisdaten geändert haben (eine tiefere Historie wurde gepumpt oder Historienleerstellen wurden gefüllt), dann wird der Wert des Eingabeparameters prev_calculated vom Terminal auf Null gesetzt.

 
Karputov Vladimir:

Wenn es um Schaltflächen geht, hier ist ein Beispiel aus der Hilfe:

Hinweis: Die Tasten 1 und 2 sind nicht sperrbar, aber die Taste 3 ist sperrbar.

Kein gutes Beispiel:

1 weil Bibliotheken

2 weil es von einem Gremium gemacht wird

3 weil du es nicht verstehst.

Ich habe zwei Schaltflächen skizziert, eine ist fest und die andere muss freigeschaltet werden - "Hinzufügen", die freigeschaltet werden muss

//+------------------------------------------------------------------+
//|                                                         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;  
  
} 
 
Wie kann man dem Manager beitreten?
 
coon:
Wie kann man einem Manager beitreten?
Hier sind die Anweisungen:Wie man sich für Signaleanmeldet
 

mmm, einen Manager haben, die Wirksamkeit seiner Arbeit sehen, "investieren" wollen.

ps - Entschuldigung, ich bin eine Teekanne.

 
coon:

mmm, einen Manager haben, die Wirksamkeit seiner Arbeit sehen, "investieren" wollen.

Es tut mir leid, ich bin ein absoluter Neuling.

 

Danke, ich werde es mir ansehen.

Wirklich, bei der ersten Annäherung....... muss man schon vor Ort sein, um das zu verstehen.

Aber ich würde gerne....

Irgendwelche Optionen? Stellen Sie einen Antrag auf Beitritt, füllen den Papierkram aus, zahlen $ ein und das war's?

 
coon:

Danke, ich werde es mir ansehen.

Wirklich, bei der ersten Annäherung....... muss man schon vor Ort sein, um das zu verstehen.

Aber ich würde gerne....

Irgendwelche Optionen? Einen Antrag auf Mitgliedschaft stellen, den Papierkram ausfüllen, den Betrag einzahlen und das war's?

Lehrvideo ansehen:SieheLehrvideo über Signale auf YouTube

Sie müssen Geld auf Ihr MQL5-Konto einzahlen, um ein bezahltes Abonnement zu starten. Lesen Sie mehr über denSignaldienst FAQ

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