MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1555

 
MakarFX :

오류가 발생하지 않습니다.

런타임 오류 뿐만 아니라 알고리즘 오류도 있습니다!

원인을 찾으려면 코드가 필요합니다.

마카르FX :

이러한 좌표를 사용하면 버튼이 거꾸로 나옵니다. 버튼 길이는 점 X에서 +/-로 계산됩니다.

왜 그런 이상한 버튼이 있습니까?

 
MakarFX :

손익에 도달하면 ExpertRemove () 옵션을 제공할 수 있습니다.

고맙습니다

나는 그것을 읽었지만 논리를 잘 이해하지 못했다

지정된 이벤트에 도달하면 전문가가 비활성화되고 차트에서 완전히 제거됩니다.

 
Mihail Matkovskij :

런타임 오류 뿐만 아니라 알고리즘 오류도 있습니다!

원인을 찾으려면 코드가 필요합니다.

왜 그런 이상한 버튼이 있습니까?

나는 우연히 그런 버그를 발견했다고 썼습니다.

여기에 코드가 있습니다 ... 관심이 있다면

 //+------------------------------------------------------------------+
//|                                                          BAG.mq4 |
//|                                           Copyright 2020, DrMak. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, DrMak."
#property link        " https://www.mql5.com "
#property version    "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   CreateButton( 0 , "Button_1" , 0 , 200 , 100 , 100 , 50 , CORNER_RIGHT_UPPER , " " , "START" , "Arial Black" , 10 ,
   clrWhite , clrGreen , BORDER_SUNKEN , false , false , false , false , false , 0 );
   CreateButton( 0 , "Button_2" , 0 , 200 , 100 ,- 100 ,- 50 , CORNER_RIGHT_UPPER , " " , "START" , "Arial Black" , 10 ,
   clrWhite , clrGreen , BORDER_SUNKEN , false , false , false , false , false , 0 );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   ObjectsDeleteAll ( 0 , "Button_" );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Создает кнопку                                                   |
//+------------------------------------------------------------------+
bool CreateButton( const long               chart_ID= 0 ,               // ID графика
                   const string             name= "Button" ,             // имя кнопки
                   const int                sub_window= 0 ,             // номер подокна
                   const int                x= 0 ,                       // координата по оси X
                   const int                y= 0 ,                       // координата по оси Y
                   const int                width= 50 ,                 // ширина кнопки
                   const int                height= 18 ,                 // высота кнопки
                   const int                corner= 0 ,                 // угол графика для привязки
                   const string             tool= "TOOLTIP" ,           // TOOLTIP
                   const string             text= "Button" ,             // текст
                   const string             font= "Arial" ,             // шрифт
                   const int                font_size= 10 ,             // размер шрифта
                   const color              clr= clrBlack ,             // цвет текста
                   const color              back_clr= C'236,233,216' ,   // цвет фона
                   ENUM_BORDER_TYPE         border_type= BORDER_FLAT ,   // тип границы
                   const bool               state= false ,               // нажата/отжата
                   const bool               back= false ,               // на заднем плане
                   const bool               selection= false ,           // выделить для перемещений
                   const bool               selected= false ,           // выделить для перемещений
                   const bool               hidden= true ,               // скрыт в списке объектов
                   const long               z_order= 0 )                 // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError ();
//--- создадим кнопку
   if (! ObjectCreate (chart_ID,name, OBJ_BUTTON ,sub_window, 0 , 0 ))
     {
       Print ( __FUNCTION__ , ": не удалось создать кнопку! Код ошибки = " , GetLastError ()); return ( false );
     }
   ObjectSetInteger (chart_ID,name, OBJPROP_XDISTANCE ,x);
   ObjectSetInteger (chart_ID,name, OBJPROP_YDISTANCE ,y);
   ObjectSetInteger (chart_ID,name, OBJPROP_XSIZE ,width);
   ObjectSetInteger (chart_ID,name, OBJPROP_YSIZE ,height);
   ObjectSetInteger (chart_ID,name, OBJPROP_CORNER ,corner);
   ObjectSetString (chart_ID,name, OBJPROP_TOOLTIP ,tool);
   ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text);
   ObjectSetString (chart_ID,name, OBJPROP_FONT ,font);
   ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size);
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
   ObjectSetInteger (chart_ID,name, OBJPROP_BGCOLOR ,back_clr);
   ObjectSetInteger (chart_ID,name, OBJPROP_BORDER_TYPE ,border_type);
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
   ObjectSetInteger (chart_ID,name, OBJPROP_STATE ,state);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selected);
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение
   return ( true );
  }
//+------------------------------------------------------------------+
 
законопослушный гражданин :

고맙습니다

나는 그것을 읽었지만 논리를 잘 이해하지 못했다

지정된 이벤트에 도달하면 전문가가 비활성화되고 차트에서 완전히 제거됩니다.

 
MakarFX :

나는 우연히 그런 버그를 발견했다고 썼습니다.

여기에 코드가 있습니다 ... 관심이 있다면

따라서 여기에서는 어떤 버튼도 응답하지 않습니다. OnChartEvent 핸들러가 비어 있습니다...

 
Mihail Matkovskij :

따라서 여기에서는 어떤 버튼도 응답하지 않습니다. OnChartEvent 핸들러가 비어 있습니다...

그리고 당신은 시도) 하나의 버튼이 눌려지고 두 번째는 그렇지 않습니다
 
MakarFX :
그리고 당신은 시도) 하나의 버튼이 눌려지고 두 번째 버튼이 눌려지지 않습니다

그리고 일반적으로 누가 이것을 수행하고 부정적인 차원을 설정하며 왜 묻기를 주저 합니까? ...

 
MakarFX :

이해했다. 그것은 나에게 어울리지 않을 것이다.

올빼미를 끈 후 로트가 시작 위치로 재설정되도록 전역 변수 생성으로 돌아갈 수 있습니다.

비록 그렇다 하더라도

당신이 만듭니다   전역 변수

 datetime Start;

int OnInit ()
{
   Start= TimeCurrent ();
.....................
}
void OnTick ()
{
   if (!IsTradeAllowed()) 
   {
      DrawLABEL( "Торговля" , 0 , 0 , 0 ,Red, "Торговля запрещена" );
      Start= TimeCurrent ();
       return ;
   } 
.....................
}

그런 다음 나중에 개설/마감된 주문이 없으면 "시작"

Lots=Lot;
어떻게 만드는지 이해가 안감
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные - Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
законопослушный гражданин :

이해했다. 그것은 나에게 어울리지 않을 것이다.

올빼미를 끈 후 로트가 시작 위치로 재설정되도록 전역 변수 생성으로 돌아갈 수 있습니다.

비록 그렇다 하더라도

당신이 만듭니다   전역 변수

그런 다음 나중에 개설/마감된 주문이 없으면 "시작"

어떻게 만드는지 이해가 안감

버튼을 만들어줄게


 
Mihail Matkovskij :

그리고 일반적으로 누가 이것을 수행하고 부정적인 차원을 설정하며 왜 묻기를 주저 합니까? ...

우연히 그런 버그를 발견하고 재미있어졌습니다.