전문가를 위한 질문 - 페이지 13

 

맞는 것 같아요! 감사 합니다!

나는 지금 시도 할거야!

 
친애하는 전문가 여러분, OrderCloseBy () 함수를 이해하는 데 도움을 주십시오. 나는 완전히 혼란 스럽습니다. 나는 미러 반대 조건에서 포지션을 열고 닫는 Expert Advisor가 있습니다. 즉, OPEN SELL과 CLOSE BUY와 마찬가지로 OPEN BUY와 CLOSE SELL의 조건이 동일하기 때문에 같은 가격으로 한 포지션을 청산한 직후 같은 거래량으로 다른 방향으로 포지션이 열린다. 그래서 나는 두 배의 거래량에서 반대 방향으로 포지션을 열고 OrderCloseBy() 함수로 반대 주문을 마감함으로써 OrderClose()를 대체하기로 결정했습니다. 즉, 결국에도 밝혀졌어야 했지만 각 트랜잭션에서 하나의 스프레드를 저장했지만 테스터는 완전히 다른 것을 보여줍니다. 그래서 제가 코드를 잘못 쓴건지, 아니면 아이디어 자체가 제가 잘못 이해한건지 도무지 알 수가 없습니다...설명을 해주시면 정말 감사하겠습니다...
 
먼저 이 기능이 단말기에서 지원되는지 DC의 기술 지원에 문의하십시오. 왜냐하면 일부 DC에서는 OrderCloseBy () 함수를 사용할 수 있습니다.
 
데모 에서는 OrderCloseBy ()가 지원됩니다.
 

저는 전문가가 아닙니다. 이 기능의 경우 내 "참조" 폴더에 "일반" 모든 것 외에 그런 메모가 있습니다(여기에 복사했습니다. 어느 지점에서 왔는지 기억나지 않습니다) -

그리고 OrderCloseBy 기능은 2개의 주문을 동시에 마감하여 스프레드 1개를 저장하는 데만 사용됩니다.
프로그래밍 방식으로 터미널을 통과하고 모든 미결 주문 번호와 해당 특성을 기억하고 주 주문 번호를 선택하고 그 아래에서 원하는 (사용 가능한) 카운터 주문을 선택하고 해당 번호로 대체해야 합니다.


// 즉. 내가 아는 한, 이 기능을 사용하면 이전에 선택한 두 개의 반대 위치만 닫을 수 있습니다.

그리고 더 이상.

 

글쎄, 네...

그것이 그녀가 그렇게 불리는 이유입니다.

 

그럼, 포지션 반전을 위한 다음 두 가지 옵션에 경제적 차이가 있는지 여부에 대한 질문을 다시 말씀드리겠습니다.

1) OrderClose 기능을 사용하여 1랏의 볼륨으로 SELL을 닫고 1랏의 볼륨으로 BUY를 엽니다.

2) 1랏의 거래량이 있는 SELL이 열리면 먼저 2랏의 거래량으로 BUY를 열고 OrderCloseBy 기능으로 SELL을 닫고 1랏의 거래량으로 열려 있는 BUY 위치도 남습니다.

교과서의 예에 따르면 2) 옵션에서 하나의 스프레드가 저장됩니다.

 
즉, 1+1 스프레드가 보상되고 나머지 1은 거래 조건에 따른 일반 스프레드가 됩니다.
 
https://book.mql4.com/en/trading/orderclose - 여기에서 OrderCloseBy () 함수의 동작이 설명됩니다. 데모에서도 똑같이 하려고 했습니다. 실제로는 확산이 더 적습니다. 하지만 여전히 Expert Advisor에서는 작동하지 않습니다... 한마디로 혼란스럽습니다...
 
Dmirtiy писал(а) >>
https://book.mql4.com/en/trading/orderclose - 여기에서 OrderCloseBy () 함수의 동작이 설명됩니다. 나는 데모에서 같은 것을 시도했습니다. 실제로는 확산이 적습니다. 하지만 여전히 Expert Advisor에서는 작동하지 않습니다. 요컨대, 혼란 스럽습니다.

이 질문으로 당신은 두 가지로 불을 붙였습니다. 당신은 우리의 호기심입니다.

여기에 쉬운 해결책은 없습니다. MQL5가 출시되면 이 문제는 완전히 사라질 것입니다.

저는 Expert Advisors에서 사용하는 몇 가지 절차를 제공할 수 있습니다.

//미결 주문의 현재 상태 확인:

무효 CheckOrders()
{
정수 나;
구매 주문 = 거짓;
SellOrder = 거짓;
매수 매수 = 0.0;
많은 판매 = 0.0;

for ( i=0; i < OrdersTotal(); i++)
{
주문 선택(i, SELECT_BY_POS);
if ( OrderSymbol() == Symbol())
{
경우 ( 주문 유형() == OP_BUY )
{
주문 구매 = true;
LastBuyLots = OrderLots();
BuyLots += LastBuyLots; // 오픈 바이 포지션의 양
BuyTicket = OrderTicket();
}
if (OrderType() == OP_SELL)
{
판매 주문 = true;
LastSellLots = OrderLots();
SellLots += LastSellLots; // 오픈 매도 포지션의 양
SellTicket = OrderTicket();
}
}
}
}

// 개시(마감) 주문:

무효 TradeVariant( int 변형 )
{
스위치(변형)
{
// if (패턴 < 0 && !BuyOrder && !SellOrder && !FridayLastHour) 변형 = 1;
// 매도 신호, 미결 주문이 없으며 금요일의 마지막 시간이 아닙니다.
// 매도 주문을 엽니다.
사례 1:
OpenSellOrder(많은);
부서지다;

// if (패턴 < 0 && BuyOrder && !SellOrder && !FridayLastHour) variant = 2;
// 매도 신호, 미결 매수 주문이 있고 매도 주문이 없습니다.
// 그리고 그것은 금요일의 마지막 시간이 아닙니다 - 뒤집기
사례 2:
OpenSellOrder(Lots + BuyLots);
부서지다;

// if (패턴 < 0 && BuyOrder && !SellOrder && FridayLastHour) variant = 3;
// 매도 신호, 미결 매수 주문이 있고 매도 주문이 없습니다.
// 그리고 이것은 금요일의 마지막 시간입니다 - 구매 주문을 닫습니다
사례 3:
CloseBuyOrders();
부서지다;

// if (패턴 > 0 && !SellOrder && !BuyOrder && !FridayLastHour) 변형 = 4;
// 구매 신호, 미결 주문이 없으며 금요일의 마지막 시간이 아닙니다.
// 구매 주문을 엽니다.
사례 4:
OpenBuyOrder(많은);
부서지다;

// if (패턴 > 0 && SellOrder && !BuyOrder && !FridayLastHour) variant = 5;
// 매수 신호, 미결 매도 주문이 있고 매수 주문이 없습니다.
// 그리고 그것은 금요일의 마지막 시간이 아닙니다 - 뒤집기
사례 5:
OpenBuyOrder(Lots + SellLots);
부서지다;

// if (패턴 > 0 && SellOrder && !BuyOrder && FridayLastHour) variant = 6;
// 매수 신호, 미결 매도 주문이 있고 매수 주문이 없습니다.
// 그리고 이것은 금요일의 마지막 시간입니다 - 매도 주문을 마감하십시오
사례 6:
CloseSellOrders();
부서지다;

사례 7:
// if (SellOrder && BuyOrder) 변형 = 7;
// 공개 교차 주문이 있습니다.
if (WaitBeforeTransaction(WaitSeconds) == 1) // 요청 사이에 일시 중지
{
if (LastBuyLots <= LastSellLots)
OrderCloseBy(구매 티켓, 판매 티켓);
또 다른
OrderCloseBy( SellTicket, BuyTicket);
}
부서지다;

// 그렇지 않으면 아무것도 하지 않는다
기본:
부서지다;
}
}

변수를 이해하시길 바랍니다.

행운을 빕니다!