[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 전역 변수의 제한 없이 한 창에서 다른 창으로 데이터를 전송합니다.

사유: