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

 
Sergey Gritsay :

Vitaly 여기 https://www.mql5.com/ru/docs/series/timeseries_access#synchronized , 히스토리 로드를 위한 스크립트의 예가 있습니다. 도움이 될 수 있습니다.

감사합니다. 해결해 보겠습니다.

이제 질문이 생깁니다.

다음으로 중요한 검사는 함수가 호출되는 프로그램 유형입니다. 업데이트를 유발하는 지표와 동일한 주기로 시계열 업데이트 요청을 보내는 것은 매우 바람직하지 않다는 점을 기억하십시오. 표시기와 동일한 기호 기간 동안 데이터를 요청하는 것이 바람직하지 않은 것은 표시기가 작동하는 동일한 스레드에서 기록 데이터가 업데이트된다는 사실 때문입니다. 따라서 클린치의 가능성이 높습니다. 확인하기 위해 MQL5_PROGRAM_TYPE 수정자와 함께 MQL5InfoInteger() 함수를 사용합니다.

    if ( MQL5InfoInteger ( MQL5_PROGRAM_TYPE )== PROGRAM_INDICATOR && 마침표 ()== 마침표 && 기호 ()== 기호 )
       리턴 (-4);


그것은 지표에서 나를 위해 일해야합니다.

 

여러분, 저는 지그재그로 고통 받고 있습니다.

네 꼭짓점의 정확한 데이터를 가져와야 합니다. iCustom이 가장 먼저 필요한 정점을 잘못 제공한 것으로 나타났습니다. 그래픽 이미지보다 뒤쳐지며 다음 세 가지가 맞습니다. 유사한 것이 이미 발견되었습니다 - https://www.mql5.com/ru/forum/100123

나는 이미 모든 것을 시도했고 심지어 ZigZag 데이터를 확인하기 위해 별도의 Expert Advisor를 던졌습니다. 내가 어딘가에서 실수를 한 것은 아닐까? 시작 가격 시각화를 설치하고 활성화하기만 하면 됩니다. 받아-


 //+------------------------------------------------------------------+
//|                                                  data_ZigZag.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"

input string    data_Zig_Zag_IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII;
input int       ExtDepth= 12 ;
input int       ExtDeviation= 5 ;
input int       ExtBackstep = 3 ;
input int n_zz= 100 ; //n_zz =100; 
double pd_1,pd_2,pd_3,pd_4;
int pn_1,pn_2,pn_3,pn_4;
int zz_Handle;
double zz_buf[];
datetime time[];
string this_sym;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   this_sym= Symbol ();
//+------------------------------------------------------------------+
//--- сохраним текущий символ графика для дальнейшей работы советника именно на этом символе
   zz_Handle= iCustom (this_sym, 0 , "Examples\\Zigzag" ,
                     ExtDepth,
                     ExtDeviation,
                     ExtBackstep
                     );
   Print ( __FUNCTION__ , "__LINE__" , __LINE__ , " . . . . . " ,
         "zz_Handle = " ,zz_Handle, "  error = " , GetLastError ());
//--- проверяем наличие хендла индикатора
   if (zz_Handle== INVALID_HANDLE )
     {
       //--- хендл не получен, выводим сообщение в лог об ошибке, завершаем работу с ошибкой
       Print ( __FUNCTION__ , "__LINE__" , __LINE__ , " ----- " ,
             "Не удалось получить хендл индикатора zz_Handle" , "  error = " , GetLastError ());
       return (- 1 );
     }
//--- добавляем индикатор на ценовой график
   ChartIndicatorAdd ( ChartID (), 0 ,zz_Handle);
//--- устанавливаем индексацию для массива zz_buf как в таймсерии
   ArraySetAsSeries (zz_buf, true );
   ArraySetAsSeries (time, true );
//---

//+------------------------------------------------------------------+
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   IndicatorRelease (zz_Handle);
   ArrayFree (zz_buf);
   ArrayFree (time);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//+------------------------------------------------------------------+
   int zz_copy= 0 ;
//--- копируем данные из индикаторного массива в динамический массив 
   zz_copy= CopyBuffer (zz_Handle, 0 , 0 ,n_zz,zz_buf);
//--- если есть ошибки, то выводим сообщение в лог об ошибке и выходим из функции
   if (zz_copy< 0 )
     {
       Print ( "Не удалось скопировать данные из индикаторного буфера zz_buf.  error = " ,
             GetLastError ()); return ;
     }
//+------------------------------------------------------------------+
   pd_1 = 0 ;
   pd_2 = 0 ;
   pd_3 = 0 ;
   pd_4 = 0 ;
   pn_1 = 0 ;
   pn_2 = 0 ;
   pn_3 = 0 ;
   pn_4 = 0 ;

   int zz_q= ArraySize (zz_buf);
   int q= 0 ;

   for (q= 0 ; q<zz_q; q++)
     {
       if (zz_buf[q]!= 0 && zz_buf[q]!= EMPTY_VALUE )
        {
               if (pd_1== 0 ) { pn_1=q; pd_1=zz_buf[q]; }
         else if (pd_2== 0 ) { pn_2=q; pd_2=zz_buf[q]; }
         else if (pd_3== 0 ) { pn_3=q; pd_3=zz_buf[q]; }
         else if (pd_4== 0 ) { pn_4=q; pd_4=zz_buf[q]; }
        }
       if (pn_4> 0 ) break ;
     }
//+------------------------------------------------------------------+
   CopyTime (this_sym, Period (), 0 ,n_zz,time);
//+------------------------------------------------------------------+
   ObjectDelete ( 0 , "name1" );
   string name1= "name1" ;

   if (! ObjectCreate ( 0 ,name1, OBJ_ARROW_UP , 0 ,time[pn_1],pd_1))
     {
       Print ( __FUNCTION__ , "__LINE__" , __LINE__ ,
             ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = " , GetLastError ());
     }
//--- установим размер знака 
   ObjectSetInteger ( 0 ,name1, OBJPROP_WIDTH , 6 );
//+------------------------------------------------------------------+
   ObjectDelete ( 0 , "name2" );
   string name2= "name2" ;

   if (! ObjectCreate ( 0 ,name2, OBJ_ARROW_UP , 0 ,time[pn_2],pd_2))
     {
       Print ( __FUNCTION__ , "__LINE__" , __LINE__ ,
             ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = " , GetLastError ());
     }
//--- установим размер знака 
   ObjectSetInteger ( 0 ,name2, OBJPROP_WIDTH , 6 );
//+------------------------------------------------------------------+
   ObjectDelete ( 0 , "name3" );
   string name3= "name3" ;

   if (! ObjectCreate ( 0 ,name3, OBJ_ARROW_UP , 0 ,time[pn_3],pd_3))
     {
       Print ( __FUNCTION__ , "__LINE__" , __LINE__ ,
             ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = " , GetLastError ());
     }
//--- установим размер знака 
   ObjectSetInteger ( 0 ,name3, OBJPROP_WIDTH , 6 );
//+------------------------------------------------------------------+
   ObjectDelete ( 0 , "name4" );
   string name4= "name4" ;

   if (! ObjectCreate ( 0 ,name4, OBJ_ARROW_UP , 0 ,time[pn_4],pd_4))
     {
       Print ( __FUNCTION__ , "__LINE__" , __LINE__ ,
             ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = " , GetLastError ());
     }
//--- установим размер знака 
   ObjectSetInteger ( 0 ,name4, OBJPROP_WIDTH , 6 );
//+------------------------------------------------------------------+
///*
   if (pd_1!= 0 && pd_2!= 0 && pd_3!= 0 && pd_4!= 0 )
       Alert ( __FUNCTION__ , "__LINE__" , __LINE__ ,
             "   q =" ,q,
             "   pd_1 =" ,pd_1,
             "   pd_2 =" ,pd_2,
             "   pd_3 =" ,pd_3,
             "   pd_4 =" ,pd_4,

             "   pn_1 =" ,pn_1,
             "   pn_2 =" ,pn_2,
             "   pn_3 =" ,pn_3,
             "   pn_4 =" ,pn_4,
             "   TimeCurrent()=" , TimeCurrent ()
            );
//*/
//+------------------------------------------------------------------+
  }
//+------------------------------------------------------------------+
정확한 데이터를 얻는 방법?
Как получить значение индикатора ZigZag в точках...
Как получить значение индикатора ZigZag в точках...
  • 2006.04.09
  • www.mql5.com
Уважаемые гуру и другие адепты MQ4 Я прикрепил схемку. Это стандартный ZigZag...
 
안녕하세요. 어제부터 MQL 공부를 시작해서 그런 글을 썼습니다.


테스터는 다음과 같은 결과를 제공합니다.


트릭이 어디에 있는지 알 수 없습니다. 친애하는 전문가 여러분, 저를 계몽해 주십시오. 매우 감사하겠습니다.


 

질문 메타트레이더 4에서 한 번의 클릭으로 주어진 손절매와 이익으로 내가 선택한 2개에서 250개까지의 포지션을 여는 프로그램을 작성할 수 있습니까? 일일이 수동으로 열지 않도록

 
fxtz :

질문 메타트레이더 4에서 한 번의 클릭으로 주어진 손절매와 이익으로 내가 선택한 2개에서 250개까지의 포지션을 여는 프로그램을 작성할 수 있습니까? 일일이 수동으로 열지 않도록

할 수 있다. 여기 MT5에서 잘못된 위치에 질문하세요.

MT4 문제에 대한 초보자를 위한 여러 분기가 있습니다.

예를 들어 - 여기 .

 
antonsinichkin :
안녕하세요. 어제부터 MQL 공부를 시작해서 그런 글을 썼습니다.


테스터는 다음과 같은 결과를 제공합니다.


트릭이 어디에 있는지 알 수 없습니다. 친애하는 전문가 여러분, 저를 계몽해 주십시오. 매우 감사하겠습니다.



인쇄하기 전에 double을 문자열로 변환하십시오. 아니면 뭐가 잘못된건지 설명좀...
 
이 주제와 관련이 없는 댓글은 " MQL4 MT4 MetaTrader 4 초보자의 질문 "으로 이동되었습니다.
 
안녕하세요. 빌드 1604에 대한 마지막 MT5 업데이트 후 표시기가 올바르게 작동하지 않았습니다. 나는 사용한다
소위 "액체" 표시기. 예를 들어, 서로 다른 기간의 여러 스토캐스틱이 하나의 창에 설정됩니다. 이제 짧은 것이 그려집니다.
일반적으로 이전과 같이 약간 더 긴 것은 몇 개의 막대만 그리고 가장 긴 것은 전혀 그려지지 않습니다.

스토리가 많이 부족해진 것 같습니다. 무슨 일이 있었는지 제안할 수 있습니까?
 
최근에 mql4에서 mql5로 이동했습니다. 나는 RTS 인덱스에 대한 어드바이저를 테스트하고 있는데 그러한 문제가 있었습니다. 비록 거래를 위한 조건 중 하나가 작성되었지만 여러 거래를 엽니다. if (... OrdersTotal()==0 ). 이 조건이 작동하지 않는 이유는 무엇입니까? 하나의 거래만 열려면 무엇을 할 수 있습니까?
 
RogozaIV :
최근에 mql4에서 mql5로 이동했습니다. 나는 RTS 인덱스에 대한 어드바이저를 테스트하고 있는데 그러한 문제가 있었습니다. 비록 거래를 만들기 위한 조건 중 하나가 작성되었지만 여러 거래를 엽니다: if (...OrdersTotal()==0). 이 조건이 작동하지 않는 이유는 무엇입니까? 하나의 거래만 열려면 무엇을 할 수 있습니까?
 PositionsTotal ()
사유: