KimIV의 유용한 기능 - 페이지 85

 

결과적으로 닫기 블록에 사용자 지정 위치 수가 추가되어 "올바른" 마감이 되었지만 로그에 몇 번 " error 131 "이 계속 나타납니다.

하나의 주문 수표가 이미 사용 가능하고

오류 131을 피하기 위해 코드를 조정할 수 있습니까?

정말 감사합니다.

파일:
codz2.mq4  5 kb
 
hope писал(а) >>

오류 131을 피하기 위해 코드를 조정할 수 있습니까?

정말 감사합니다.

그리고 분할 후 로트 크기를 표준화할 사람은 누구입니까? 따라서 오류.

 

Alex, 닫기 함수에 로트를 전달하기 전에 NormalizeLot() 함수로 크기를 정규화합니다.

 

감사합니다 Igor, Alexander,

실제로 SELLCLOSED_1= OrderClose ( OrderTicket(), Lot/3, Ask, 0, Red ); 함수에서 Lot/3(Lot/2, Lot)을 0.01로 교체하여 로트를 확인함으로써 오류 131을 피했습니다. ), 그러나 먼저 Lot 형식으로 닫는 것이 더 정확합니다. 둘째, 나는 이전에 프로그램에서 사용자 정의 함수와 호출을 접한 적이 없었습니다. 코드에서 모든 것이 올바르게 연결된 것처럼 보이고 모든 것이 작동하지만 오류 131은 여전히 남아 있습니다. 코드를 살펴보십시오. NormalizeLot를 호출하는 기능에서 뭔가 까다로웠을 것입니다.

파일:
cod3.mq4  6 kb
 

죄송합니다. 원래 코드에서 줄

재생 빈도 ();
BUYCLOSED_1=OrderClose( OrderTicket(), CloseLot, Bid, 0, Red );

조건에 따라 올바른 LotClose 비용

Lot=OrderLots(); // 로트 수
LotClose = NormalizeLot(Lot); // 클로징 로트는 정규화된 로트 값에 할당됩니다.

포스팅하다가 실수했네요....

 
hope писал(а) >>

코드를 살펴보십시오. NormalizeLot를 호출하는 기능에서 뭔가 까다로웠을 것입니다.

교체 시도

   if ( ro ) l = MathCeil ( lo * k ) / k ; else l = MathFloor ( lo * k ) / k ;

   if ( ro ) l = NormalizeDouble ( MathCeil ( lo * k ) / k , 2 ) ; else l = NormalizeDouble ( MathFloor ( lo * k ) / k , 2 ) ;
 

좋은 아침 알렉산더,

안타깝게도 귀하의 힌트는 도움이 되지 않았습니다. 나는 로그를 분석하고 한 로트의 한 부분의 폐쇄가 다른 로트의 일부의 폐쇄와 거의 일치하는 두 가지 경우에서 오류가 발생한다는 것을 발견했습니다.

시간에 우연의 일치가 없으면 로트의 일부가 오류 없이 닫힙니다.

나는 매수 마감을 위한 로트와 매도 마감을 위한 로트를 별도로 표준화하려고 시도했지만 아무 소용이 없었습니다.

더블
로트, // 수량 선택한 순서대로 로트
로트 닫기 매수,
많은 닫기판매,

...........................................

Lot=OrderLots();
LotCloseBuy = NormalizeLot(Lot);

LotCloseSell = NormalizeLot(Lot);

...........................................

BUYCLOSED_3=OrderClose( OrderTicket(), LotCloseBuy, Bid, 0, Red );

...........................

SELLCLOSED_3=OrderClose( OrderTicket(), LotCloseSell, Ask, 0, Red );

...........................

이고르의 기능

노멀라이즈 로트.......

어떤 아이디어가 있습니까?

 

여기 내가 양이다! 으악- 역겹다....

주문 주기의 정규화된 로트

//------------------------------------------------ --------------- 4 --
// 주문에 대한 회계
기호=기호(); // fin.instr의 이름.
총 매수=0; // 구매 주문 수
총 판매액=0; // 판매 주문 수
for(int i=1; i<=OrdersTotal(); i++) // 순서를 통해 루프
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // 다음이 있는 경우
{ // 주문 분석:
if (OrderSymbol()!=Symb) 계속; // 핀란드어가 아닙니다. 도구
if (OrderType()>1) // 보류 중입니다.
{
Alert(" 대기 중인 주문 이 감지되었습니다. Expert Advisor가 작동하지 않습니다.");
반품; // start()에서 종료
}
if (주문유형()==OP_BUY)
{
총 구매++; // 주문 카운터 구매
BuyOrdOpPrice=OrderOpenPrice(); // 매수주문 개시가
}
if (주문 유형()==OP_SELL)
{
SellTotal++; // 매도 주문 카운터
SellOrdOpPrice=OrderOpenPrice(); // 매도 주문 개시 가격
}
티켓=OrderTicket(); // 선택된 번호. 주문.
Tip=주문유형(); // 선택한 주문의 유형입니다.
Lot=OrderLots();

LotCloseBuy = NormalizeLot(Lot);

LotCloseSell = NormalizeLot(Lot);
}
}

....하지만 그는 자신이 있어야 하는 미결 주문을 설명하기 위해 별도의 주기를 만들었습니다!!! 클로징 로트 정상화

//------------------------------------------------ --------------- 6 --

// 오픈 주문 확인
정수 _GetLastError = 0, _OrdersTotal = OrdersTotal();
인츠;


//---- 모든 열린 위치를 통해 루프
( z = _OrdersTotal-1 ; z >=0 ; z -- )
{
//for 루프가 시작되었습니다 - 모든 열린 주문을 정렬합니다.
//---- 위치 선택 중 오류가 발생하면 다음 위치로 이동
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - 오류 번호", _GetLastError );
계속하다;
}
//완전한
// 화폐와 마법에 대한 바인딩
//---- 현재 악기에 대한 위치가 열려 있지 않으면 건너뜁니다.
if ( OrderSymbol() != Symbol() ) 계속; //실수
//완전한

//---- MagicNumber가 Expert_ID와 같지 않으면 이 위치를 건너뜁니다.
if ( OrderMagicNumber() != Expert_ID ) 계속; //실수
//완전한
if (OrderType()==OP_BUY)
{
BuyClLot=OrderLots();
}
if (주문 유형()==OP_SELL)
{
SellClLot=OrderLots();
}
OpenedLots=OrderLots();
LotCloseBuy =NormalizeLot(OpenedLots); // 랏 수
LotCloseSell =NormalizeLot(OpenedLots); // 랏 수

//BUY 포지션이 열려 있는지 확인,

..................................................................

감사합니다 이고르, 알렉산더. 로트 정규화 기능이 없었다면 여전히 막다른 골목에 있었을 것입니다....

 

좋은 저녁이에요,

그리고 첫 번째 오류:

2009.07.08 21:05:45 TestGenerator: 일치하지 않는 데이터 오류(2009.07.08 19:00에서 볼륨 제한 651 초과)
중요합니까 아니면 테스터의 오류입니까?

고맙습니다.

 
이고르 - 여기 봐, '갭 표시기'