내가 올바르게 이해하면 작업이 다릅니다. 1, 2, 3 주문이 오픈되었습니다. 시가가 어떻게 형성되는지 모르겠습니다. 주문 3이 마감되고 총 이익은 주문 3의 이익과 같습니다. 당신은 주문 3 전에 열린 주문의 티켓을 계산해야합니다. 그런 다음 주문 2가 닫힙니다.주문 2 이전에 열린 주문의 티켓을 찾아야 합니다. 이것이 주문 1입니다. 총 이익은 2 및 3 주문의 이익과 같습니다.
int FindTicket()
{
int oldticket;
int tick= 0 ;
ticket= 0 ;
for ( int cnt = OrdersTotal ()- 1 ; cnt>= 0 ; cnt--)
{
if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
tick = OrderTicket();
}
}
}
}
return (tick);
}
int TickF = FindTicket();
int CalculateProfitHistory()
{
double _point;
int i, _ototal = OrdersHistoryTotal(), _profit= 0 ;
for (i = 0 ; i < OrdersHistoryTotal(); i++)
{
if ( OrderSelect (TickF, SELECT_BY_TICKET, MODE_HISTORY))
{
if (OrderSymbol() == Symbol ())
{
if (OrderMagicNumber() == Magic)
{
_point = MarketInfo(OrderSymbol(), MODE_POINT);
if (_point == 0 )
{
if ( StringFind (OrderSymbol(), "" ) < 0 )
_point = 0.0001 ;
else _point = 0.01 ;
}
if (OrderType() == OP_BUY)
{
_profit += int ((MarketInfo(OrderSymbol(), MODE_BID) - OrderOpenPrice())/_point);
}
if (OrderType()==OP_SELL)
{
_profit += int ((OrderOpenPrice() - MarketInfo(OrderSymbol(), MODE_ASK))/_point);
}
}
}
}
}
return (_profit);
}
첫 번째 기능에서는 필요한 주문의 티켓을 찾습니다. 그리고 두 번째는 이 티켓 이후에 마감된 모든 주문의 이익을 계산해야 합니다. 그 이전에 있었던 사람들의 이익은 나에게 흥미롭지 않습니다. 여기 두 번째가 있습니다. 그는 삐딱하게 생각합니다. 주문을 열 때 이 2개의 함수가 호출되므로 0과 같아야 하지만 같지는 않습니다. PS는 귀하의 조언을 받아들였으며 어레이를 거부했습니다) 위에서 12번째 사각형)
간단한 경우 빠르게 확인하려면 다음과 같습니다.
일반적으로 주문은 제 시간에 서로 이어지지만 보장되지는 않습니다. 따라서 좋은 방법으로 연대기를 확인해야합니다. 그러나 실험을 위해서는 그렇게 할 것입니다.
간단한 경우 빠르게 확인하려면 다음과 같이 하십시오.
일반적으로 주문은 시간에 따라 이어지지만 보장되지는 않습니다. 따라서 좋은 방법으로 연대기를 확인해야합니다. 그러나 실험을 위해 그것은 할 것입니다.
시간이 보장되지 않는다는 점에 동의하므로 모든 마감된 주문을 티켓을 늘리는 방향으로 진행하고 싶습니다. 주문의 티켓을 알고 그것부터 세어보려고 하는데 뭔가 잘못됐어) 어떻게 되나?
간단한 경우 빠르게 확인하려면 다음과 같습니다.
일반적으로 주문은 제 시간에 서로 이어지지만 보장되지는 않습니다. 따라서 좋은 방법으로 연대기를 확인해야합니다. 그러나 실험을 위해서는 그렇게 할 것입니다.
역사상 더 작은 것에서 더 큰 것으로 주문을 정렬하는 것이 더 정확합니다. 재계산 시 마감되는 주문을 고려하기 위해, 우리는 이러한 시장 주문을 더 큰 것에서 더 작은 것으로 계산하여 개설 및 마감을 올바르게 고려합니다. 같은 틱에있는 것들. 그렇게 생각해요)
간단한 경우 빠르게 확인하려면 다음과 같습니다.
일반적으로 주문은 제 시간에 서로 이어지지만 보장되지는 않습니다. 따라서 좋은 방법으로 연대기를 확인해야합니다. 그러나 실험을 위해서는 그렇게 할 것입니다.
그리고 Alexey의 코드도 올바르게 계산되지 않습니까?
역사상 더 작은 것에서 더 큰 것으로 주문을 정렬하는 것이 더 정확합니다. 재계산 시 마감되는 주문을 고려하기 위해, 우리는 이러한 시장 주문을 더 큰 것에서 더 작은 것으로 계산하여 개설 및 마감을 올바르게 고려합니다. 같은 틱에있는 것들. 그렇게 생각해요)
그리고 Alexey의 코드도 올바르게 계산되지 않습니까?
시도하지 않았습니다. 나는 지금 시도 할거야. 나는 그것을 쓸 것이다.
간단한 경우 빠르게 확인하려면 다음과 같습니다.
일반적으로 주문은 제 시간에 서로 이어지지만 보장되지는 않습니다. 따라서 좋은 방법으로 연대기를 확인해야합니다. 그러나 실험을 위해서는 그렇게 할 것입니다.
나는 많은 것을 컴파일 할 때 다음을 제외하고 모든 것을 고쳤습니다.
if (profit>max)
이 줄, 나는 그것을 잘 이해하지 못합니다. 설명해주실 수 있나요?
아이디어는 다음과 같습니다. 일정한 이익을 얻은 후 티켓을 변경하십시오.
최대 - 이것은 이익 한도이며 그 후에 티켓이 변경됩니다. 당신은 그 가치를 설정합니다.
최대 - 이것은 이익 한도이며 그 후에 티켓이 변경됩니다. 당신은 그 가치를 설정합니다.
내가 올바르게 이해하면 작업이 다릅니다. 1, 2, 3 주문이 오픈되었습니다. 시가가 어떻게 형성되는지 모르겠습니다. 주문 3이 마감되고 총 이익은 주문 3의 이익과 같습니다. 당신은 주문 3 전에 열린 주문의 티켓을 계산해야합니다. 그런 다음 주문 2가 닫힙니다.주문 2 이전에 열린 주문의 티켓을 찾아야 합니다. 이것이 주문 1입니다. 총 이익은 2 및 3 주문의 이익과 같습니다.
왜 그러는지 이해가 안가는데, 논리가 맞는 것 같습니다.)
Valery, 나는 그 두 문장 뒤에 숨겨진 논리를 완전히 이해하지 못했습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
초보자의 질문 MQL4 MT4 MetaTrader 4
막섭 , 2021.09.01 16:38
첫 번째 기능에서는 필요한 주문의 티켓을 찾습니다. 그리고 두 번째는 이 티켓 이후에 마감된 모든 주문의 이익을 계산해야 합니다. 그 이전에 있었던 사람들의 이익은 나에게 흥미롭지 않습니다. 여기 두 번째가 있습니다. 그는 삐딱하게 생각합니다. 주문을 열 때 이 2개의 함수가 호출되므로 0과 같아야 하지만 같지는 않습니다.
PS는 귀하의 조언을 받아들였으며 어레이를 거부했습니다)
위에서 12번째 사각형)
다 생각했고, 당신의 제안에 따라 내 방식대로 했습니다)
후속 작업은 적자 주문이 나오면 이익이 나는 다른 주문에 의해 차단되어야 합니다.
구현 방법. 잃어버린 주문의 티켓 이 기억되고 이것이 우리의보고 포인트였습니다. 그 후, 우리는 잃는 주문의 이익, 그 이후에 마감된 주문의 이익을 계산하기 시작합니다. 첫 번째 주문이 열려 있고 이익에 도달하면 닫는다는 것을 상기시켜 드리겠습니다.
if ( (CalculateProfitHistory() + FirstProfit() >= 이익)
{
닫기 우선();
인쇄("우리는 첫 번째 무익한 것을 닫습니다");
}