[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 160

 
extern double SL = 100 , TP = 200 , Tral = 0 , steps = 2 , Level = 100 ;
extern int TF1 = 0 , TF2 = 60 , TF3 = 240 , per1 = 14 , per2 = 14 , per3 = 14 , shiftbars = 20 ;
double sl , tp , cci [ 3 ] , lastbar , lastpos = - 1 , lot = 0.1 , x = 0.0001 , calc , price , lb ;
int init ( ) { if ( SL < Tral ) SL = Tral ; if ( MarketInfo ( Symbol ( ) , MODE_DIGITS ) = = 3 ) x = 0.01 ; TP * = x ; SL * = x ; Tral * = x ; calc = MathPow ( 2 , steps ) * 0.1 ; }

double lot ( ) { int l ; double lotiki = 0.1 ; bool isit = false ;
for ( int i = 1 ; i < = steps ; i + + ) {
if ( ! OrderSelect ( OrdersHistoryTotal ( ) - i , SELECT_BY_POS , MODE_HISTORY ) ) break ;
if ( OrderProfit ( ) > 0 ) lotiki * = 2 ; l + + ;
if ( OrderLots ( ) = = calc ) { isit = true ; break ; }
if ( OrderProfit ( ) < 0 ) break ; }
if ( l = = steps + 1 | | isit ) lotiki = 0.1 ;
return ( lotiki ) ; }

int Trailing ( )
{ double Tip , SL1 ;
for ( int i = OrdersTotal ( ) - 1 ; i > = 0 ; i - - ) {
OrderSelect ( i , SELECT_BY_POS ) ; if ( OrderMagicNumber ( ) = = 350000 ) {
Tip = OrderType ( ) ; SL1 = OrderStopLoss ( ) ;
if ( Tip = = 0 ) { if ( Bid - SL1 > Tral ) { OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , Bid - Tral , OrderTakeProfit ( ) , 0 ) ; break ; } }
if ( Tip = = 1 ) { if ( SL1 - Ask > Tral ) { OrderModify ( OrderTicket ( ) , OrderOpenPrice ( ) , Ask + Tral , OrderTakeProfit ( ) , 0 ) ; break ; } }
} } }

int Closeorders ( ) {
for ( int i = OrdersTotal ( ) - 1 ; i > = 0 ; i - - ) { OrderSelect ( i , SELECT_BY_POS ) ; if ( OrderMagicNumber ( ) = = 350000 )
{ if ( OrderType ( ) = = 0 ) price = Bid ; else price = Ask ; OrderClose ( OrderTicket ( ) , OrderLots ( ) , price , 50 ) ; break ; } }
}
void start ( ) {
//if(iBarShift(NULL,0,lastbar,false)==0)return;
//lastbar=CurTime();
if ( OrdersTotal ( ) ! = 0 & & Tral ! = 0 ) { Trailing ( ) ; }
//cci=iCustom(NULL,0,"i-3CCI-h3",CCI_Period_0,Level_0,TF_1,CCI_Period_1,Level_1,TF_2,CCI_Period_2,Level_2,1000,-1,0,0);
cci [ 0 ] = iCCI ( NULL , TF1 , per1 , 0 , 1 ) ;
cci [ 1 ] = iCCI ( NULL , TF2 , per2 , 0 , 0 ) ;
cci [ 2 ] = iCCI ( NULL , TF3 , per3 , 0 , 0 ) ;
string s1 = "cci-0 *** " + DoubleToStr ( cci [ 0 ] , 3 ) ;
string s2 = "cci-1 *** " + DoubleToStr ( cci [ 1 ] , 3 ) ;
string s3 = "cci-2 *** " + DoubleToStr ( cci [ 2 ] , 3 ) ;
string str [ 3 ] ;
str [ 0 ] = s1 ;
str [ 1 ] = s2 ;
str [ 2 ] = s3 ;
color col = Lime ;
     for ( int y = 0 ; y < 3 ; y + + )
     { ObjectCreate ( "textSignal" + y , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 ) ;    
      ObjectSet ( "textSignal" + y , OBJPROP_CORNER , 1 ) ;
      ObjectSet ( "textSignal" + y , OBJPROP_XDISTANCE , 35 - 25 ) ;
      ObjectSet ( "textSignal" + y , OBJPROP_YDISTANCE , y * ( 20 ) + 20 + 8 ) ;
      if ( cci [ y ] > = 0 ) col = Lime ; else col = Red ;
      if ( cci [ y ] > Level ) col = Aqua ;
      if ( cci [ y ] < - Level ) col = DarkViolet ;
      ObjectSetText ( "textSignal" + y , str [ y ] , 15 , "Tahoma" , col ) ;
     }
if ( OrdersTotal ( ) ! = 0 ) return ;
if ( cci [ 0 ] > Level & & cci [ 1 ] > Level & & cci [ 2 ] > Level & & ( /*iBarShift(NULL,0,lb,false)>shiftbars || */ lastpos ! = 0 ) )
{ Closeorders ( ) ; tp = Ask + TP ; sl = Ask - SL ; if ( TP = = 0 ) tp = 0 ; if ( SL = = 0 ) sl = 0 ;
OrderSend ( Symbol ( ) , 0 , lot ( ) , Ask , 50 , sl , tp , "i-3CCI-h3_Buy" , 350000 , 0 ) ; lastpos = 0 ; lb = Time [ 0 ] ; }
if ( cci [ 0 ] < - Level & & cci [ 1 ] < - Level & & cci [ 2 ] < - Level & & ( /*iBarShift(NULL,0,lb,false)>shiftbars || */ lastpos ! = 1 ) )
{ Closeorders ( ) ; tp = Bid - TP ; sl = Ask + SL ; if ( TP = = 0 ) tp = 0 ; if ( SL = = 0 ) sl = 0 ;
OrderSend ( Symbol ( ) , 1 , lot ( ) , Bid , 50 , sl , tp , "i-3CCI-h3_Sell" , 350000 , 0 ) ; lastpos = 1 ; lb = Time [ 0 ] ; }
}
도와주세요.

1.mq4(첨부) EA의 시각적 테스트 중에 3-cci-h3 표시기(첨부)를 차트로 드래그하면 계산된 cci의 절대적으로 동일한 매개변수를 사용하여 표시기 신호 및 실제 cci(오른쪽 상단 모서리에 있는 개체 텍스트)가 일치하지 않습니다.

왜요?

그리고 어떤 이유로 이 칠면조에서는 경고가 작동하지 않습니다.

어드바이저 코드:





표시기 코드:

//+----------------------------------------------- --------------------+
//| i-3CCI-h.mq4 |
//| johnfantom & kimiv |
//| http://www.kimiv.ru |
//| |
//| 2006년 1월 2일 하나의 바이알에 3개의 TF가 포함된 CCI. |
//+----------------------------------------------- --------------------+
#property copyright "johnfantom & KimIV"
#속성 링크 "http://www.kimiv.ru"

#속성 표시기_분리_창
#속성 표시기_버퍼 1
#property indicator_color1 다저블루
#속성 표시기_최대 1.4
#속성 표시기_레벨1 0
#속성 표시기_최소 -1.2

//------- 표시기의 외부 매개변수 -------------------------------
외부 정수 CCI_Period_0 = 14; // 현재 TF의 CCI 주기
외부 정수 Level_0 = 100; // 현재 TF의 CCI 레벨
외부 int TF_1 = 60; // 첫 번째 TF의 분 수
외부 정수 CCI_Period_1 = 14; // 첫 번째 TF의 CCI 기간
외부 정수 Level_1 = 100; // 첫 번째 TF의 CCI 레벨
외부 정수 TF_2 = 240; // 두 번째 TF의 분 수
외부 int CCI_Period_2 = 14; // 두 번째 TF의 CCI 기간
외부 정수 Level_2 = 100; // 두 번째 TF의 CCI 레벨
외부 정수 NumberOfBars = 1000; // 계산할 막대의 수(0-모두)
extern int ExtBars=3;
정수 당;


//------- 인디케이터 버퍼 ------------------- ---
이중 buf0[];

//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
무효 초기화() {
표시자숫자(1);

SetIndexBuffer(0, buf0);
SetIndexLabel(0, "i-3CCI-h");
SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2);
SetIndexEmptyValue(0, 0);
}

//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
무효 deinit() {
논평("");
}

//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- --------------------+
무효 시작() {
이중 cci0, cci1, cci2;
int nb1, nb2, 개수;
정수 LoopBegin, sh;


if (NumberOfBars==0) LoopBegin=Bars-1;
else LoopBegin=바 수-1;
LoopBegin=MathMin(막대-1, LoopBegin);
count=IndicatorCounted();
(sh=카운트, sh>=0, sh--) {
nb1=iBarShift(NULL, TF_1, 시간[sh+1], 거짓);
nb2=iBarShift(NULL, TF_2, 시간[sh+1], 거짓);

cci0=iCCI(NULL, 0, CCI_Period_0, PRICE_CLOSE, sh+1);
cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1);
cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2);
/* 이중 cci[3];
cci[0]=cci0;
cci[1]=cci1;
cci[2]=cci2;
string s1="cci-0 *** "+DoubleToStr(cci[0],3);
string s2="cci-1 *** "+DoubleToStr(cci[1],3);
string s3="cci-2 *** "+DoubleToStr(cci[2],3);
문자열 str[3];
str[0]=s1;
str[1]=s2;
str[2]=s3;
colorcol=라임;
for(int y=0;y<3;y++)
{ObjectCreate("textSignal"+y,OBJ_LABEL,0,0,0,0,0);
ObjectSet("텍스트 신호"+y,OBJPROP_CORNER,1);
ObjectSet("텍스트 신호"+y,OBJPROP_XDISTANCE,35-25);
ObjectSet("텍스트 신호"+y,OBJPROP_YDISTANCE,y*(20)+20+8);
if(cci[y]>=0)col=라임;else col=빨간색;
if(cci[y]>Level_0) col=아쿠아;
if(cci[y]<-Level_0) col=다크바이올렛;
ObjectSetText("textSignal"+y,str[y],15,"타호마",col);
}
*/
if (cci0>Level_0 && cci1>Level_1 && cci2>Level_2) {buf0[sh]=1;
if (per != Time[0]당) {per = Time[0]당;
if(sh<=ExtBars && ExtBars!=-1)
Alert(Symbol(),Period()," ",
TimeYear(시간[sh]),".",
TimeDay(시간[시]),".",
TimeMonth(시간[시]),"; ",
TimeHour(시간[시]),":",
TimeMinute(시간[시])," ",
"구입");}}
if (cci0<-Level_0 && cci1<-Level_1 && cci2<-Level_2) {buf0[sh]=-1;
if (per != Time[0]당) {per = Time[0]당;
if(sh<=ExtBars && ExtBars!=-1)
Alert(Symbol(),Period()," ",
TimeYear(시간[sh]),".",
TimeDay(시간[시]),".",
TimeMonth(시간[시]),"; ",
TimeHour(시간[시]),":",
TimeMinute(시간[시])," ",
"판매");}}
}
}
//+----------------------------------------------- --------------------+
 

직접 해보십시오. 뭔가가 전혀 작동하지 않습니다. 후플로가 그립니다.

이론적으로 라인은 일치해야 합니다. 그러나 실제로는 조금 다르게 나타납니다.

 int start ( )
  {
   int    counted_bars = IndicatorCounted ( ) ;
//----
   ObjectCreate ( "fibowhite" , OBJ_TRENDBYANGLE , 0 , 0 , 0 , 0 , 0 ) ;
   //ObjectSet("fibowhite",OBJPROP_ANGLE,angle_);
   ObjectSet ( "fibowhite" , OBJPROP_TIME1 , Time [ 5 ] ) ;
   ObjectSet ( "fibowhite" , OBJPROP_TIME2 , Time [ 1 ] ) ;
   ObjectSet ( "fibowhite" , OBJPROP_PRICE1 , Low [ 5 ] ) ;
   ObjectSet ( "fibowhite" , OBJPROP_PRICE2 , Low [ 1 ] ) ;
   ObjectSet ( "fibowhite" , OBJPROP_COLOR , Red ) ;
   //----------------------------------------------------------
   ObjectCreate ( "fibowhite1" , OBJ_TRENDBYANGLE , 0 , 0 , 0 , 0 , 0 ) ;
   ObjectSet ( "fibowhite1" , OBJPROP_TIME1 , Time [ 5 ] ) ;
   //ObjectSet("fibowhite1",OBJPROP_TIME2,Time[1]);
   ObjectSet ( "fibowhite1" , OBJPROP_PRICE1 , Low [ 5 ] ) ;
   //ObjectSet("fibowhite1",OBJPROP_PRICE2,Low[1]);
   ObjectSet ( "fibowhite1" , OBJPROP_COLOR , Green ) ;
   WindowRedraw ( ) ;
   double awd = ObjectGet ( "fibowhite" , OBJPROP_ANGLE ) ;
   Comment ( "AngleRED= " , ObjectGet ( "fibowhite" , OBJPROP_ANGLE ) , " \n AngleWHITE= " , ObjectGet ( "fibowhite1" , OBJPROP_ANGLE ) ) ;
   ObjectSet ( "fibowhite1" , OBJPROP_ANGLE , ObjectGet ( "fibowhite" , OBJPROP_ANGLE ) ) ;
   
//----
   return ( 0 ) ;
  }
 

무엇이 잘못될 수 있는지 말씀해 주십시오.

버퍼에 값을 쓰는 재귀 함수를 만들었습니다.

표시기에서 호출하면 잘 작동합니다. 고문에 넣으려고하면 대답은 0입니다.

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

 
Andrej78 писал(а) >>

무엇이 잘못될 수 있는지 말씀해 주십시오.

버퍼에 값을 쓰는 재귀 함수를 만들었습니다.

표시기에서 호출하면 잘 작동합니다. 고문에 넣으려고하면 대답은 0입니다.

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

아마도 버퍼 크기가 설정되지 않은 것 같습니다!?

 

플러그가 있는 곳을 찾았습니다.

IndicatorCounted는 표시기 에 0을 제공하고 어드바이저에서 -1을 제공하는 것으로 나타났습니다(함수에 정확성 검사가 있으므로 >=0이므로 어드바이저에서 고려되지 않음)

왜 이런 일이 발생하고 오류를 제거하는 방법은 무엇입니까?

MT4 빌드 225, 페어 유로스드 M1.

 
Andrej78 писал(а) >>

플러그가 있는 곳을 찾았습니다.

IndicatorCounted는 표시기 에 0을 제공하고 어드바이저에서 -1을 제공하는 것으로 나타났습니다(함수에 정확성 검사가 있으므로 >=0이므로 어드바이저에서 고려되지 않음)

왜 이런 일이 일어나고 오류를 제거하는 방법은 무엇입니까?

MT4 빌드 225, 페어 유로스드 M1.

https://docs.mql4.com/en/customind

 

  if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true) 
  {
  int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green); 
  bay=false;
  Print (GetLastError());
  }
  }
  if (s>(High[0]-(High[0]-Low[0])/2) && bay==false)
  {
  OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES);
  Print (GetLastError());
  OrderClose(t,0.1,Ask,5,Red);
  }

여기에 오류가 무엇입니까? 로그에 표시되는 코드 4051은 주문을 마감할 때 올바른 티켓이 아닙니다. 알려주세요 pliz ??
 
evgenio писал(а) >>

if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true)
{
int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green);
bay=false;
Print (GetLastError());
}
}
if (s>(High[0]-(High[0]-Low[0])/2) && bay==false)
{
OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES);
Print (GetLastError());
OrderClose(t,0.1,Ask,5,Red);
}

여기에 오류가 무엇입니까? 로그에 표시되는 코드 4051은 주문을 마감할 때 올바른 티켓이 아닙니다. 알려주세요 pliz ??

열기 및 닫기는 다른 틱에서 발생합니다. 그리고 Advisor는 한 번 변수 t에 할당된 것을 더 이상 기억하지 않습니다. 또는 전역 또는 정적으로 만들어야 합니다.

전역은 함수 외부에서 정의됩니다. 또는 정적 int로 선언

 
Vinin >> :

열기 및 닫기는 다른 틱에서 발생합니다. 그리고 Advisor는 한 번 변수 t에 할당된 것을 더 이상 기억하지 않습니다. 또는 전역 또는 정적으로 만들어야 합니다.

전역은 함수 외부에서 정의됩니다. 또는 정적 int로 선언

확실히 적립해 주셔서 감사합니다.))

 

내가 설정한 표시기에서(시간[i]와 비교하기 위해):

 extern datetime StartRange           = D'1970.12.24' ;
extern datetime EndRange             = D'2020.12.24' ;


그런 다음 루프에서

   Comment (
       " \n " , "Time[i]                = "    , Time [ i ] ,
       " \n " , "StrToTime(StartRange)  = "    , StrToTime ( StartRange ) ,
       " \n " , "StrToTime(EndRange)    = "    , StrToTime ( EndRange ) ,
   " \n " ) ;


결과적으로 StrToTime (StartRange) StrToTime(EndRange)은 0을 반환 합니다.

- 그 이유와 해결 방법은?

사유: