Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 608

[Удален]  

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

Не мне Вам объяснять. 2-3 пункта на выполнение. 0,1-1 пункт комиссия. И так далее.

Но, опять же нет мне смысла Вам объяснять, что есть еще и другие параметры.

Например, предположим что мы попали в тренд. По EURUSD, к примеру. За период с января этого года, к примеру, опять же!!! То сколько мы заработаем по сей день? Легко подсчитать. Но что? Если вкладывая точно такие же деньги. Мы точно такую же прибыль получим за пару дней? Вот о чем должен мечтать трейдер!! Теперь, перейдем к делу. Стратегия? Если таковая возможна в машинном коде?? Должна делать нечто подобное, или приближенное к стратегии опытного трейдера.

 Одним словом, глядя на Ваше сотворение! Что можно сказать? Я сказать ничего не могу. Как все плохо! Все так не хорошо. Все так далеко от истинного направления. Я просто смотрю телек. Я Отдыхаю, Просто!!!

Но удачи, Вам все же.

[Удален]  
new-rena:

Ты думал чтобы так ответить 30 минут?

Это не ответ. Конкретнее Пако.

Ты же знаешь, что не смешно совсем другое, но история об этом умалчивает...

в телеге считает правильно :)))
[Удален]  
pako:
в телеге считает правильно :)))

Всё равно идея тут и я её дал (так что....):

if(PrevMonth!=MonthOfYear && DayOfMonth==1)    {       Delta=DayOfWeeks;       Show=1;    }

WeekOfMonth=MathCeil((DayOfMonth+Delta)/7); 

 
new-rena:

Надо еще всунуть, когда 1-е число месяца попало на выходные, т.к. тестер выходные не крутит... Про эксель не видел.

Ну и крутануть в инициализации с пару месяцев назад И до текщего месяца не мешало БЫ, чтобы не ждать окончания расчета номера недели целый месяц. Но это уже всё нюансы....

Вот чем и красив MQL4 - код короткий и понятный!

Сейчас особо нет времени, но у Кима есть все функции по поиску дат и времени, там и начало месяца, и номер недели, в общем видел всё, где видел - не помню, но возможно здесь: https://forum.mql4.com/ru/38949
 
Дмитрий уже давно всё для вас расписал про время, дни, недели, месяцы, годы... Велосипед изобретаете?
[Удален]  

Ах. Годы, месяцы дни недели. Часы??? 15 минут??? Ах. !5 минут отработали и Ах. Ах как много денег. Или двадцать? А потом опять. Ах.

[Удален]  
Karputov Vladimir:

Когда индикатор нужно добавить в главное окно

int OnInit() 
  { 
   
//--- Создание кнопки 
  if( !ObjectCreate( 0, "Add_Indicator", OBJ_BUTTON, 0, 0, 0 ) )
  {
  
    Print( "Кнопка 'Добавить' не создана!" );
    return( INIT_FAILED );
  }
  else
  {
    ObjectSetInteger( 0, "Add_Indicator", OBJPROP_CORNER, CORNER_RIGHT_LOWER );
    ObjectSetInteger( 0, "Add_Indicator", OBJPROP_XDISTANCE, 200 );             
    ObjectSetInteger( 0, "Add_Indicator", OBJPROP_YDISTANCE, 500 );
    ObjectSetInteger( 0, "Add_Indicator", OBJPROP_XSIZE, 80 );
    ObjectSetInteger( 0, "Add_Indicator", OBJPROP_YSIZE, 20);

      ObjectSetInteger( 0, "Add_Indicator", OBJPROP_BGCOLOR, clrWhite );
      ObjectSetInteger( 0, "Add_Indicator", OBJPROP_STATE, true );
      ObjectSetString( 0, "Add_Indicator", OBJPROP_TEXT, "Добавить" );
     
  }
    
MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",MA_Period,MA_Shift,MA_Method,PRICE_CLOSE);
   if(MA_handle==INVALID_HANDLE)
//--- попробуем добавить индикатор на график 
 Print(__FUNCTION__,", first_start = ",first_start);
//return(INIT_FAILED);
   return(INIT_SUCCEEDED);
  } 
//+------------------------------------------------------------------+
//| Обработка события нажатия кнопок                                 |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события   
                  const long& lparam,   // параметр события типа long 
                  const double& dparam, // параметр события типа double 
                  const string& sparam  // параметр события типа string 
                  )                
  {
   long b_state;
   //---
   if(id==CHARTEVENT_OBJECT_CLICK) // НАЖАТ ГРАФИЧЕСКИЙ ОБЪЕКТ       
         if ( sparam == "Add_Indicator" )// Нажата кнопка
         {
      if ( ObjectGetInteger( 0, "Add_Indicator", OBJPROP_STATE, 0, b_state ) )
      {
        if ( b_state == 1 )
        {
          first_start=false;
          ObjectSetInteger( 0, "Add_Indicator", OBJPROP_BGCOLOR,clrWhite );
          ObjectSetString( 0, "Add_Indicator", OBJPROP_TEXT, "Добавить" );
        }
   }
}
 return;
}

 

Тоже из примеров взял код кнопки ,  ....  Как сделать чтобы нажатие кнопки было не фиксированным , т.е после выполнения своей функции она возвращалась в свое исходное состояние ..

 

[Удален]  
new-rena:
Вам нужна пользовательская панель управления, которая позволит добавлять какой-либо номер индикатора в количестве от одного и более?

Да вот не знаю как проще сделать , нужна ли она или нет..

над этим потом подумаю 

 
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. Разрывается связь с сервером и вся отрисовка индикатора пропадает, непосредственно данные, которые он предоставляет, остаются.

Не могли бы подсказать, где про это можно почитать и/или что происходит при потери соединения, почему отрисовка пропадает, а данные остаются. Можно ли отрисовку еще раз прорисовать?

Заранее спасибо!