누구든지 내가 무엇을 잘못하고 있는지 알려주실 수 있습니까? 저는 주로 mq4 컴파일러 및 온라인 포럼의 예를 사용하여 스니펫과 코드가 있는 FX Gen을 사용하여 제 EA를 작성합니다. 저는 더 쉬운 거래를 위해 제 전략을 코딩하려고 노력하고 있으며 마지막 주문을 성공적으로 선택할 수 있었습니다. 이 코드를 사용하여.
누구든지 내가 무엇을 잘못하고 있는지 알려주실 수 있습니까? 저는 주로 mq4 컴파일러 및 온라인 포럼의 예를 사용하여 스니펫과 코드가 있는 FX Gen을 사용하여 제 EA를 작성합니다. 저는 더 쉬운 거래를 위해 제 전략을 코딩하려고 노력하고 있으며 마지막 주문을 성공적으로 선택할 수 있었습니다. 이 코드를 사용하여.
선택할 수 있는 옵션을 추가할 기회가 있습니까?
예를 들어,
따로따로 구매해서 따로 판매
수정: BE 모두 0, +1 또는 +2 핍을 사거나 BE 0, 1 또는 2 핍을 모두 매도하시겠습니까?
가능합니까?
be.mq4
안녕하세요 믈라덴입니다.
누구든지 내가 무엇을 잘못하고 있는지 알려주실 수 있습니까? 저는 주로 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();
}
안녕하세요 믈라덴입니다.
누구든지 내가 무엇을 잘못하고 있는지 알려주실 수 있습니까? 저는 주로 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();
}
다음과 같은 기능 을 사용해 보십시오.
{
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를 원합니다. 코드가 어떻게 생겼습니까?
그는 알림 SMS를 원합니다. 코드가 어떻게 생겼습니까?
뽀빠이30
다음과 같이 하십시오.
SendNotification ("보내고 싶은 알림 메시지");
그리고 전화번호는 어디에 넣나요? 제 번호는 0039 555-23-45입니다. 어디로 들어가야 합니까?
예시:
#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);
}그리고 전화번호는 어디에 넣나요? 제 번호는 0039 555-23-45입니다. 어디로 들어가야 합니까?
예시:
#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);
}다음은 이를 수행하는 방법에 대한 좋은 설명입니다.
표시기가 자동으로 새로 고쳐지지 않습니다.
여기에 내 거래에 매우 적합한 지표가 있습니다.
불행히도, 그는 스스로 업데이트하지 않습니다. 나는 그가 갱신되었음을 항상 수동으로 새로 고쳐야 합니다.
이 문제를 해결할 방법이 있습니까?
매우 도움이 될 것입니다 !!
미리 감사드립니다.
추신: 제가 가지고 있는 모든 것을 첨부했습니다.짐
전체를 다시 작성하는 대신 막대를 계산 하는 제한을 추가한 다음 모든 막대를 다시 계산합니다. 그것은 새로 고침 문제를 해결해야 합니다. 사용해보기