코딩 도움말 - 페이지 238

 

선택할 수 있는 옵션을 추가할 기회가 있습니까?

예를 들어,

따로따로 구매해서 따로 판매

수정: BE 모두 0, +1 또는 +2 핍을 사거나 BE 0, 1 또는 2 핍을 모두 매도하시겠습니까?

가능합니까?

be.mq4

파일:
be.mq4  1 kb
 

안녕하세요 믈라덴입니다.

누구든지 내가 무엇을 잘못하고 있는지 알려주실 수 있습니까? 저는 주로 mq4 컴파일러 및 온라인 포럼의 예를 사용하여 스니펫과 코드가 있는 FX Gen을 사용하여 제 EA를 작성합니다. 저는 더 쉬운 거래를 위해 제 전략을 코딩하려고 노력하고 있으며 마지막 주문을 성공적으로 선택할 수 있었습니다. 이 코드를 사용하여.

무효 OpenNewTrade()

{ 날짜 시간 마지막 시간 = 0;

int lastTicket = -1; // 열리지 않음.

(int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )

{

마지막 시간 = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& 묻기 - OrderOpenPrice() >= Grid*PipValue*Point

{

{

주문 구매();

}

}

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& OrderOpenPrice() - 입찰가 >= 그리드*PipValue*포인트

{

{

판매 주문();

}

}

}

반환(마지막 티켓);

}

또 다른

Print("OrderSelect() 오류 - ", ErrorDescription(GetLastError()));

}

날짜 시간과 주문 티켓을 사용하여 가장 오래된 주문을 먼저 삭제하려고 시도하는 이 코드를 볼 수 있습니까?

//------------------------------------------------ --------------

// Etasoft Inc. Forex EA 및 스크립트 생성기 버전 4.1 EA

//------------------------------------------------ --------------

// 키워드: MT4, Forex EA 빌더, EA 생성, 전문 고문 개발자

#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"

#속성링크

#포함하다

#포함하다

// 내보낸 변수

외부 정수 주문 ID = 1;

extern int 미끄러짐 = 2;

extern 이중 랏 = 0.01;

extern int MaxOrdersAllowed = 2; // op 구매 및 op 판매 허용

외부 정수 그리드 = 10; // 오픈 주문까지의 총 거리(핍)

extern string EAComment = "564 테스트 중";

// 지역 변수

이중 PipValue=1; // 이 변수는 5자리 브로커를 지원하기 위한 것입니다.

bool 종료됨 = false;

문자열 LF = "\n"; // 줄 바꿈이 필요한 사용자 지정 또는 유틸리티 블록에서 이것을 사용합니다.

정수 NDigits = 4; // Flex 유형 블록의 NormalizeDouble에 주로 사용됨

정수 개체 수 = 0; // 차트에 생성된 모든 객체의 수, 고유한 이름을 가진 객체 생성 허용

정수 전류 = 0;

정수 초기화()

{

NDigits = 숫자;

if (거짓) ObjectsDeleteAll(); // 차트 지우기

논평(""); // 차트 지우기

}

// 전문가 시작

정수 시작()

{

if (막대 < 10)

{

Comment("막대가 부족합니다");

리턴(0);

}

if (종료 == true)

{

Comment("EA가 종료되었습니다.");

리턴(0);

}

OnEveryTick1();

}

무효 OnEveryTick1()

{

if (true == false && false) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;

IfOrderDoesNotExist2();

IfOrderDoesNotExist4();

최대 주문();

}

무효 IfOrderDoesNotExist2()

{

부울 존재 = 거짓;

(int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

존재 = 사실;

}

}

또 다른

{

Print("OrderSelect() 오류 - ", ErrorDescription(GetLastError()));

}

if (존재 == 거짓)

{

구매 보류 주문();

}

}

무효 IfOrderDoesNotExist4()

{

부울 존재 = 거짓;

(int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

존재 = 사실;

}

}

또 다른

{

Print("OrderSelect() 오류 - ", ErrorDescription(GetLastError()));

}

if (존재 == 거짓)

{

판매 보류 주문();

}

}

무효 BuyPendingOrder()

{

int 만료 = TimeCurrent() + 60 * 0;

이중 가격 = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;

이중 SL = 가격 - 0*PipValue*Point;

if (0 == 0) SL = 0;

이중 TP = 가격 + 0*PipValue*Point;

if (0 == 0) TP = 0;

if (0 == 0) 만료 = 0;

int 티켓 = OrderSend(Symbol(), OP_BUYSTOP, 랏, 가격, Slippage, SL, TP, EAComment, OrderId, 만료, 파란색);

if (티켓 == -1)

{

Print("OrderSend() 오류 - ", ErrorDescription(GetLastError()));

}

}

무효 SellPendingOrder()

{

int 만료 = TimeCurrent() + 60 * 0;

이중 가격 = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;

이중 SL = 가격 + 0*PipValue*Point;

if (0 == 0) SL = 0;

이중 TP = 가격 - 0*PipValue*Point;

if (0 == 0) TP = 0;

if (0 == 0) 만료 = 0;

int 티켓 = OrderSend(Symbol(), OP_SELLSTOP, 랏, 가격, Slippage, SL, TP, EAComment, OrderId, 만료, 빨간색);

if (티켓 == -1)

{

Print("OrderSend() 오류 - ", ErrorDescription(GetLastError()));

}

}

무효 MaximumOrder()

{

if (MaxOrdersAllowed> 0)

{

주문 횟수();

}

}

무효 주문 수()

{

정수 개수 = 0;

(int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == OrderId)

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

{

카운트++;

}

}

또 다른

{

Print("OrderSend() 오류 - ", ErrorDescription(GetLastError()));

}

if(count > MaxOrdersAllowed)

{

DeleteOldestOrder();

}

}

무효 DeleteOldestOrder()

{

날짜/시간 마지막 시간 = 0;

int lastTicket = -1; // 열리지 않음.

(int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )

{

마지막 시간 = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL )

{

{

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);

}

}

}

반환(마지막 티켓);

}

또 다른

Print("OrderSelect() 오류 - ", ErrorDescription(GetLastError()));

}

정수 초기화()

{

if (거짓) ObjectsDeleteAll();

}

 
sulaimoney:
안녕하세요 믈라덴입니다.

누구든지 내가 무엇을 잘못하고 있는지 알려주실 수 있습니까? 저는 주로 mq4 컴파일러 및 온라인 포럼의 예를 사용하여 스니펫과 코드가 있는 FX Gen을 사용하여 제 EA를 작성합니다. 저는 더 쉬운 거래를 위해 제 전략을 코딩하려고 노력하고 있으며 마지막 주문을 성공적으로 선택할 수 있었습니다. 이 코드를 사용하여.

무효 OpenNewTrade()

{ 날짜 시간 마지막 시간 = 0;

int lastTicket = -1; // 열리지 않음.

(int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )

{

마지막 시간 = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& 묻기 - OrderOpenPrice() >= Grid*PipValue*Point

{

{

주문 구매();

}

}

if (OrderType() == OP_BUY || OrderType() == OP_SELL

&& OrderOpenPrice() - 입찰가 >= 그리드*PipValue*포인트

{

{

판매 주문();

}

}

}

반환(마지막 티켓);

}

또 다른

Print("OrderSelect() 오류 - ", ErrorDescription(GetLastError()));

}

이 코드를 보면 날짜/시간 및 주문 티켓을 사용하여 가장 오래된 주문을 먼저 삭제하려고 시도하고 있습니다(예: 열린 주문 > 2개 삭제 가장 오래된 주문 삭제).

//------------------------------------------------ --------------

// Etasoft Inc. Forex EA 및 스크립트 생성기 버전 4.1 EA

//------------------------------------------------ --------------

// 키워드: MT4, Forex EA 빌더, EA 생성, 전문 고문 개발자

#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"

#속성링크

#포함하다

#포함하다

// 내보낸 변수

외부 정수 주문 ID = 1;

extern int 미끄러짐 = 2;

extern 이중 랏 = 0.01;

extern int MaxOrdersAllowed = 2; // op 구매 및 op 판매 허용

외부 정수 그리드 = 10; // 오픈 주문까지의 총 거리(핍)

extern string EAComment = "564 테스트 중";

// 지역 변수

이중 PipValue=1; // 이 변수는 5자리 브로커를 지원하기 위한 것입니다.

bool 종료됨 = false;

문자열 LF = "\n"; // 줄 바꿈이 필요한 사용자 지정 또는 유틸리티 블록에서 이것을 사용합니다.

정수 NDigits = 4; // Flex 유형 블록의 NormalizeDouble에 주로 사용됨

정수 개체 수 = 0; // 차트에 생성된 모든 객체의 수, 고유한 이름을 가진 객체 생성 허용

정수 전류 = 0;

정수 초기화()

{

NDigits = 숫자;

if (거짓) ObjectsDeleteAll(); // 차트 지우기

논평(""); // 차트 지우기

}

// 전문가 시작

정수 시작()

{

if (막대 < 10)

{

Comment("막대가 부족합니다.");

리턴(0);

}

if (종료 == true)

{

Comment("EA가 종료되었습니다.");

리턴(0);

}

OnEveryTick1();

}

무효 OnEveryTick1()

{

if (true == false && false) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;

IfOrderDoesNotExist2();

IfOrderDoesNotExist4();

최대 주문();

}

무효 IfOrderDoesNotExist2()

{

부울 존재 = 거짓;

(int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

존재 = 사실;

}

}

또 다른

{

Print("OrderSelect() 오류 - ", ErrorDescription(GetLastError()));

}

if (존재 == 거짓)

{

구매 보류 주문();

}

}

무효 IfOrderDoesNotExist4()

{

부울 존재 = 거짓;

(int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

존재 = 사실;

}

}

또 다른

{

Print("OrderSelect() 오류 - ", ErrorDescription(GetLastError()));

}

if (존재 == 거짓)

{

판매 보류 주문();

}

}

무효 BuyPendingOrder()

{

int 만료 = TimeCurrent() + 60 * 0;

이중 가격 = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;

이중 SL = 가격 - 0*PipValue*Point;

if (0 == 0) SL = 0;

이중 TP = 가격 + 0*PipValue*Point;

if (0 == 0) TP = 0;

if (0 == 0) 만료 = 0;

int 티켓 = OrderSend(Symbol(), OP_BUYSTOP, 랏, 가격, Slippage, SL, TP, EAComment, OrderId, 만료, 파란색);

if (티켓 == -1)

{

Print("OrderSend() 오류 - ", ErrorDescription(GetLastError()));

}

}

무효 SellPendingOrder()

{

int 만료 = TimeCurrent() + 60 * 0;

이중 가격 = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;

이중 SL = 가격 + 0*PipValue*Point;

if (0 == 0) SL = 0;

이중 TP = 가격 - 0*PipValue*Point;

if (0 == 0) TP = 0;

if (0 == 0) 만료 = 0;

int 티켓 = OrderSend(Symbol(), OP_SELLSTOP, 랏, 가격, Slippage, SL, TP, EAComment, OrderId, 만료, 빨간색);

if (티켓 == -1)

{

Print("OrderSend() 오류 - ", ErrorDescription(GetLastError()));

}

}

무효 MaximumOrder()

{

if (MaxOrdersAllowed> 0)

{

주문 횟수();

}

}

무효 주문 수()

{

정수 개수 = 0;

(int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == OrderId)

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

{

카운트++;

}

}

또 다른

{

Print("OrderSend() 오류 - ", ErrorDescription(GetLastError()));

}

if(count > MaxOrdersAllowed)

{

DeleteOldestOrder();

}

}

무효 DeleteOldestOrder()

{

날짜 시간 마지막 시간 = 0;

int lastTicket = -1; // 열리지 않음.

(int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )

{

마지막 시간 = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL )

{

{

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);

}

}

}

반환(마지막 티켓);

}

또 다른

Print("OrderSelect() 오류 - ", ErrorDescription(GetLastError()));

}

정수 초기화()

{

if (거짓) ObjectsDeleteAll();

}

다음과 같은 기능 을 사용해 보십시오.

void DeleteOldestOrder()

{

datetime lastTime = Time[0]+Period()*60;

int lastTicket = -1; // None open.

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

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

}

}

if (lastTicket>-1)

if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);

}
 

믈라덴 감사합니다

그것은 완벽하게 작동했습니다. btw 포럼에 이렇게 긴 코드를 게시한 것에 대해 사과드립니다. 아직 인터페이스에 익숙해지고 있습니다. 감사합니다.

[삭제]  

표시기가 자동으로 새로 고쳐지지 않습니다.

여기에 내 거래에 매우 적합한 지표가 있습니다.

불행히도 그는 스스로 업데이트하지 않습니다. 나는 그가 갱신되었음을 항상 수동으로 새로 고쳐야 합니다.

이 문제를 해결할 방법이 있습니까?

매우 도움이 될 것입니다 !!

미리 감사드립니다.

추신: 제가 가지고 있는 모든 것을 첨부했습니다.

파일:
 

그는 알림 SMS를 원합니다. 코드가 어떻게 생겼습니까?

 
popej30:
그는 알림 SMS를 원합니다. 코드가 어떻게 생겼습니까?

뽀빠이30

다음과 같이 하십시오.

SendNotification ("보내고 싶은 알림 메시지");

 

그리고 전화번호는 어디에 넣나요? 제 번호는 0039 555-23-45입니다. 어디로 들어가야 합니까?

예시:

#property indicator_separate_window

#property indicator_minimum -1.1

#property indicator_maximum 1.1

#property indicator_buffers 2

#property indicator_color1 Aqua

#property indicator_color2 Lime

extern int period = 25;

extern int limit = 5000;

double g_ibuf_84[];

double g_ibuf_88[];

double g_ibuf_92[];

int init() {

IndicatorBuffers(3);

SetIndexStyle(0, DRAW_ARROW);

SetIndexStyle(1, DRAW_ARROW);

SetIndexStyle(2, DRAW_NONE);

SetIndexEmptyValue(0, 0.0);

SetIndexEmptyValue(1, 0.0);

SetIndexArrow(0, 233);

SetIndexArrow(1, 234);

SetIndexBuffer(0, g_ibuf_88);

SetIndexBuffer(1, g_ibuf_92);

SetIndexBuffer(2, g_ibuf_84);

IndicatorShortName("BR16");

return (0);

}

int start() {

double ld_72;

double ld_24 = 0;

double ld_32 = 0;

double ld_unused_40 = 0;

double ld_unused_48 = 0;

double ld_56 = 0;

double ld_unused_64 = 0;

double l_low_80 = 0;

double l_high_88 = 0;

for (int li_96 = 0; li_96 <= limit; li_96++) {

g_ibuf_88[li_96] = 0;

g_ibuf_92[li_96] = 0;

}

for (li_96 = 0; li_96 <= limit; li_96++) {

l_high_88 = High;

l_low_80 = Low;

ld_72 = (High[li_96] + Low[li_96]) / 2.0;

if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;

else ld_24 = 0.0;

ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);

g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;

ld_32 = ld_24;

ld_56 = g_ibuf_84[li_96];

}

for (li_96 = 0; li_96 <= limit; li_96++) {

if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;

if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;

}

return (0);

}
 
popej30:
그리고 전화번호는 어디에 넣나요? 제 번호는 0039 555-23-45입니다. 어디로 들어가야 합니까?

예시:

#property indicator_separate_window

#property indicator_minimum -1.1

#property indicator_maximum 1.1

#property indicator_buffers 2

#property indicator_color1 Aqua

#property indicator_color2 Lime

extern int period = 25;

extern int limit = 5000;

double g_ibuf_84[];

double g_ibuf_88[];

double g_ibuf_92[];

int init() {

IndicatorBuffers(3);

SetIndexStyle(0, DRAW_ARROW);

SetIndexStyle(1, DRAW_ARROW);

SetIndexStyle(2, DRAW_NONE);

SetIndexEmptyValue(0, 0.0);

SetIndexEmptyValue(1, 0.0);

SetIndexArrow(0, 233);

SetIndexArrow(1, 234);

SetIndexBuffer(0, g_ibuf_88);

SetIndexBuffer(1, g_ibuf_92);

SetIndexBuffer(2, g_ibuf_84);

IndicatorShortName("BR16");

return (0);

}

int start() {

double ld_72;

double ld_24 = 0;

double ld_32 = 0;

double ld_unused_40 = 0;

double ld_unused_48 = 0;

double ld_56 = 0;

double ld_unused_64 = 0;

double l_low_80 = 0;

double l_high_88 = 0;

for (int li_96 = 0; li_96 <= limit; li_96++) {

g_ibuf_88[li_96] = 0;

g_ibuf_92[li_96] = 0;

}

for (li_96 = 0; li_96 <= limit; li_96++) {

l_high_88 = High;

l_low_80 = Low;

ld_72 = (High[li_96] + Low[li_96]) / 2.0;

if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;

else ld_24 = 0.0;

ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);

g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;

ld_32 = ld_24;

ld_56 = g_ibuf_84[li_96];

}

for (li_96 = 0; li_96 <= limit; li_96++) {

if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;

if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;

}

return (0);

}

다음은 이를 수행하는 방법에 대한 좋은 설명입니다.

 
Jim Clark:
표시기가 자동으로 새로 고쳐지지 않습니다.

여기에 내 거래에 매우 적합한 지표가 있습니다.

불행히도, 그는 스스로 업데이트하지 않습니다. 나는 그가 갱신되었음을 항상 수동으로 새로 고쳐야 합니다.

이 문제를 해결할 방법이 있습니까?

매우 도움이 될 것입니다 !!

미리 감사드립니다.

추신: 제가 가지고 있는 모든 것을 첨부했습니다.

전체를 다시 작성하는 대신 막대를 계산 하는 제한을 추가한 다음 모든 막대를 다시 계산합니다. 그것은 새로 고침 문제를 해결해야 합니다. 사용해보기

파일: