초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 982

 

차트 중앙에 "Take Profit" 텍스트가 있는 입력 필드를 그리는 다음 코드가 있습니다.

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   Edit();
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   EditDel();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {

  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает объект "Поле ввода"                                      | 
//+------------------------------------------------------------------+ 
void EditCreate( ENUM_BASE_CORNER corner, string name, int x, int y, int width, int height, string text,
                 int font_size, ENUM_ALIGN_MODE align, bool read_only, color back_clr)
  {
   long cid= ChartID ();
   int subWind= 0 ;
   string font= "Consolas" ;
   color text_color= clrBlack ;
   color border_clr= clrDimGray ;
   bool back= false ;
   bool selectable= false ;
   bool selected= false ;
   bool hidden= true ;
   long zorder= 0 ;
   if ( ObjectFind (cid,name)==- 1 )
     {
       ObjectCreate (cid,name, OBJ_EDIT ,subWind, 0 , 0 );
       ObjectSetInteger (cid,name, OBJPROP_XDISTANCE ,x);
       ObjectSetInteger (cid,name, OBJPROP_YDISTANCE ,y);
       ObjectSetInteger (cid,name, OBJPROP_XSIZE ,width);
       ObjectSetInteger (cid,name, OBJPROP_YSIZE ,height);
       ObjectSetString (cid,name, OBJPROP_TEXT ,text);
       ObjectSetString (cid,name, OBJPROP_FONT ,font);
       ObjectSetInteger (cid,name, OBJPROP_FONTSIZE ,font_size);
       ObjectSetInteger (cid,name, OBJPROP_ALIGN ,align);
       ObjectSetInteger (cid,name, OBJPROP_READONLY ,read_only);
       ObjectSetInteger (cid,name, OBJPROP_CORNER ,corner);
       ObjectSetInteger (cid,name, OBJPROP_COLOR ,text_color);
       ObjectSetInteger (cid,name, OBJPROP_BGCOLOR ,back_clr);
       ObjectSetInteger (cid,name, OBJPROP_BORDER_COLOR ,border_clr);
       ObjectSetInteger (cid,name, OBJPROP_BACK ,back);
       ObjectSetInteger (cid,name, OBJPROP_SELECTABLE ,selectable);
       ObjectSetInteger (cid,name, OBJPROP_SELECTED ,selected);
       ObjectSetInteger (cid,name, OBJPROP_HIDDEN ,hidden);
       ObjectSetInteger (cid,name, OBJPROP_ZORDER ,zorder);
       ChartRedraw (cid);
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Edit()
  {
   long cid= ChartID ();
   if ( ObjectFind (cid, "edit tp" )< 0 )
     {
      EditCreate( CORNER_LEFT_UPPER , "edit tp" , 50 , 50 , 150 , 20 , "Take Profit" , 12 , ALIGN_CENTER , true , clrBeige );
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void EditDel()
  {
   long cid= ChartID ();
   ObjectDelete (cid, "edit tp" );
  }
//+------------------------------------------------------------------+

실시간 모드에서 실행하면 올바르게 작동합니다.

그리고 전략 테스터에서는 어떤 이유로 왼쪽에서 정렬이 발생합니다.


MT4에서 코드는 실시간과 테스터 모두에서 올바르게 작동합니다. 그런 트릭은 MT5에서만 볼 수 있습니다...

무엇이 잘못될 수 있습니까?

 
Oleg Remizov :

차트 중앙에 "Take Profit" 텍스트가 있는 입력 상자를 그리는 다음 코드가 있습니다.

실시간 모드에서 실행하면 올바르게 작동합니다.

그리고 전략 테스터에서는 어떤 이유로 왼쪽에서 정렬이 발생합니다.


MT4에서 코드는 실시간과 테스터 모두에서 올바르게 작동합니다. 그런 트릭은 MT5에서만 볼 수 있습니다...

무엇이 잘못될 수 있습니까?

MT5 테스터에서 이것은 이미 포럼에서 여러 번 논의되었습니다.

 

모두에게 좋은 하루. 여러분, 키보드와 마우스 버튼을 동시에 누르는 방법을 알려주세요. 예를 들어 버튼을 누르면 오브젝트가 그려지고, 같은 버튼 + 마우스 왼쪽 버튼을 누르면 다른 오브젝트가 그려집니다. 그리고 키보드와 마우스의 버튼을 누르면 2개의 오브젝트가 그려지는 것을 알 수 있습니다.

 if (lparam== 49 )
 {
 ObjectCreate ( 0 , "line" , OBJ_TREND , 0 ,time1,price1,time1+ 86400 ,price1);
 ChartRedraw ( 0 );
 }
if (lparam== 49 &&В MouseK== 1 )
 {
 ObjectCreate ( 0 , "Marg" , OBJ_LABEL , 0 , 0 , 0 );
 ObjectSetInteger ( 0 , "Marg" , OBJPROP_XDISTANCE , 280 ); 
 ObjectSetInteger ( 0 , "Marg" , OBJPROP_YDISTANCE , 20 ); 
 ChartRedraw ( 0 );
 }  
 

다음 기사로 작업하고 있습니다.

https://www.mql5.com/en/articles/4149

그리고 코드에서 내가 이해하지 못하는 몇 가지를 만났습니다. 의미를 설명해 주세요.

1. :: 연산자를 사용하는 이유( 범위 확인)

 void OnStart ()
  {
//---
   Test();
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Test                                                             |
//+------------------------------------------------------------------+
bool Test()
  {

   string pStream;
   string sources_filename= "Websorce.txt" ;

   int hFile,iStringSize;

// read file contents 
   hFile=:: FileOpen (sources_filename, FILE_TXT | FILE_READ | FILE_UNICODE );
   if (hFile== INVALID_HANDLE )
     {
      :: Print ( "error opening file " +sources_filename);
       return ( false );
     }

   while (!:: FileIsEnding (hFile))
     {


2. "_errCode |= code" 코드 줄은 무엇을 합니까? (이 비트 단위 "or" 연산자는 "_errCode =_errCode |code"와 동일하다는 것을 알고 있습니다.)


 class JSONParser {
     private :
         int _pos;
         ushort _in[];
         int _len;
         string _instr;
         int _errCode;
         string _errMsg;
      

         void setError( int code= 1 , string msg= "unknown error" ) {
           string _str = NULL ;
            _errCode |= code;
Создание пользовательской новостной ленты в MetaTrader 5
Создание пользовательской новостной ленты в MetaTrader 5
  • www.mql5.com
В терминале MetaTrader 5 есть множество полезных функций, которые могут пригодиться пользователю, независимо от его стиля торговли, включая и возможность доступа к ленте оперативных новостей. Это дает трейдеру торговый контекст, значимость которого сложно переоценить, ведь он может оказать влияние на рынки. Единственное ограничение — объем...
 
안녕하세요, mt4 데이터베이스에는 terster에서 수동 거래 시뮬레이터로 사용할 수 있는 어드바이저가 있습니다. 나쁜 트레이너는 아닙니다. 물론 한 시간대에만 실행할 수 있습니다. 질문이 있습니다. 그러한 고문 시뮬레이터를 다중 시간 프레임으로 만드는 것이 가능합니까? mt4 또는 mt5에서?
 
bahtiyar :
안녕하세요, mt4 데이터베이스에는 terster에서 수동 거래 시뮬레이터로 사용할 수 있는 어드바이저가 있습니다. 나쁜 트레이너는 아닙니다. 물론 한 시간대에만 실행할 수 있습니다. 질문이 있습니다. 그러한 고문 시뮬레이터를 다중 시간 프레임 으로 만드는 것이 가능 합니까? mt4 또는 mt5에서?

할 수 있다. 그리고 MT5의 경우 다중 통화이기도 하지만 몇 가지 제한 사항이 있습니다. 불행히도 테스터는 그래픽에서 작동하지 않습니다. 더 정확하게는 그래픽 개체를 수동으로 편집할 수 없습니다.

 
Alexey Viktorov :

할 수 있다. 그리고 MT5의 경우 다중 통화이기도 하지만 몇 가지 제한 사항이 있습니다. 불행히도 테스터는 그래픽에서 작동하지 않습니다. 더 정확하게는 그래픽 개체를 수동으로 편집할 수 없습니다.

답변 감사합니다 알렉스! 당신은 무엇을 할 수 있는지 대답했습니다. 제 질문을 명확히 하고 싶습니다. 테스터가 수동 거래 시뮬레이터로 사용될 것이기 때문에 시각화하는 동안 여러 시간 프레임을 분석할 수 있도록 만들 수 있습니까? 가능하다면 일반적인 용어로 어떻게 할 수 있습니까?7
 
bahtiyar :
답변 감사합니다 알렉스! 당신은 무엇을 할 수 있는지 대답했습니다. 제 질문을 명확히 하고 싶습니다. 테스터가 수동 거래 시뮬레이터로 사용될 것이기 때문에 시각화하는 동안 여러 시간 프레임을 분석할 수 있도록 만들 수 있습니까? 가능하다면 일반적인 용어로 어떻게 할 수 있습니까?7

안 돼요

 
bahtiyar :
답변 감사합니다 알렉스! 당신은 무엇을 할 수 있는지 대답했습니다. 제 질문을 명확히 하고 싶습니다. 테스터가 수동 거래 시뮬레이터로 사용될 것이기 때문에 시각화하는 동안 여러 시간 프레임을 분석할 수 있도록 만들 수 있습니까? 가능하다면 일반적인 용어로 어떻게 할 수 있습니까?7
비탈리 무지첸코 :

안 돼요

MT4 뿐만이 아닙니다. 그리고 나서도 원하는 깊이로 스토리를 볼 수 있도록 그래프를 설정할 수 있습니다.

MT5에서 테스터는 코드에서 사용되는 경우 표시기와 함께 프로그램에서 액세스하는 모든 기호 및 모든 시간 프레임을 로드합니다.

그러나 어쨌든 특별한 지표가 없으면 거래를 원하지 않도록 차트를 "점프"해야 합니다. 또는 실제 속도와 크게 다르지 않도록 속도를 설정해야 합니다.

 

메타에디터 구성의 최적화 플래그 가 프로그램 실행 속도를 높이는 데 어느 정도 도움이 됩니까? 무언가가 나를 천천히 테스트하고 있습니다 ... 이 최적화 도구는 얼마나 영향을 미칩니까?

불행히도 CDictionary 개체에 인스턴스를 추가할 때 충돌이 발생하여 사용할 수 없습니다.