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

[삭제]  
mt4를 다시 시작하지 않고 편집된 스크립트만 실행하는 방법은 무엇입니까?
[삭제]  
해보지만 뭔가 잘 안되네요 코드에 에러가 많이 나네요((.
[삭제]  
당신은 뭔가를 공유 할 것인가? )
[삭제]  

유용할 수 있습니다. 그것이 작동하는 방식입니다!

메타에디터에서 F5 키는 컴파일입니다.

중요한! 메타에디터는 터미널과 같은 폴더에서 실행해야 합니다.

[삭제]  

알렉스 나랑 같이 있어? mql4를 처음 사용합니다. 이 코드를 이해하려고 합니다.



#속성 표시기_차트_창
#속성 표시기_버퍼 2
extern int TimeFrame=0;//If=0이면 현재
extern int Distance=0;//프랙탈로부터의 선 거리(포인트)
extern string FrApNam="Ap";//업 프랙탈에 해당하는 라인 이름
extern string FrDnNam="Dn";//다운 프랙탈에 해당하는 라인 이름
extern color ClAp=Blue;//Fractal up에 해당하는 라인 색상
extern color ClDn=Red;//다운 프랙탈에 해당하는 선 색상
extern bool comment=true;//댓글 허용
//------------------------------------------------ ------------------------------+
더블 FrPrise,znach1,znach2;
이중 FrApPrise=0,FrDnPrise=0;
이중 ind_buffer1[];
이중 ind_buffer2[];
//+----------------------------------------------- ------------------------------+
무효 초기화()
{if(TimeFrame==0){TimeFrame=Period();}
SetIndexBuffer(0,ind_buffer1);//박스

SetIndexBuffer(1,ind_buffer2);
반품;}
무효 deinit(){

반품;}


//+----------------------------------------------- ------------------------------+
정수 시작()
{
int counted_bars=IndicatorCounted();
정수 제한;
이중 온도;
정수 i,j,k;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
한도=막대 개수 계산된 막대기;
//------------------------------------------------ ------------------------------+
선형();
LineDn();
더블 FAP=NormalizeDouble((FrApPrise-Distance*Point),5);//VALUE
더블 FDP=NormalizeDouble((FrDnPrise+Distance*Point),5);
int diap=MathRound((FrApPrise-FrDnPrise)/포인트);
ind_buffer1[0]=FAP;
ind_buffer2[1]=FDP;
Comment("TimeFrame="+TimeFrame+
"\nAppPrise=",FAP,
"\nDnPrise=",FDP,
"\n프랙탈 채널 ="
,dap+"포인트");



리턴(0);
}
//------------------------------------------------ ------------------------------+
// 가격이 변경된 경우 이름으로 수평선을 다시 그립니다. |
//------------------------------------------------ ------------------------------+
무효 LineDn(){
FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_LOWER),MarketInfo(Symbol(),MODE_DIGITS));
FrPrise=NormalizeDouble(FrPrise-Distance*Point,MarketInfo(Symbol(),MODE_DIGITS));
//댓글(FrPrise);
if(ObjectFind(FrDnNam)==0){
if(ObjectGet(FrDnNam,OBJPROP_PRICE1)==FrPrise){반환;}}
FrDnPrise=FrPrise;
개체 삭제(FrDnName);
SetHLine(ClDn,FrDnNam,FrDnPrise,0,1);
창 다시 그리기();
반품;}
//------------------------------------------------ ------------------------------+
// 가격이 변경된 경우 이름으로 수평선을 다시 그립니다. |
//------------------------------------------------ ------------------------------+
무효 LineAp(){
FrPrise=NormalizeDouble(FindNearFractal(0,TimeFrame,MODE_UPPER),MarketInfo(Symbol(),MODE_DIGITS));
FrPrise=NormalizeDouble(FrPrise+Distance*Point,MarketInfo(Symbol(),MODE_DIGITS));
if(ObjectFind(FrApNam)==0){
if(ObjectGet(FrApNam,OBJPROP_PRICE1)==FrPrise){반환;}}
FrApPrise=FrPrise;
개체 삭제(FrApName);
SetHLine(ClAp,FrApNam,FrApPrise,0,1);
창 다시 그리기();
반품;}
//------------------------------------------------ ------------------------------+
//| 설명 : 가장 가까운 프랙탈을 검색합니다. 가격 수준을 반환합니다. |
//+----------------------------------------------- ------------------------------+
//| 옵션: |
//| sy - 기기 이름("" 또는 NULL - 현재 기호) |
//| tf - 기간( 0 - 현재 TF) |
//| 모드 - 프랙탈 유형(MODE_LOWER|MODE_UPPER) |
//+----------------------------------------------- ------------------------------+
이중 FindNearFractal(문자열 sy="0", int tf=0, int 모드=MODE_LOWER) {
if (sy=="" || sy=="0") sy=Symbol();
이중 f=0;
int d=MarketInfo(sy, MODE_DIGITS), s;
if (d==0) if (StringFind(sy, "JPY")<0) d=4; 그렇지 않으면 d=2;

(s=2; s<100; s++) {
f=iFractals(sy, tf, 모드, s);
if (f!=0) return(NormalizeDouble(f, d));
}
Print("FindNearFractal(): 프랙탈을 찾을 수 없습니다");
리턴(0);
}

//+----------------------------------------------- ------------------------------+
//| 설명 : 객체 OBJ_HLINE 수평선 설정 |
//+----------------------------------------------- ------------------------------+
//| 옵션: |
//| cl - 라인 색상 |
//| nm - 이름("" - 현재 막대 열기 시간) |
//| p1 - 가격 수준(0 - 입찰가) |
//| st - 선 스타일(0 - 단순 선) |
//| wd - 선 너비(0 - 기본값) |
//+----------------------------------------------- ------------------------------+
무효 SetHLine(색상 cl, 문자열 nm="", 이중 p1=0, int st=0, int wd=1) {
if (nm=="") nm=DoubleToStr(시간[0], 0);
if (p1<=0) p1=입찰가;
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSet(nm, OBJPROP_COLOR, cl);
ObjectSet(nm, OBJPROP_STYLE, st);
ObjectSet(nm, OBJPROP_WIDTH, wd);
}

이 지표에 대한 어드바이저를 작성해야 하며, M1 및 M5 기간에 상한 및 하한 가격을 전송합니다.

 
palomnik :

알렉스 나랑 같이 있어? mql4를 처음 사용합니다. 이 코드를 이해하려고 합니다.

 #property indicator_chart_window
#property indicator_buffers 2 
extern int TimeFrame= 0 ; //Если=0, то текуший
extern int Distanse= 0 ; //Дистанция линии от фрактала в пунктах
extern string FrApNam= "Ap" ; //Имя линии соотв.Фракталу вверх
extern string FrDnNam= "Dn" ; //Имя линии соотв.Фракталу вниз
extern color ClAp=Blue; //Цвет линии соотв.Фракталу вверх
extern color ClDn=Red; //Цвет линии соотв.Фракталу вниз
extern bool comment= true ; //Разрещение на комментарий
//-----------------------------------------------------------------------------+
double FrPrise,znach1,znach2;
double FrApPrise= 0 ,FrDnPrise= 0 ;
double ind_buffer1[];
double ind_buffer2[];
//+----------------------------------------------------------------------------+
void init()
{ if (TimeFrame== 0 ){TimeFrame= Period ();}
SetIndexBuffer ( 0 ,ind_buffer1); //КОРОБКА

SetIndexBuffer ( 1 ,ind_buffer2);
return ;}
void deinit(){

return ;}


//+----------------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int limit;
double tmp;
int i, j,k;
if (counted_bars< 0 ) return (- 1 );
if (counted_bars> 0 ) counted_bars--;
limit= Bars -counted_bars;
//-----------------------------------------------------------------------------+
LineAp();
LineDn();
double FAP= NormalizeDouble ((FrApPrise-Distanse* Point ), 5 ); //ЗНАЧЕНИЕ
double FDP= NormalizeDouble ((FrDnPrise+Distanse* Point ), 5 );
int diap= MathRound ((FrApPrise-FrDnPrise)/ Point );
ind_buffer1[ 0 ]=FAP;
ind_buffer2[ 1 ]=FDP;
Comment ( "TimeFrame=" +TimeFrame+
"\nApPrise =" ,FAP,
"\nDnPrise =" ,FDP,
"\nFractal Channel ="
,diap+ "Point" );



return ( 0 );
}
//-----------------------------------------------------------------------------+
// Ищет горизонтальную линию по имени перерисовывает если изменилась цена | 
//-----------------------------------------------------------------------------+
void LineDn(){
FrPrise= NormalizeDouble (FindNearFractal( 0 ,TimeFrame,MODE_LOWER),MarketInfo( Symbol (),MODE_DIGITS));
FrPrise= NormalizeDouble (FrPrise-Distanse* Point ,MarketInfo( Symbol (),MODE_DIGITS));
//Comment(FrPrise);
if ( ObjectFind (FrDnNam)== 0 ){
if (ObjectGet(FrDnNam,OBJPROP_PRICE1)==FrPrise){ return ;}}
FrDnPrise=FrPrise; 
ObjectDelete (FrDnNam);
SetHLine(ClDn,FrDnNam,FrDnPrise, 0 , 1 );
WindowRedraw();
return ;} 
//-----------------------------------------------------------------------------+
// Ищет горизонтальную линию по имени перерисовывает если изменилась цена | 
//-----------------------------------------------------------------------------+
void LineAp(){
FrPrise= NormalizeDouble (FindNearFractal( 0 ,TimeFrame,MODE_UPPER),MarketInfo( Symbol (),MODE_DIGITS));
FrPrise= NormalizeDouble (FrPrise+Distanse* Point ,MarketInfo( Symbol (),MODE_DIGITS));
if ( ObjectFind (FrApNam)== 0 ){
if (ObjectGet(FrApNam,OBJPROP_PRICE1)==FrPrise){ return ;}}
FrApPrise=FrPrise; 
ObjectDelete (FrApNam); 
SetHLine(ClAp,FrApNam,FrApPrise, 0 , 1 );
WindowRedraw();
return ;}
//-----------------------------------------------------------------------------+ 
//| Описание : Поиск ближайшего фрактала. Возвращает ценовой уровень. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| tf - таймфрейм ( 0 - текущий ТФ) |
//| mode - тип фрактала (MODE_LOWER|MODE_UPPER) |
//+----------------------------------------------------------------------------+
double FindNearFractal( string sy= "0" , int tf= 0 , int mode=MODE_LOWER) {
if (sy== "" || sy== "0" ) sy= Symbol ();
double f= 0 ;
int d=MarketInfo(sy, MODE_DIGITS), s;
if (d== 0 ) if ( StringFind (sy, "JPY" )< 0 ) d= 4 ; else d= 2 ;

for (s= 2 ; s< 100 ; s++) {
f= iFractals (sy, tf, mode, s);
if (f!= 0 ) return ( NormalizeDouble (f, d));
}
Print ( "FindNearFractal(): Фрактал не найден" );
return ( 0 );
}

//+----------------------------------------------------------------------------+
//| Описание : Установка объекта OBJ_HLINE горизонтальная линия |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| cl - цвет линии |
//| nm - наименование ("" - время открытия текущего бара) |
//| p1 - ценовой уровень (0 - Bid) |
//| st - стиль линии (0 - простая линия) |
//| wd - ширина линии (0 - по умолчанию) |
//+----------------------------------------------------------------------------+
void SetHLine( color cl, string nm= "" , double p1= 0 , int st= 0 , int wd= 1 ) {
if (nm== "" ) nm=DoubleToStr(Time[ 0 ], 0 );
if (p1<= 0 ) p1=Bid;
if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_HLINE , 0 , 0 , 0 );
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_STYLE , st);
ObjectSet(nm, OBJPROP_WIDTH , wd);
}



Надо к данному индикатору написать советник.Передающий верхнюю и нижнюю цены.по М 1 и М 5 таймфреймам. 

SRC가 무엇을 위한 것인지 모르십니까? 신발장을 지워라!
 
Expert Advisor에서 이러한 기능을 구현하는 방법은 무엇입니까? TP 또는 SL이 베이 주문에 대해 트리거되면 모든 베이 주문이 마감되어야 합니다.
[삭제]  
David는 하나의 기능이 아니라 작은 Expert Advisor입니다. 몇 주문이 있었는지, 몇 개가 되었는지, 선택에 의해 닫히지 않은 사람에 대한 비교가 있다고 간단히 말하십시오. 빠른 시일 내에 더 자세히 도와 드리겠습니다. 지표에서 Expert Advisor 로 데이터를 전송하는 방법을 알아냅니다. 기술 사양은 이미 위에 나와 있습니다.
[삭제]  
여러분, 지표에서 고문으로 값을 전송하는 방법을 이해하는 사람이 있습니까? 도와주세요 제 자신이 이해가 안가서 잠시만요 실은 제가 문제를 설명했지만 일종의 침묵((. https://forum.mql4.com/ru/52892/page308)
 
palomnik :
여러분, 지표에서 고문으로 값을 전송하는 방법을 이해하는 사람이 있습니까? 도와주세요 제 자신이 이해가 안가서 잠시만요 실은 제가 문제를 설명했지만 일종의 침묵((. https://forum.mql4.com/ru/52892/page308)
여러 가지 방법이 있습니다.

1. 전역 변수 를 통해 .

2. 파일 을 통해 .

3. iCustom()을 통해 .

4. 전역 그래픽 변수 를 통해 .

5. 매핑 . 한 터미널에서 다른 터미널로 데이터를 전송할 수 있습니다. 또는 한 터미널에서 MT4 전역 변수의 제한 없이 한 창에서 다른 창으로 데이터를 전송합니다.