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

 
ANDREY :

소중한 정보 감사합니다

또한, 그 과정에서 어떤 표현식이 참으로 판명되었는지 변수에서 기억하는 방법을 알려주십시오. 좀 더 정확히 말하면 함수에서 계산된 최소값은 어떤 시간대의 캔들에 속할까요? 이 TF의 식별자를 변수에 저장하는 방법은 무엇입니까?
감사해요

bool 변수를 선언하기만 하면 됩니다.

 bool variant_H4 = Bid- iLow ( NULL , PERIOD_H4 , 1 ) >= 0.0030 ,
     variant_H1 = Bid- iLow ( NULL , PERIOD_H1 , 1 ) >= 0.0030 ,
     variant_M30 = Bid- iLow ( NULL , PERIOD_M30 , 1 ) >= 0.0030 ;
if (variant_H4 || variant_H1 || variant_M30)
 
Alexey Viktorov :

bool 변수를 선언하기만 하면 됩니다.

유용한 정보 감사합니다.

그리고 테스트가 분 차트에서 수행되는 경우 최대 5자리의 정확도로 파란색 값을 노란색 변수에 저장하는 방법을 알려주세요.

 double LoU;
void OnTick ()
{
if (Bid - iLow ( NULL , PERIOD_H4 , 1 )>= 0.0030 ||Bid - iLow ( NULL , PERIOD_H1 , 1 )>= 0.0030 ||Bid - iLow ( NULL , PERIOD_M30 , 1 )>= 0.0030 )
{
OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 , 0 , 0 , "300" , 0 );
LoU = ( ЛОУ из выражения, которое оказалось истинным) ;
}
}

고맙습니다.

 
안녕하세요! mql4에서 줄에 텍스트를 첨부하여 마지막 줄을 이동할 때 스크린샷과 같이 비문도 함께 이동하도록 하는 방법을 알려주세요. 개체를 고정하는 방법에는 두 가지가 있습니다. 화면 모서리에 픽셀 단위로 고정하는 방식과 시간/가격 좌표 방식으로 고정하는 방식입니다. 첫 번째 옵션에서는 정적 텍스트를 얻고 두 번째 옵션에서는 내가 원하는 것을 얻을 수 있습니다. 가격 좌표(수직 바인딩)를 사용하면 명확합니다. 선의 가격을 가져와서 텍스트가 선 바로 위에 오도록 _Point 쌍을 추가합니다. 그러나 시간은 어떻습니까? 차트의 다른 이동으로 인해 비문이 오른쪽과 왼쪽으로 당겨지기 때문에 나는 그것을 마지막 막대에 묶고 싶지 않습니다. 여기에서 화면의 오른쪽 가장자리에 단단한 수평 스냅을 만들고 싶지만 어떻게 하는지 모르겠습니다.
 
Oleksandr Nozemtsev :
안녕하세요! mql4에서 줄에 텍스트를 첨부하여 마지막 줄을 이동할 때 스크린샷과 같이 비문도 함께 이동하도록 하는 방법을 알려주세요. 개체를 고정하는 방법에는 두 가지가 있습니다. 화면 모서리에 픽셀 단위로 고정하는 방식과 시간/가격 좌표 방식으로 고정하는 방식입니다. 첫 번째 옵션에서는 정적 텍스트를 얻고 두 번째 옵션에서는 내가 원하는 것을 얻을 수 있습니다. 가격 좌표(수직 바인딩)를 사용하면 명확합니다. 선의 가격을 가져와서 텍스트가 선 바로 위에 오도록 _Point 쌍을 추가합니다. 그러나 시간은 어떻습니까? 차트의 다른 이동으로 인해 비문이 오른쪽과 왼쪽으로 당겨지기 때문에 나는 그것을 마지막 막대에 묶고 싶지 않습니다. 여기에서 화면의 오른쪽 가장자리에 단단한 수평 스냅을 만들고 싶지만 어떻게 하는지 모르겠습니다.
선을 직접 그리십니까 아니면 지표를 그리십니까?
 
MakarFX :
선을 직접 그리십니까 아니면 지표를 그리십니까?

은 로드할 때 표시기에 의해 생성됩니다 . 이 텍스트는 라인 바로 위에 이 레벨에 대한 정보를 표시하는 데 필요하며 경고(경고 작동)에 표시하지 않습니다.

 
Oleksandr Nozemtsev :

은 로드할 때 표시기에 의해 생성됩니다 . 이 텍스트는 라인 바로 위에 이 레벨에 대한 정보를 표시하는 데 필요하며 경고(경고 작동)에 표시하지 않습니다.

라인 생성 코드 게시
 
MakarFX :
라인 생성 코드 게시

int OnInit()

{

// 아직 존재하지 않는 경우 "name_line" 라인을 생성합니다.

if(ObjectFind(0, name_line) == -1)

{

//가격이 설정되어 있지 않다면 현재 매도호가 수준으로 설정

if(!price_line)

price_line = SymbolInfoDouble (Symbol(), SYMBOL_ASK);

//오류 값 재설정

재설정 마지막 오류();

//라인 생성

if(!ObjectCreate(0, name_line, OBJ_HLINE, 0, 0, price_line))

Print("라인 라인. 오류 ", GetLastError());

//

ObjectSet(이름 라인, OBJPROP_COLOR, 색상 라인); //선 색상

ObjectSet(이름 라인, OBJPROP_STYLE, 스타일 라인); //선 스타일

ObjectSet(이름 라인, OBJPROP_WIDTH, 너비 라인); //선 두께

ObjectSet(이름 라인, OBJPROP_BACK, back_line); //전경/배경

ObjectSet(name_line, OBJPROP_SELECTABLE, selection_line);//마우스 클릭에 대한 개체의 가용성.

ObjectSet(이름 라인, OBJPROP_SELECTED, 선택 라인); //객체 선택. O - 생성 시 선택되지 않음

}

반환(INIT_SUCCESSED);

}

 
Oleksandr Nozemtsev :

잡다

 //+------------------------------------------------------------------+
//|                                                    Line_Text.mq4 |
//|                                           Copyright 2020 MakarFX |
//|                             https://www.mql5.com/ru/users/makarfx |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020 MakarFX"
#property link        " https://www.mql5.com/ru/users/makarfx "
#property version    "1.00"
#property strict
#property indicator_chart_window

double buy,sell;
datetime DoTime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   ObjectsDeleteAll ( 0 , "My_" );
   //--- indicator buffers mapping
   if ( ObjectFind ( 0 , "My_BuyLine" )!= 0 )
     {
      HLineCreate( 0 , "My_BuyLine" , 0 ,Ask+ 50 * Point , clrTeal , 2 , 1 , false , true , false );
     }
   if ( ObjectFind ( 0 , "My_SellLine" )!= 0 )
     {
      HLineCreate( 0 , "My_SellLine" , 0 ,Bid- 50 * Point , clrCrimson , 2 , 1 , false , true , false );
     }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   ObjectsDeleteAll ( 0 , "My_" );
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   DoTime = TimeCurrent ()+( Period ()* 60 * 7 );
   if ( ObjectFind ( 0 , "My_BuyLine" )== 0 )
     {
      buy = NormalizeDouble (ObjectGet( "My_BuyLine" ,OBJPROP_PRICE1), Digits );
      Create_Text( 0 , "My_BuyText" , 0 ,DoTime,buy+ 5 * Point , "BuyText" , "Arial" , 10 , clrTeal , 0 , 0 , false , false , false );     
     }
   if ( ObjectFind ( 0 , "My_SellLine" )== 0 )
     {
      sell = NormalizeDouble (ObjectGet( "My_SellLine" ,OBJPROP_PRICE1), Digits );
      Create_Text( 0 , "My_SellText" , 0 ,DoTime,sell- 5 * Point , "SellText" , "Arial" , 10 , clrCrimson , 0 , 0 , false , false , false );     
     }
   if (buy!=ObjectGet( "My_BuyLine" ,OBJPROP_PRICE1)||sell!=ObjectGet( "My_SellLine" ,OBJPROP_PRICE1))
     {
       ObjectMove ( 0 , "My_BuyText" , 0 ,DoTime,buy+ 5 * Point );
       ObjectMove ( 0 , "My_SellText" , 0 ,DoTime,sell- 5 * Point );
     }

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает горизонтальную линию                                                                                       | 
//+--------------------------------------------------------------------------------------------------------------------+
bool HLineCreate( const long             chart_ID= 0 ,         // ID графика 
                 const string           name= "HLine" ,       // имя линии 
                 const int              sub_window= 0 ,       // номер подокна 
                 double                 price= 0 ,           // цена линии 
                 const color            clr= clrRed ,         // цвет линии 
                 const ENUM_LINE_STYLE style= STYLE_SOLID , // стиль линии 
                 const int              width= 1 ,           // толщина линии 
                 const bool             back= false ,         // на заднем плане 
                 const bool             selection= true ,     // выделить для перемещений 
                 const bool             hidden= true ,       // скрыт в списке объектов 
                 const long             z_order= 0 )         // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError (); 
   //--- создадим горизонтальную линию 
   if (! ObjectCreate (chart_ID,name, OBJ_HLINE ,sub_window, 0 ,price)) 
      { 
       Print ( __FUNCTION__ , ": не удалось создать горизонтальную линию! Код ошибки = " , GetLastError ()); return ( false ); 
      } 
   //--- установим свойства линии 
   ObjectSetInteger (chart_ID, name, OBJPROP_COLOR , clr);
   ObjectSetInteger (chart_ID, name, OBJPROP_STYLE , style);
   ObjectSetInteger (chart_ID, name, OBJPROP_WIDTH , width);
   ObjectSetInteger (chart_ID, name, OBJPROP_BACK , back);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTABLE , selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTED , selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_HIDDEN , hidden);
   ObjectSetInteger (chart_ID, name, OBJPROP_ZORDER , z_order);
   //--- успешное выполнение 
   return ( true ); 
   } 
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает объект "Текст"                                                                                             | 
//+--------------------------------------------------------------------------------------------------------------------+
bool Create_Text( const long               chart_ID= 0 ,               // ID графика 
                 const string             name= "Text" ,               // имя объекта 
                 const int                sub_window= 0 ,             // номер подокна 
                 datetime                 time= 0 ,                   // время точки привязки 
                 double                   price= 0 ,                   // цена точки привязки 
                 const string             text= "Text" ,               // сам текст 
                 const string             font= "Arial" ,             // шрифт 
                 const int                font_size= 10 ,             // размер шрифта 
                 const color              clr= clrRed ,               // цвет 
                 const double             angle= 0.0 ,                 // наклон текста 
                 const ENUM_ANCHOR_POINT anchor= ANCHOR_LEFT_UPPER , // способ привязки 
                 const bool               back= false ,               // на заднем плане 
                 const bool               selection= false ,           // выделить для перемещений 
                 const bool               hidden= true ,               // скрыт в списке объектов 
                 const long               z_order= 0 )                 // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError (); 
   //--- создадим объект "Текст" 
   if (! ObjectCreate (chart_ID,name, OBJ_TEXT ,sub_window,time,price)) 
      { 
       Print ( __FUNCTION__ , ": не удалось создать объект \"Текст\"! Код ошибки = " , GetLastError ()); return ( false ); 
      } 
   //--- установим свойства объектa "Текст" 
   ObjectSetString (chart_ID,name, OBJPROP_TEXT ,text);
   ObjectSetString (chart_ID,name, OBJPROP_FONT ,font);
   ObjectSetInteger (chart_ID,name, OBJPROP_FONTSIZE ,font_size);
   ObjectSetDouble (chart_ID,name, OBJPROP_ANGLE ,angle);
   ObjectSetInteger (chart_ID,name, OBJPROP_ANCHOR ,anchor);
   ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
   ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection); 
   ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
   ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
   ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
   //--- успешное выполнение 
   return ( true ); 
   } 
//+------------------------------------------------------------------+
 
MakarFX :

잡다

오 얼마나! 나는 그것이 몇 줄의 코드라고 생각했다.) 나는 이해할 것이다. 고맙습니다!

 
Alexey Viktorov :

bool 변수를 선언하기만 하면 됩니다.

그리고 테스트가 분 차트에서 수행되는 경우 최대 5자리의 정확도로 파란색 값을 노란색 변수에 저장하는 방법을 알려주세요.

 double LoU;
void OnTick ()
{
if (Bid - iLow ( NULL , PERIOD_H4 , 1 )>= 0.0030 ||Bid - iLow ( NULL , PERIOD_H1 , 1 )>= 0.0030 ||Bid - iLow ( NULL , PERIOD_M30 , 1 )>= 0.0030 )
{
OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 , 0 , 0 , "300" , 0 );
LoU = ( ЛОУ из выражения, которое оказалось истинным );
}
}
감사해요