코딩하는 방법? - 페이지 257

 

Metatrader 도움말에서 시간 기능 을 확인하세요. 그런 다음 다음과 같이 시도하십시오.

if (TimeHour(Time[0]) TradeHourStop)

{

Comment("거래중단 - 거래시간외");

반환(거짓);

}

여기서 TimeHourStart 및 stop은 사용자가 설정한 외부 변수입니다. 반환(거짓); 추가 처리 없이 시작 기능을 종료합니다.

행운을 빕니다,

 

빠른 답변 감사합니다, Tzuman.

불행히도, 제 MT4 프로그래밍은 현재 온라인 EA 빌더로 제한되어 있습니다.

이것은 내가 찾던 바로 그 것입니다!

 

주석의 텍스트 색상 및 글꼴 크기 구성을 코딩하는 방법..

안녕하세요 여러분,

저는 EA에서 일하고 있으며 초보 프로그래머일 뿐입니다...

그리고 일반적으로 주석의 글꼴 크기와 텍스트 색상을 코딩하고 사용자가 구성할 수 있도록 하는 방법에 대해 질문이 있습니다. 어떤 외부 변수를 생성해야 합니까? 그리고 어떻게 프로그래밍합니까?

예를 들어 다음과 같이 comment 기능 을 사용하는 방법을 알고 있습니다.

if(TextOnScreen == true) Comment("이 텍스트는 화면에 나타납니다. ");

그러나 사용자가 화면에 나타나는 텍스트의 글꼴 크기를 변경할 수 있도록 프로그래밍하는 방법과 EA의 옵션에서 설정을 변경하여 해당 텍스트의 텍스트 색상을 변경하는 방법은 무엇입니까?

누구든지 몇 줄의 코드로 나를 도울 수 있습니까? 그것은 매우 감사합니다.

매우 감사합니다.

요한

 
korthouj:
안녕하세요 여러분,

저는 EA에서 일하고 있으며 초보 프로그래머일 뿐입니다...

그리고 일반적으로 주석의 글꼴 크기와 텍스트 색상을 코딩하고 사용자가 구성할 수 있도록 하는 방법에 대해 질문이 있습니다. 어떤 외부 변수를 생성해야 합니까? 그리고 어떻게 프로그래밍합니까?

예를 들어 다음과 같이 주석 기능을 사용하는 방법을 알고 있습니다.

if(TextOnScreen == true) Comment("이 텍스트는 화면에 나타납니다. ");

그러나 사용자가 화면에 나타나는 텍스트의 글꼴 크기를 변경할 수 있도록 프로그래밍하는 방법과 EA의 옵션에서 설정을 변경하여 해당 텍스트의 텍스트 색상을 변경하는 방법은 무엇입니까?

누구든지 몇 줄의 코드로 나를 도울 수 있습니까? 그것은 매우 감사합니다.

매우 감사합니다.

요한

예를 들어 레이블과 같은 그래픽 개체를 사용해야 합니다. 이 작업을 수행하는 방법 - 설명서에서 쉽게 읽을 수 있습니다.

 
korthouj:
안녕하세요 여러분,

저는 EA에서 일하고 있으며 초보 프로그래머일 뿐입니다...

그리고 일반적으로 주석의 글꼴 크기와 텍스트 색상을 코딩하고 사용자가 구성할 수 있도록 하는 방법에 대해 질문이 있습니다. 어떤 외부 변수를 생성해야 합니까? 그리고 어떻게 프로그래밍합니까?

예를 들어 다음과 같이 주석 기능을 사용하는 방법을 알고 있습니다.

if(TextOnScreen == true) Comment("이 텍스트는 화면에 나타납니다. ");

그러나 사용자가 화면에 나타나는 텍스트의 글꼴 크기를 변경할 수 있도록 프로그래밍하는 방법과 EA의 옵션에서 설정을 변경하여 해당 텍스트의 텍스트 색상을 변경하는 방법은 무엇입니까?

누구든지 몇 줄의 코드로 나를 도울 수 있습니까? 그것은 매우 감사합니다.

매우 감사합니다.

요한

요한,

첨부된 지표를 연구하십시오.

일부 코드는 템플릿을 사용할 때 사용합니다.

템플릿 때문에 한 쌍의 텍스트가 다른 쌍 차트에 나타날 때 어려운 방법을 발견했습니다.

더 많은 텍스트 줄이 필요한 경우 이를 파악할 수 있어야 합니다.

다시 게시하지 않으면 여러 줄의 예를 보여 드리겠습니다.

로버트

파일:
 

왜 닫기 주문이 실패하고 주문 번호를 제한하는 방법은 무엇입니까?

저는 MQL4의 초보자이며 방금 EA를 테스트했지만 주문을 닫을 수 없는 것 같으며 freemargin이 0이 될 때까지 각 막대에서 주문을 열고 모든 주문을 강제로 중지합니다. 오픈 오더 NO를 제한하는 방법을 모르겠습니다. 누가 나에게 말할 수 있습니까? TKS 감사합니다!

다음과 같은 코드:

//+----------------------------------------------- -------------------+

//| 이동 평균.mq4 |

//| Copyright ?2005, MetaQuotes Software Corp. |

//| TeamWox 그룹웨어 / MetaQuotes Software Corp. |

//+----------------------------------------------- -------------------+

#define MAGICMA 20110309

extern 이중 로트 = 1;

외부 이중 최대 위험 = 0.02;

외부 이중 DecreaseFactor = 10;

//+----------------------------------------------- -------------------+

//| 오픈 포지션 계산 |

//+----------------------------------------------- -------------------+

int CalculateCurrentOrders(문자열 기호)

{

구매 = 0, 판매 = 0;

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) 구매++;

if(OrderType()==OP_SELL) 판매++;

}

}

//---- 반품 주문량

if(매수>0) 반환(매수);

그렇지 않으면 반환(판매);

}

//+----------------------------------------------- -------------------+

//| 최적 로트 크기 계산 |

//+----------------------------------------------- -------------------+

이중 LotOptimized()

{

이중 로트 = 로트;

int 주문 = HistoryTotal(); // 히스토리 주문 합계

정수 손실 = 0; // 중단 없는 손실 주문 수

//---- 로트 크기 선택

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100.0,1);

인쇄(시장 정보(심볼(), MODE_LOTSIZE));

인쇄(시장 정보(Symbol(), MODE_MINLOT));

인쇄(시장 정보(Symbol(), MODE_LOTSTEP));

인쇄(시장 정보(Symbol(), MODE_MAXLOT));

//---- 중단 없이 손실 주문 수를 계산합니다.

if(감소인자>0)

{

for(int i=orders-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("기록에 오류가 있습니다!"); 부서지다; }

if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 계속;

//----

if(OrderProfit()>0) 휴식;

if(OrderProfit()<0) 손실++;

}

if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);

// 이것은 현명한 기술 설계이지만 손실은 돈이 아니라 손실을 의미하며 문제를 일으킬 수 있습니다.

//다음과 같이 수정합니다.accountfreemargin()-orderprofit()

}

//---- 반환 로트 크기

if(lot<1) lot=1;

반환(로트);

}

//+----------------------------------------------- -------------------+

//| 미결 주문 조건 확인 |

//+----------------------------------------------- -------------------+

무효 CheckForOpen()

{

더블 m1,m2,m3,m4,티켓1,티켓2;

정수 해상도;

//---- 새 막대의 첫 번째 틱에 대해서만 거래를 시작합니다.

if(볼륨[0]>1) 반환;

//---- 이동 평균 얻기

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

//---- 판매 조건

만약 (m1<m3-0.0002)

{

ticket1=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0,"내 주문 #1",MAGICMA,0,Red);

반품;

}

만약 (m2<m4-0.0001)

{

ticket2=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0,"내 주문 #2",MAGICMA,0,Yellow);

반품;

}

//---- 구매 조건

만약 (m1>m3+0.0002)

{

ticket1=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0,"내 주문 #1",MAGICMA,0,Blue);

반품;

}

만약 (m2>m4+0.0001)

{

ticket2=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0,"내 주문 #2",MAGICMA,0,Green);

반품;

}

//----

}

//+----------------------------------------------- -------------------+

//| 마감 주문 조건 확인 |

//+----------------------------------------------- -------------------+

무효 CheckForClose()

{

더블 m1,m2,m3,m4;

//---- 새 막대의 첫 번째 틱에 대해서만 거래를 시작합니다.

if(볼륨[0]>1) 반환;

//---- 이동 평균 얻기

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단;

if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) 계속;

//---- 주문 유형 확인

if(주문 유형()==OP_BUY)

{

if(m1<m3+0.0002)

{

OrderClose(OrderTicket(),OrderLots(), 입찰, 3, 보라색);

부서지다;

}

if(m2<m4+0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

부서지다;

}

}

if(주문 유형()==OP_SELL)

{

if(m1>m3-0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Tan);

부서지다;

}

if(m2<m4-0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,연어);

부서지다;

}

}

}

//----

}

//+----------------------------------------------- -------------------+

//| 시작 기능 |

//+----------------------------------------------- -------------------+

무효 시작()

{

//---- 내역 및 거래 확인

if(Bars<55 || IsTradeAllowed()==false) 반환;

//---- 현재 기호로 미결 주문 계산

if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();

그렇지 않으면 CheckForClose();

//----

}

//+----------------------------------------------- -------------------+

 

Windows 버전 감지

이제 Windows API 호출을 사용하여 실행 중인 Windows MT4 버전을 쉽게 찾을 수 있는 사람이 있습니까?

아무도이 작업을 수행하는 방법을 말해 줄 수 있습니까?

# "kernel32.dll" 가져오기

int GWINAPI GetVersionEA(_inout LPOSVERSIONINFO lpVersionInfo);

#수입

GetVersionEx 함수(Windows)

감사합니다

 

도움이 필요합니다. 내 CCI 다이버전스 EA에 대한 약간의 조정

저는 MT4의 Indicators 폴더에 있는 맞춤형 CCI Divergence Indicator를 사용하여 언제 거래할지 결정하는 CCI Divergence EA가 있습니다.

내가하고 싶은 것은 대신 사용자 정의 Stochastics Divergence Indicator (내가 가지고 있음)를 사용하는 것입니다.

EA 코드를 변경하여 표시기 폴더의 스토캐스틱 다이버전스 표시기로 보내는 방법을 모르겠습니다.

EA 입력에서 다음을 교체해야 한다고 생각합니다.

외부 int CCI_Period = 10;

~와 함께

외부 int Stoch_K = 5;

외부 int Stoch_D = 3;

extern int Stoch_Slowing = 3;

코드의 주요 부분에서 Indicators 폴더의 사용자 지정 CCI Divergence Indicator를 가리키는 영역을 찾았습니다.

dUp = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", 거짓, 거짓, 거짓, 0, 2);

dDn = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", 거짓, 거짓, 거짓, 1, 2);

"CCI_Divergence_Indicator"를 Indicators 폴더에 있는 사용자 정의 확률론 발산 표시기의 이름인 "Stochastics_Divergence_Indicator"로 변경해야 한다는 것을 알고 있습니다. 그리고 CCI_Period와 9를 제거해야 합니다.

하지만 이 코드 부분에 Stoch_K, Stoch_D 및 Stoch_Slowing을 추가하는 방법을 모르겠습니다.

직접 변경을 시도했지만 EA가 열리지 않습니다.

확률론적 발산 표시기가 cci 발산 표시기를 대체할 수 있도록 코드의 이 부분을 코딩하는 방법을 아는 사람이 있습니까?

나는 ea를 만들기 위해 프로그래머에게 돈을 지불했지만 그는 다른 고객 프로젝트로 매우 바쁘다. 따라서 사소한 변경/수리와 관련하여 그는 나를 대신할 시간이 없습니다. 적어도 당장은 아닙니다. 그래서 여기에 묻습니다.

CCI Divergence Indicator에는 잘못된 신호가 너무 많습니다. 스토캐스틱 다이버전스 지표가 훨씬 좋습니다. 그래서 스위치를 하고 싶습니다.

미리 감사드립니다.

 

도와주세요

1바(1m 5m 189m)의 가격이 1바에서 200핍을 이동할 때 경고하는 코드 줄이 있습니다. 그러나 나는 평생 동안 특정 방향에만 경고하도록 설정하는 방법을 알아낼 수 없습니다. 여기있어..

if(높음[0]-낮음[0]>200*Point)PlaySound("Alert.wav"); // 잘 작동합니다.

하지만 200핍 UP과 200핍 DOWN을 구별할 수 있기를 원합니다. 나는 읽고, 포럼에서 질문하고, 채팅방에 있었고, 3일 동안 스스로를 미치게 만들었습니다. 신의 사랑이 나를 도와주세요.

 
if(High[0]-Low[0]>200*Point && Close[0]>Open[0])PlaySound("Up.wav");

if(High[0]-Low[0]>200*Point && Close[0]<Open[0])PlaySound("Down.wav");[/CODE]

Actually, you should rather look at highs and lows of two last bars and compare close to close, to ensure gaps are included, too:

[CODE]if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]>Close[1])PlaySound("Up.wav");

if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]<Close[1])PlaySound("Down.wav");