KimIV의 유용한 기능 - 페이지 116

 

SetChannel() 함수.

이 함수는 OBJ_CHANNEL 개체를 현재 차트의 등거리 채널로 설정합니다.

  • cl - 개체의 색상입니다. 필수 매개변수입니다.
  • t[] - 시간 축을 따라 세 값의 배열입니다. 필수 매개변수입니다.
  • p[] - 가격 축을 따라 세 개의 값으로 구성된 배열입니다. 필수 매개변수입니다.
  • nm - 개체의 이름입니다. 기본값을 전달할 때 - "" 현재 막대의 여는 시간이 이름으로 사용됩니다.
  • ry - RAY 속성의 플래그입니다. 기본값은 False 입니다.
  • st - 선 스타일. 유효한 값은 STYLE_SOLID (기본값), STYLE_DASH , STYLE_DOT , STYLE_DASHDOT , STYLE_DASHDOTDOT 입니다.
  • wd - 선 두께. 기본값은 1 입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2013                                                     |
//|  Описание : Установка объекта OBJ_CHANNEL Равноудаленный канал.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl  - цвет линии                                                        |
//|    t[] - время открытия бара                                               |
//|    p[] - ценовой уровень                                                   |
//|    nm  - наименование              (  ""  - время открытия текущего бара)  |
//|    ry  - луч                       (False - по умолчанию)                  |
//|    st  - стиль линии               (  0   - простая линия)                 |
//|    wd  - ширина линии              (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetChannel( color cl, datetime & t[], double & p[],
                 string nm= "" , bool ry=False, int st= 0 , int wd= 1 ) {
   if (nm== "" ) nm=DoubleToStr(Time[ 0 ], 0 );
   if (t[ 0 ]<= 0 ) t[ 0 ]=Time[ 20 ];
   if (p[ 0 ]<= 0 ) p[ 0 ]=High[ 20 ];
   if (t[ 1 ]<= 0 ) t[ 1 ]=Time[ 0 ];
   if (p[ 1 ]<= 0 ) p[ 1 ]=High[ 0 ];
   if (t[ 2 ]<= 0 ) t[ 2 ]=Time[ 15 ];
   if (p[ 2 ]<= 0 ) p[ 2 ]=Low[ 15 ];
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_CHANNEL , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
  ObjectSet(nm, OBJPROP_TIME1 , t[ 0 ]);
  ObjectSet(nm, OBJPROP_PRICE1, p[ 0 ]);
  ObjectSet(nm, OBJPROP_TIME2 , t[ 1 ]);
  ObjectSet(nm, OBJPROP_PRICE2, p[ 1 ]);
  ObjectSet(nm, OBJPROP_TIME3 , t[ 2 ]);
  ObjectSet(nm, OBJPROP_PRICE3, p[ 2 ]);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY    , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
추신. SetChannel() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
파일:
 

안녕하세요.

KimIV https://forum.mql4.com/ru/38949/page6#434255 의 SetTLine() 함수를 사용합니다.   문제는 두 줄(위쪽과 아래쪽)이 필요하지만 작동하지 않는다는 것입니다. 다른 변수로 다른 SetTLine1() 함수를 만들었지만 여전히 작동하지 않았습니다.   그것을 하는 방법?

 //+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
datetime d0=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE));
datetime d1= TimeCurrent ()- 24 * 60 * 60 ;
while (TimeDayOfWeek(d1)== 0 || TimeDayOfWeek(d1)== 6 ) d1-= 24 * 60 * 60 ;
d1=StrToTime(TimeToStr(d1, TIME_DATE));
datetime d2=d1- 24 * 60 * 60 ;
while (TimeDayOfWeek(d2)== 0 || TimeDayOfWeek(d2)== 6 ) d2-= 24 * 60 * 60 ;
d2=StrToTime(TimeToStr(d2, TIME_DATE));
int b2=iBarShift( NULL , 0 , d2);     // номер бара начала второго дня
int b1=iBarShift( NULL , 0 , d1);     // номер бара начала первого дня
int b0=iBarShift( NULL , 0 , d0);     // номер бара начала текущего дня
int n2=iLowest( NULL , 0 , MODE_LOW, b2-b1- 1 , b1);
int n1=iLowest( NULL , 0 , MODE_LOW, b1-b0- 1 , b0);
datetime t1=Time[n2];
double    p1=Low[n2];
datetime t2=Time[n1];
double    p2=Low[n1];
SetTLine(Magenta, "" , t1, p1, t2, p2, True, STYLE_SOLID , 3 );   


datetime di0=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE));
datetime di1= TimeCurrent ()- 24 * 60 * 60 ;
while (TimeDayOfWeek(di1)== 0 || TimeDayOfWeek(di1)== 6 ) di1-= 24 * 60 * 60 ;
di1=StrToTime(TimeToStr(di1, TIME_DATE));
datetime di2=di1- 24 * 60 * 60 ;
while (TimeDayOfWeek(di2)== 0 || TimeDayOfWeek(di2)== 6 ) di2-= 24 * 60 * 60 ;
di2=StrToTime(TimeToStr(di2, TIME_DATE));
int bi2=iBarShift( NULL , 0 , di2);     // номер бара начала второго дня
int bi1=iBarShift( NULL , 0 , di1);     // номер бара начала первого дня
int bi0=iBarShift( NULL , 0 , di0);     // номер бара начала текущего дня
int ni2=iHighest( NULL , 0 , MODE_HIGH, bi2-bi1- 1 , bi1);
int ni1=iHighest( NULL , 0 , MODE_HIGH, bi1-bi0- 1 , bi0);
datetime t1i=Time[ni2];
double    p1i=High[ni2];
datetime t2i=Time[ni1];
double    p2i=High[ni1];
SetTLine1(Magenta, "" , t1i, p1i, t2i, p2i, True, STYLE_SOLID , 3 );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine( color cl, string nm= "" ,
               datetime t1= 0 , double p1= 0 , datetime t2= 0 , double p2= 0 ,
               bool ry=False, int st= 0 , int wd= 1 ) {
   if (nm== "" ) nm=DoubleToStr(Time[ 0 ], 0 );
   if (t1<= 0 ) t1=Time[ 10 ];
   if (p1<= 0 ) p1=Low[ 10 ];
   if (t2<= 0 ) t2=Time[ 0 ];
   if (p2<= 0 ) p2=Bid;
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  ObjectSet(nm, OBJPROP_PRICE2, p2);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY    , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}


void SetTLine1( color cli, string nmi= "" ,
               datetime t1i= 0 , double p1i= 0 , datetime t2i= 0 , double p2i= 0 ,
               bool ryi=False, int sti= 0 , int wdi= 1 ) {
   if (nmi== "" ) nmi=DoubleToStr(Time[ 0 ], 0 );
   if (t1i<= 0 ) t1i=Time[ 10 ];
   if (p1i<= 0 ) p1i=Low[ 10 ];
   if (t2i<= 0 ) t2i=Time[ 0 ];
   if (p2i<= 0 ) p2i=Bid;
   if ( ObjectFind (nmi)< 0 ) ObjectCreate (nmi, OBJ_TREND , 0 , 0 , 0 , 0 , 0 );
  ObjectSet(nmi, OBJPROP_TIME1 , t1i);
  ObjectSet(nmi, OBJPROP_PRICE1, p1i);
  ObjectSet(nmi, OBJPROP_TIME2 , t2i);
  ObjectSet(nmi, OBJPROP_PRICE2, p2i);
  ObjectSet(nmi, OBJPROP_COLOR , cli);
  ObjectSet(nmi, OBJPROP_RAY    , ryi);
  ObjectSet(nmi, OBJPROP_STYLE , sti);
  ObjectSet(nmi, OBJPROP_WIDTH , wdi);
}
 

두 가지 기능을 만들 필요가 없습니다. 다른 매개변수로 하나를 호출해야 합니다. 두 함수를 호출했지만 둘 다 LINE 개체의 빈 이름을 전달했습니다. 기본적으로 SetTLine() 함수는 현재 막대 의 여는 시간을 이름으로 설정합니다. 귀하의 경우 이것은 SetTLine() 함수를 몇 번이나 호출해도 매번 같은 이름의 객체, 즉 하나의 객체 LINE이 생성된다는 사실로 이어졌습니다.

귀하의 코드를 변경했습니다. 첨부 파일을 참조. 글쎄, 당신의 코드가 그리는 것에 대한 예를 들어, 그림

파일:
 
KimIV :

두 가지 기능을 만들 필요가 없습니다. 다른 매개변수로 하나를 호출해야 합니다. 두 함수를 호출했지만 둘 다 LINE 개체의 빈 이름을 전달했습니다. 기본적으로 SetTLine() 함수는 현재 막대의 여는 시간을 이름으로 설정합니다. 귀하의 경우 이것은 SetTLine() 함수를 몇 번이나 호출해도 매번 같은 이름의 객체, 즉 하나의 객체 LINE이 생성된다는 사실로 이어졌습니다.

귀하의 코드를 변경했습니다. 첨부 파일을 참조. 글쎄, 당신의 코드가 그리는 것에 대한 예를 들어, 그림


알았어 고마워.

 

안녕하세요!

당신의 노고에 감사드립니다. 귀하의 사이트에서 거래 시스템을 구축하기 위해 2개의 파일(( ByMarketBuy( Sell) + e-SARTrailing )을 다운로드했습니다. 한 화면 에 대해 EUR/USD에 ByMarketBuy( Sell) 스크립트를 던졌습니다.   한 주문에는 MAGIC 30을, 다른 주문에는 MAGIC 60을 등록했으며(각각 M30 및 H1) 두 번째세 번째 화면에는 각각 SAR.TF = 30 및 60 설정의 e-SARTrailing Expert Advisor 있습니다. 그리고 같은 통화쌍에 대해 두 개의 주문이 열렸기 때문에 같은 방향으로 간다는 것을 의미하며, 두 화면 에서 MagicNumber e-SARTrailing Expert Advisors 가 없으면 서로 충돌하게 됩니다. 나는 당신에게 엄청난 요청이 있습니다. 당신은 다음과 같은 기능을 조언자(추가) 수정(추가)할 수 있습니까?   MagicNumber 는 아마도 많은 사람들이 이러한 추가 기능을 높이 평가할 것입니다. 그리고 이 어드바이저는 방향성에 관계없이 서로 충돌하지 않고 모든 시간대에서 동시에 작업할 수 있음이 밝혀졌습니다 .

미리 감사드립니다 !

 
tim-time :

나는 당신에게 엄청난 요청이 있습니다. MagicNumber 와 같은 기능을 조언자에게 수정(추가)할 수 있습니까?

팁 고마워. 매직 필터 추가...
 

GetTimeOpenBar() 함수.

이 함수는 임의의 기호와 임의의 시간 프레임의 막대가 열리는 시간을 반환합니다. 기본적으로 기본 iBarShift()iTime() 함수의 조합일 뿐입니다. 따라서 여기에 새로운 것은 없으며 하나 또는 다른 옵션을 사용하는 것은 편의상의 문제입니다. 다음 선택적 매개변수를 함수에 전달할 수 있습니다.

  • sy - 거래 상품의 이름(기호). 값 ""NULL 은 현재 문자를 의미합니다. 기본값은 "" 입니다.
  • tf - 기간. 기본값 - 0 - 현재 시간 프레임.
  • dt - 날짜 및 시간. 기본값 - 0 - 현재 시간.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия бара.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий)                 |
//|    dt - дата/время                 (    0       - текущее)                 |
//+----------------------------------------------------------------------------+
datetime GetTimeOpenBar( string sy= "" , int tf= 0 , int dt= 0 ) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   if (tf== 0 ) tf= Period ();
   if (dt== 0 ) dt= TimeCurrent ();
  
   int sh=iBarShift(sy, tf, dt, False);

   return (iTime(sy, tf, sh));
}

 
KimIV :
팁 고마워. 매직 필터 추가...

안녕하세요!

와 !!! 이것은 온도입니다! (내가 직접 하거나 즉시 NO라고 말함)

전문가 를 진심으로 존경 합니다! (전문가는 모든 가장 작은 세부 사항 + 자신의 방향에 대한 노력과 수년 에 걸쳐 축적되는 경험을 알아야 합니다).

4차 5년차, 1차 5년차에 빌트인 가구를 취급해 왔으며 외환 거래를 마칩니다. 세부).

제 목표는 무역 전문가가 되는 것입니다.

도와 주셔서 감사 합니다!

공손히!

 

코드로 오류에 대한 짧거나 자세한 러시아어 설명을 반환하는 ErrorRU() 함수를 컴파일했습니다. 트레이드 서버에서 반환된 오류와 MQL 프로그램 실행 오류는 모두 인식됩니다. 그러나 모든 사람에게 "해야 할 일"이라는 권장 사항과 함께 오류에 대한 자세한 설명이 있지만 거기에는 무엇이 있습니다.

테스트를 위해 스크립트의 일부로 함수를 게시합니다.

누군가가 MQH 파일 형식의 변형이 필요한 경우 내 사이트 에서 가져옵니다.

파일:
 

안녕하세요!

e-SignalOfTrade Expert Advisor에 푸시 알림을 추가할 수 있는지 알려주십시오.

https://www.mql5.com/ru/forum/6960

https://www.mql5.com/ru/docs/common/sendnotification

( 임대 VPS 서버는 UseSendMail = True - E-mail 기능이 활성화된 상태에서 어드바이저가 작업할 수 있도록 MT4 메일 설정에서 지정해야 하는 SMTP 서버 데이터 제공을 거부합니다. )

   미리 감사드립니다 !