[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 270

 
drknn :


1. 정규 함수가 정확히 무엇을 반환해야 하는지 결정하려면 메인 코드에 왜 그런 값이 필요한지 알아야 합니다. 예를 들어 신호가 있을 때 구매 주문을 열기로 결정해야 하는 경우 이미 열려 있는 구매 주문 수를 반환하는 함수를 작성할 것입니다. 얼마나 많은가에 따라 코드는 코드에 포함된 논리에 따라 결정을 내립니다. 터미널에 어떤 반환 코드 처리 논리가 중첩되어 있는지 모르겠습니다. 오늘 세마포어 생성에 대한 기사를 보다가 리턴 코드(-2)를 발견했습니다. 놀라서 여기에 질문을 했습니다. 오직 그리고 모든 것. ( https://www.mql5.com/en/articles/1412 - 기사는 여기에 있습니다).

2. 터미널은 반환 값을 무시합니다. 그건 확실합니다? 그렇다면 왜 어드바이저/지시자/스크립트를 생성할 때 개발자가 템플릿에 정확히 int를 입력했는지에 대한 정당한 질문이 다시 발생합니다. 왜냐하면 거기에 void를 넣는 것이 더 논리적이기 때문입니다. 그러면 터미널은 무시할 필요가 없습니다. 무엇이든 - 그러면 1 프로세서 사이클 시간을 얻을 수 있습니까? int init(), int deinit() 및 int start() 함수에서 반환할 내용에 논리가 있을 수 있습니까? 제 생각에는 Roche가 이미 누군가에게 이것을 설명했습니다. 0을 반환해야 할 때와 (-1)을 반환해야 할 때에 대한 설명이 있었던 것을 기억합니다. 이것은 내가 찾던 설명입니다. 죄송합니다 못찾았습니다...

추신

반환 (-2) 기사의 저자는 자신의 목적을 위해 사용합니다. 그러나 start() 함수가 0이 아닌 반환 코드로 끝나는 경우가 있다는 사실은 여전히 남아 있습니다. 그리고 이것은 한 사람에 의해 이루어지지 않습니다. 이것이 내가 이해하고 싶은 논리입니다.

1. 아무것도 추가할 수 없습니다. 원하는 것을 반환하십시오.

2. 터미널은 무시하지만 코드가 그렇게 빌드되면 무시하지 않습니다. 시스템 호출은 매개변수와 반환 값을 모두 무시합니다. 분명해. 이 경우 어디로 돌아갑니까?

템플릿 생성에 대해서만 추측할 수 있습니다. 확실히 개발자들은 기본 INT에서 진행했습니다.

 
okvseok :

다음 행을 어떻게 이해할 수 있습니까?

다음과 같이 작성하고 로그를 확인하십시오.

 //---- return orders volume

if (buys> 0 ){
 Print ( "buys = " ,buys);
 return (buys);
}
else {
 Print ( "-sells = " ,-sells);
 return (-sells);// это эквивалентно команде return(sells*(-1));
}
 

조언을 도와주세요.

전역 변수에 날짜가 있는 여러 표시기를 사용합니다.

 extern bool    shiftdata           = false ;
extern string ShiftHistory        = "02.06.2012 00:00" ;

기록에서 날짜를 변경할 때마다 모든 표시기에서 날짜를 변경하려고 합니다.

iCustom을 통해 시프트 값을 int 막대로 보내는 표시기를 작성했습니다 .

그런데 문제는 날짜가 변경되지 않고 전송된다는 점, 컴파일된 날짜(07/02/2012)이며, 수동으로 변경하면(2012/06/02) 전송되지 않는다는 점!!!

왜 그리고 무엇을 해야 합니까????

 //+------------------------------------------------------------------+
//|                                                        iTime.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 1
extern string BLOK_______1        = "Работа с историей" ;
extern string ShiftHistory        = "02.07.2012 00:00" ;
extern string PERIOD              = "D1" ;
//---
double buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer ( 0 ,buffer);
   SetIndexStyle ( 0 , DRAW_ARROW , 0 , 0 );
   SetIndexEmptyValue ( 0 , 0.0 );
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
int   counted_bars= IndicatorCounted ();
if (counted_bars< 0 ) return (- 1 );
int i,period,limit,bs,barn;

if (PERIOD== "MN1" ) period= PERIOD_MN1 ;
else
if (PERIOD== "W1" )  period= PERIOD_W1 ;
else
if (PERIOD== "D1" )  period= PERIOD_D1 ;
else 
if (PERIOD== "H4" )  period= PERIOD_H4 ;
else
if (PERIOD== "H1" )  period= PERIOD_H1 ;
else
if (PERIOD== "M30" ) period= PERIOD_M30 ;
else
if (PERIOD== "M15" ) period= PERIOD_M15 ;
else
if (PERIOD== "M5" )  period= PERIOD_M5 ;
else
if (PERIOD== "M1" )  period= PERIOD_M1 ;
else
period= PERIOD_D1 ;

bs= iBarShift ( Symbol (),period, StrToTime (ShiftHistory));
barn= iBars ( Symbol (),period);
limit=barn- 100 ;

if (limit>bs)
for (i=barn- 1 ; i>= 0 ; i--)
{
if (i==bs) buffer[i]=bs;
} RefreshRates ();
return ( 0 );
}

여기 수신기가 있습니다

 for ( int y=barn- 100 ; y>= 0 ; y--)
{
int bbb,st= iCustom ( Symbol (),PERIOD, "iTime" , 0 ,y);
if (st> 0 ) bbb=st;
}
 Comment (bbb);

코멘트는 shift 16을 씁니다. 그리고 2012년 6월 2일에는 48이어야 합니다.

조언을 도와주세요!

 

EA에서 지그재그의 마지막 고점과 저점(피크)을 결정하는 방법을 도와주세요.

더블 zz1;
정수 시작()
{
zz1=iCustom(NULL,0,"지그재그", 12, 5, 3, 0, 1);
메시지 상자(" zz1 ="+zz1,"zz1");
반환(0);
}
"0.00000"만 나옵니다.

 
spek :

EA에서 지그재그의 마지막 고점과 저점(피크)을 결정하는 방법을 도와주세요.

더블 zz1;
정수 시작()
{
zz1=iCustom(NULL,0,"지그재그", 12, 5, 3, 0, 1);
메시지박스("zz1="+zz1,"zz1");
반환(0);
}
"0.00000"만 나옵니다.

 double ZZ[ 10000 ]={ 0.0 };   //массив для значений ZigZag
double zz1[ 10000 ]={ 0.0 };

//-----
int init()
{

}
return ( 0 );
//---
int start()
{
int q=1;   //ПОПРАВИЛ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

for ( int i= 1 ; i<= 1000 ; i++)
{
zz1[i]= iCustom ( NULL , 0 , "ZigZag" , 12 , 5 , 3 , 0 , i);
if (zzl[i]> 0 ) { ZZ[q]=zzl[i];  q++; }
//MessageBox("zz1="+zz1,"zz1");
Comment (ZZ[ 1 ], "  " ,ZZ[ 2 ]);

return ( 0 );
}
 

사람들에게 "mikahekin" 표시기가 표시된 버퍼를 변경하는 방법(또는 오히려 어디에서)을 설명해주세요. 일주일 동안 정신을 바짝 차렸지만 이해할 수 없었습니다.

추세가 역전되었을 때 알려주도록 " Alert() "를 거기에 밀어 넣고 싶습니다.

 //+------------------------------------------------------------------+
//|                                                    mikahekin.mq4 |
//|                        Copyright 2004, MetaQuotes Software Corp. |
//|                                                http://www.sasara |
//|                              Modified by: Ronald Verwer/ROVERCOM |
//+------------------------------------------------------------------+
#property copyright "Copyright 2004, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

#property  indicator_chart_window
#property  indicator_buffers 4
#property  indicator_color1  Silver
#property  indicator_color2  Yellow
#property  indicator_color3  Red
#property  indicator_color4  Blue
#property  indicator_width1 3
#property  indicator_width2 3

//---- input parameters
extern int KPeriod= 3 ;
extern int DPeriod= 3 ;
extern int JPeriod= 7 ;

double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
double HighesBuffer[];
double LowesBuffer[];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
         IndicatorBuffers ( 6 );
   SetIndexStyle ( 0 , DRAW_HISTOGRAM , 0 , 3 );
   SetIndexStyle ( 1 , DRAW_HISTOGRAM , 0 , 3 );
   SetIndexStyle ( 2 , DRAW_ARROW , 0 , 1 );
   SetIndexStyle ( 3 , DRAW_ARROW , 0 , 1 );
//----
   SetIndexDrawBegin ( 0 , 10 );
   SetIndexDrawBegin ( 1 , 10 );
   SetIndexDrawBegin ( 2 , 10 );
   SetIndexDrawBegin ( 3 , 10 );
   SetIndexDrawBegin ( 4 , 10 );
   SetIndexDrawBegin ( 5 , 10 );
//---- indicator buffers mapping
   SetIndexBuffer ( 0 ,ind_buffer1);
   SetIndexBuffer ( 1 ,ind_buffer2);
   SetIndexBuffer ( 2 ,ind_buffer3);
   SetIndexBuffer ( 3 ,ind_buffer4);
   SetIndexBuffer ( 4 , HighesBuffer);
   SetIndexBuffer ( 5 , LowesBuffer);
   
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName ( "mikahekin" );
   SetIndexLabel ( 0 , "Open" );
   SetIndexLabel ( 1 , "Close" );
   SetIndexLabel ( 2 , "High" );
   SetIndexLabel ( 3 , "Low" );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int start()
  {
   int     i,k,j;
   int     counted_bars= IndicatorCounted ();
   double price;
   
//----
   if ( Bars <= 10 ) return ( 0 );
//---- initial zero
   if (counted_bars< 0 ) return (- 1 );
//---- minimums  counting
   i= Bars -KPeriod;
   if (counted_bars>KPeriod) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {
       double min= 1000000 ;
      k=i+KPeriod- 1 ;
       while (k>=i)
        {
         price=Low[k];
         if (min>price) min=price;
         k--;
        }
      LowesBuffer[i]=min;
      i--;
     }
//---- maximums counting
   i= Bars -DPeriod;
   if (counted_bars>DPeriod) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {
       double max=- 100000 ;
      j=i+DPeriod- 1 ;
       while (j>=i)
        {
         price=High[j];
         if (price>max) max=price;
         j--;
        }
      HighesBuffer[i]=max;
      i--;
     }
//---- mikahekin calcaulation
   i= Bars -JPeriod;
   if (counted_bars>JPeriod) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {
       double sumlow= 0.0 ;
       double sumhigh= 0.0 ;
       double sumopen= 0.0 ;
       double sumclose= 0.0 ;
       double close= 0.0 ;
       double open= 0.0 ;
       double high= 0.0 ;
       double low= 0.0 ;

       for (k=(i+JPeriod- 1 );k>=i;k--)
         {
         sumclose+=Close[k];
         close=sumclose/JPeriod;
         sumlow+= LowesBuffer[k];
         low= sumlow/JPeriod;
         sumopen+=Open[k];
         open=sumopen/JPeriod;
         sumhigh+=HighesBuffer[k];
         high=sumhigh/JPeriod;
         }
         
      ind_buffer1[i]=open;
      ind_buffer2[i]=close;
      ind_buffer3[i]=high;
      ind_buffer4[i]=low;

      i--;
     }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
Z.Y. 나는 발레보다 mql4가 조금 낫지만...
 
Zhunko :

1. 아무것도 추가할 수 없습니다. 원하는 것을 반환합니다.

2. 터미널은 무시하지만 코드가 그렇게 빌드된 경우 무시하지 않습니다. 시스템 호출은 매개변수와 반환 값을 모두 무시합니다. 분명해. 이 경우 어디로 돌아갑니까?

템플릿 생성에 대해서만 추측할 수 있습니다. 확실히 개발자들은 기본 INT에서 진행했습니다.


틱이 도착하면 터미널 은 EA의 start() 함수를 호출합니다 . 이 함수에서 반환된 값은 터미널에 무관하다고 말합니다. 이것은 어딘가에 문서화되어 있습니까?
 
KoKoS :

사람들에게 "mikahekin" 표시기가 표시된 버퍼를 변경하는 방법(또는 오히려 어디에서)을 설명해주세요. 일주일 동안 정신을 바짝 차렸지만 이해할 수 없었습니다.

추세가 역전되었을 때 알려주도록 "Alert()"를 거기에 넣고 싶습니다.

Z.Y. 나는 발레보다 mql4가 조금 낫지만...


문자열

 #property  indicator_color1  Silver
#property  indicator_color2  Yellow

그들은 처음 두 버퍼가 추세 변화의 지표라고 말합니다. 결국 빨간색 아이콘은 양초 상단에, 파란색 아이콘은 하단에 표시됩니다. 추세의 굴절률로 황회색 조합 만 작동합니다. 그들 각각은 다음과 같습니다.

 //---- indicator buffers mapping
   SetIndexBuffer ( 0 ,ind_buffer1); // для серого цвета
   SetIndexBuffer ( 1 ,ind_buffer2); // для жёлтого цвета
거기에서이 버퍼의 값을 파십시오.
 
여러분, iCustom을 통한 날짜 이전에 대해 알려주세요. 현재 컴파일된 값을 전송합니다. 버퍼를 통해 전역 수준에서 변경된 값을 전송하는 방법은 무엇입니까? 날짜를 변경해도 이전 지식이 계속 전송됩니다.
 extern bool    shiftdata           = false ;
extern string ShiftHistory        = "02.06.2012 00:00" ;

지표는 조금 더 높은 곳에 게시됩니다 .....

아니면 안바뀌나요?????

선생님들 말씀해주세요.

 

가능한 경우 다음과 같은 조건에 대한 코드를 작성하는 데 도움을 주십시오.

"TakeProfit에 의해 주문이 마감된 경우 이동 평균 을 교차한 후 가격이 반대 방향으로 이동 평균을 교차할 때까지 이 방향으로 더 이상 거래를 열지 마십시오."

미리 감사합니다!

사유: