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

 
Valeriy Yastremskiy # :
Windows를 통해. 그래픽을 조정하면 크고 작은 글꼴도 조정되어야 합니다.

모니터가 2개라면? 다양한...

 
Artyom Trishkin # :

모니터가 2개라면? 다양한...

그런 다음 이미지가 표시되는 화면 해상도를 이해해야 합니다. 물체는 2개의 모니터에 닿을 수 있지만 이것은 더 어려운 작업입니다.
예, 음수 TextSetFont() 값을 통해 표준 시스템 글꼴에 바인딩하는 것이 좋은 솔루션입니다.
 

지표 최적화를 돕습니다. 칠면조는 작동하지만 천천히, 어드바이저의 최적화가 매우 오랜 시간 동안 지속됩니다. 무엇이 문제인지 말해줘? 작업 속도를 높이는 방법?

 //+------------------------------------------------------------------+
//|                                                     Momentum.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2022, MetaQuotes Software Corp."
#property link        " http://www.metaquotes.net/ "

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red

#property indicator_maximum 1
#property indicator_minimum 0

#property indicator_width1 2

//---- input parameters
extern int   MomPeriod    = 10 ;
extern int   WindowOfNorm = 45 ; // ширина окна нормирования в барах
extern int   MA_Length    = 10 ; // Average Period
extern int   MA_Mode      =   0 ; // Mode of Moving Average

//---- buffers
double NormBuffer[],MomBuffer[],AvgVolumes[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   SetIndexStyle( 2 , DRAW_NONE );
   SetIndexBuffer ( 2 ,NormBuffer);

   SetIndexStyle( 1 , DRAW_NONE );
   SetIndexBuffer ( 1 ,MomBuffer);
   
    SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 ,AvgVolumes);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Momentum                                                         |
//+------------------------------------------------------------------+
int start()
  {
   for ( int i = 1 ;i <= 130 ; i++)
     {
      MomBuffer[i]= iMA ( NULL , 0 ,MomPeriod, 0 , 0 , 0 ,i)* 100 / iMA ( NULL , 0 ,MomPeriod, 0 , 0 , 0 ,i+MomPeriod);

       // нормирование
      NormBuffer[i]=Norm(WindowOfNorm,i);
       //-----
      AvgVolumes[i] = iMAOnArray(NormBuffer, 0 ,MA_Length, 0 ,MA_Mode,i);
     }
   return ( 0 );
  }
//+------------------------------------------------------------------+

// нормирование
double Norm( int norm, int i) {
   // экстремумы
   double max=MomBuffer[ ArrayMaximum (MomBuffer,norm,i)];
   double min=MomBuffer[ ArrayMinimum (MomBuffer,norm,i)];
   // вычисление осциллятора
   double delta=max-min; // размах
   if (delta== 0 ) return ( 1 );
   else return ((MomBuffer[i]-min)/delta);
  }

 
IrishDance # :

지표 최적화를 돕습니다. 칠면조는 작동하지만 천천히, 어드바이저의 최적화가 매우 오랜 시간 동안 지속됩니다. 무엇이 문제인지 말해줘? 작업 속도를 높이는 방법?

그렇게 하지 않습니다. 이 라인만 주목해주세요

 //|                      Copyright © 2004 , MetaQuotes Software Corp. |

이 18년 동안 프로그래밍 언어는 전혀 작동하지 않을 정도로 변경되었습니다. MQ가 아직 int init() 및 int start() 함수를 비활성화하지 않은 이유를 이해하지 못합니다.

 

테스터에 2개의 VLine 매개변수가 있으면 오류 2022 .03.24 18:24:27.615가 표시됩니다. TestGenerator: 일치하지 않는 데이터 오류(2022.03.18 14:30에서 볼륨 제한 263 초과)

첫 번째 time1 매개변수를 제거하면 모든 것이 정상입니다.

 bool FlagOpOr= false ;
bool FlagClOr= false ;
bool Work= true ;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping

   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| 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[])
  {

//---
     static bool FlagNDay= true , FlagVLRed= false ,FlagVLBlue= false ;
   static datetime Data = 0 , NData= 0 ;
  Data = Day();
 if (NData!=Data){FlagVLRed= true ; FlagVLBlue= true ;NData=Data;} 
if (FlagVLRed== true && Hour()== 0 ){ VLine( 1 , clrRed ); FlagVLRed= false ;}
if (FlagVLBlue== true &&  Hour()== 1 ){ VLine( 1 , clrBlue ); FlagVLBlue= false ;  }
      
    
  
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+

void OnDeinit ( const int reason) //int deinit(void)void
  {
   int i;
   int obj_total= ObjectsTotal ();
   for (i=obj_total- 1 ;i>= 0 ;i--)
     {
 string      sn= ObjectName (i);
       string Head= StringSubstr (sn, 0 , 4 ); // Извлекаем первые 4 сим
       if (Head == "VLin" )
        {
           ObjectDelete (sn);       

       }
     }
   
     Comment ( "" );
   return ;
  }
 
   //+------------------------------------------------------------------+
   bool VLine( int time1= 0 , color clr = clrRed ){
   string   var1=TimeToStr( TimeCurrent (), TIME_DATE | TIME_SECONDS );
     string NameLine= "VLine_" +   "_" +var1;
             bool    created= ObjectCreate ( 0 ,NameLine, OBJ_VLINE , 0 , TimeCurrent (), 0 );
             if (created) // если создался - сделаем ему тюнинг
              {              
               //--- точка привязки сверху, чтобы не наезжать на бар
               ObjectSetInteger ( 0 ,NameLine, OBJPROP_STYLE , STYLE_SOLID );
               //--- последний штрих - покрасим
               ObjectSetInteger ( 0 ,NameLine, OBJPROP_COLOR ,clr);
               //--- установим толщину линии 
               ObjectSetInteger ( 0 ,NameLine, OBJPROP_WIDTH , 2 ); 
                
              }
               else return ( false );time1= 0 ;
               return ( true );
              }
 

좋은 오후에요 여러분. 거래 중에는 20-40개의 차트가 열립니다. 그리고 모든 도구의 맨 아래나 최상위 메뉴의 "창" 항목에서 필요한 도구를 찾아내려면 많은 시간을 보내야 합니다. 그리고 스크립트로 어떻게 든 속도를 높일 수 있습니다. 스크립트를 입력 매개 변수에 던지고 필요한 도구를 손으로 입력하면 눈으로 찾아서 마우스로 클릭 한 것처럼 열립니다. 그러한 것을 구현하는 방법?

 
DanilaMactep # :

좋은 오후에요 여러분. 거래 중에는 20-40개의 차트가 열립니다. 그리고 모든 도구의 맨 아래나 최상위 메뉴의 "창" 항목에서 필요한 도구를 찾아내려면 많은 시간을 보내야 합니다. 그리고 스크립트로 어떻게 든 속도를 높일 수 있습니다. 스크립트를 입력 매개 변수에 던지고 필요한 도구를 손으로 입력하면 눈으로 찾아서 마우스로 클릭 한 것처럼 열립니다. 그러한 것을 구현하는 방법?

논리적으로 스크립트는 몇 개의 차트/창이 열려 있고 어떤 도구에 대해 기억하고 있는지(기호 및 chart_id 차트)를 찾은 다음 도구 수에 따라 도구 이름이 쓰여진 버튼이 있는 패널을 그립니다. . 버튼을 누르면 필요한 도구가 있는 차트가 속성을 확장(접을 수 있음)으로 변경하고 무엇보다 스크립트를 닫습니다.

 
Valeriy Yastremskiy # :

논리적으로 스크립트는 몇 개의 차트/창이 열려 있고 어떤 도구에 대해 기억하고 있는지(기호 및 chart_id 차트)를 찾은 다음 도구 수에 따라 도구 이름이 쓰여진 버튼이 있는 패널을 그립니다. . 버튼을 누르면 필요한 도구가 있는 차트가 속성을 확장(접을 수 있음)으로 변경하고 무엇보다 스크립트를 닫습니다.

잘못된 논리 - 맨 아래, 창 메뉴 또는 스크립트에 의해 그려진 버튼에서 찾을 버튼의 차이점은 무엇입니까? 입력 매개변수에 원하는 문자를 입력하려면 스크립트가 이 창을 열도록 해야 합니다. 그렇게 하면 더 쉽고 빠릅니다. 그런 기적이 있는 사람이 있습니까? 공유해 주세요.
 

안녕하세요!

그리드 워커 어드바이저 구합니다.

시장 주문을 엽니다 - 그리드.

그리드가 특정(%) 이익에 도달하면 주문을 마감합니다.

그런 고문을 만났지만 지금은 찾을 수 없습니다.

누군가 손에 하나를 가지고 있습니까?

 
DanilaMactep # :
잘못된 논리 - 맨 아래, 창 메뉴 또는 스크립트에 의해 그려진 버튼에서 찾을 버튼의 차이점은 무엇입니까? 입력 매개변수에 원하는 문자를 입력하려면 스크립트가 이 창을 열도록 해야 합니다. 그렇게 하면 더 쉽고 빠릅니다. 그런 기적이 있는 사람이 있습니까? 공유해 주세요.
새 창을 열거나(어드바이저 없이 기본 템플릿으로 열림) 이미 열려 있는 창을 올리거나 확장합니다.
첨부된 코드를 보시면 조건별로 차트와 도면이 열거되어 있습니다. 도움이 될 수 있습니다.