그런 다음 게시한 코드에서 왜 문제가 발생하는지 알 수 없습니다(예: 잘못된 MagicNumber를 수신하는 이유). 지정된 MagicNumber로 열린 주문이 있는 경우 코드가 작동해야 합니다(열린 주문을 반복할 것입니다). 열린 주문이 없거나 MagicNumbers와 기호가 일치하지 않으면 -1을 반환하므로(예상대로) 해당 코드가 정확합니다(지금 테스트했으며 정상적으로 작동함)
죄송하지만 게시 한 코드에서 할 수있는 모든 것
crsnape@btinternet.com: 예, int MagicNumber = 42557입니다.
...
그래 넌 할수있어
유일한 제한 사항은 데드 루프로 끝날 때 "순환 호출"이 발생하지 않는다는 것입니다. 그 외에는 함수 호출에 대한 제한이 전혀 없습니다.
좋은 지적. 그것에 대해 살펴보겠습니다.
함수에 대한 질문입니다. 함수 내에서 함수를 호출할 수 있습니까? 예를 들어 이 기능이 있습니다.
문자열 GetWinLossPreviousShort(int LastOpenTicket, 문자열 WinLossPreviousShort)
{
만약 (... 등
나중에 나는 그것을 다음과 같이 부른다.
이중 GetLotsLong(int LowRisk, int HighRisk, 이중 SLDistanceLong, 문자열 GetWinLossPreviousShort)마지막으로 열린 주문을 검색하기 위해 이 코드를 입력했습니다.
//--- 마지막으로 열린 주문의 티켓 번호를 계산하는 함수
int LastOpenTicket()
{
날짜/시간 마지막 시간 = 0;
int lastTicket = -1; // 열리지 않음.
정수 위치;
(pos = OrdersTotal() - 1, pos >= 0, pos--)
if (OrderSelect(pos, SELECT_BY_POS) // 내 주문만/
&& OrderMagicNumber() == MagicNumber // 내 매직 넘버
&& OrderSymbol() == Symbol() // 그리고 내 쌍.
&& OrderOpenTime() > 마지막 시간)
{
마지막 시간 = OrderOpenTime();
lastTicket = OrderTicket();
}
반환(마지막 티켓);
}
내 GetLots 함수에서 호출되는 함수 - 컴파일러에는 오류가 없지만 백테스트 결과 섹션은 완전히 명확합니다. 거래가 없습니다. 첫 번째 거래에 위의 코드에서 호출할 이전 거래가 없기 때문입니까?
저널에서는 외부 변수(매직 번호 42를 로드하지만 내 코드에서는 42552...?)를 로드하지만 그 이후에는 아무 것도 로드하지 않습니다.
...
매직 번호의 선언은 무엇입니까 ( int MagicNumber 여야 함; )
마지막으로 열린 주문을 검색하기 위해 이 코드를 입력했습니다.
//--- 마지막으로 열린 주문의 티켓 번호를 계산하는 함수
int LastOpenTicket()
{
날짜/시간 마지막 시간 = 0;
int lastTicket = -1; // 열리지 않음.
정수 위치;
(pos = OrdersTotal() - 1, pos >= 0, pos--)
if (OrderSelect(pos, SELECT_BY_POS) // 내 주문만/
&& OrderMagicNumber() == MagicNumber // 내 매직 넘버
&& OrderSymbol() == Symbol() // 그리고 내 쌍.
&& OrderOpenTime() > 마지막 시간)
{
마지막 시간 = OrderOpenTime();
lastTicket = OrderTicket();
}
반환(마지막 티켓);
}
내 GetLots 함수에서 호출되는 함수 - 컴파일러에는 오류가 없지만 백테스트 결과 섹션은 완전히 명확합니다. 거래가 없습니다. 첫 번째 거래에 위의 코드에서 호출할 이전 거래가 없기 때문입니까?
저널에서는 외부 변수(매직 번호 42를 로드하지만 내 코드에서는 42552...?)를 로드하지만 그 이후에는 아무 것도 로드하지 않습니다.예, int MagicNumber = 42557입니다.
...
그런 다음 게시한 코드에서 왜 문제가 발생하는지 알 수 없습니다(예: 잘못된 MagicNumber를 수신하는 이유). 지정된 MagicNumber로 열린 주문이 있는 경우 코드가 작동해야 합니다(열린 주문을 반복할 것입니다). 열린 주문이 없거나 MagicNumbers와 기호가 일치하지 않으면 -1을 반환하므로(예상대로) 해당 코드가 정확합니다(지금 테스트했으며 정상적으로 작동함)
죄송하지만 게시 한 코드에서 할 수있는 모든 것
예, int MagicNumber = 42557입니다.
이전에 개설된 주문이 없고 이것이 첫 번째 주문인 경우 어떻게 됩니까? -1을 반환한다는 것을 알고 있지만 GetLots 함수가 마지막으로 열린 주문 티켓 번호를 호출하는 데 의존하기 때문에 코드 EA가 실행되지 않습니다.
이전에 열린 주문이 하나 이상 존재하는 경우 실패합니다.
귀하의 조건에 다음과 같이 추가하십시오.
if (LastOpenOrder()==-1)
... 나머지 조건이 모두 충족되면 주문을 열 수 있습니다.
또 다른
... 이전과 같이 마지막으로 열린 주문과 나머지 조건을 확인하십시오 .
(지금 EA 조건을 어떻게 썼는지 추측 게임을 하고 있습니다)
이전에 개설된 주문이 없고 이것이 첫 번째 주문인 경우 어떻게 됩니까? -1을 반환한다는 것을 알고 있지만 GetLots 함수가 마지막으로 열린 주문 티켓 번호를 호출하는 데 의존하기 때문에 코드 EA가 실행되지 않습니다.
안녕 믈라덴
스토캐스틱 라인이 레벨 20, 80에서 교차할 때 오픈 트레이드를 설정하는 방법을 알고 있습니까?
예
스토캐스틱이 레벨 20에서 교차할 때(과매도), Long
스토캐스틱이 레벨 80에서 교차할 때(과매입), Short
문안 인사
라이언
이 코드에 몇 줄을 추가했습니다. 이것은 LastOpenTicket() 함수를 사용하지만 여전히 마음에 들지 않습니다. -1 옵션을 추가했습니다. 여기서 뭔가 잘못된 것 같습니까?
//--- 이전 매도 주문 이 수익성이 있는지 판단
문자열 GetWinLossPreviousShort(int LastOpenTicket, 문자열 WinLossPreviousShort)
{
if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
if (OrderProfit() > 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "W";
반환(WinLossPreviousShort);
}
if ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)
{
WinLossPreviousShort = "L";
반환(WinLossPreviousShort);
}
}
}
...
해당 함수 의 가능한 결과를 하나 더 추가하지 않는 이유는 다음과 같습니다. LastOpenTicket() == -1 then WinLossPreviousShort="Na"
이 코드에 몇 줄을 추가했습니다. 이것은 LastOpenTicket() 함수를 사용하지만 여전히 마음에 들지 않습니다. -1 옵션을 추가했습니다. 여기서 뭔가 잘못된 것 같습니까?
//--- 이전 매도 주문이 수익성이 있는지 판단
문자열 GetWinLossPreviousShort(int LastOpenTicket, 문자열 WinLossPreviousShort)
{
if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)
{
if (OrderProfit() > 0 && OrderType() == OP_SELL)
{
WinLossPreviousShort = "W";
반환(WinLossPreviousShort);
}
if ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)
{
WinLossPreviousShort = "L";
반환(WinLossPreviousShort);
}
}
}