제가 어디서 잘못했는지 알려주세요. 현재 상품에 대한 포지션과 보류 중인 주문을 삭제하는 간단한 스크립트를 작성하려고 합니다. 여기:
//+------------------------------------------------------------------+//| clean.mq5 |//| Copyright 2011, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2011, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart ()
{
MqlTick current_tick;
MqlTradeRequest close_request;
MqlTradeResult close_result;
SymbolInfoTick ( _Symbol ,current_tick);
int counter01;
while (check_position()== true );
{
PositionSelect ( _Symbol );
close_request.action= TRADE_ACTION_DEAL ; close_request.symbol= _Symbol ; close_request.volume= PositionGetDouble ( POSITION_VOLUME ); close_request.type_filling= ORDER_FILLING_AON ;
if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
{
close_request.price=current_tick.bid; close_request.type= ORDER_TYPE_SELL ;
}
else
{
close_request.price=current_tick.ask; close_request.type= ORDER_TYPE_BUY ;
}
OrderSend (close_request,close_result);
}
do
{
for (counter01= 1 ; counter01<= OrdersTotal (); counter01++)
{
close_request.order= OrderGetTicket (counter01- 1 );
if ( OrderGetString ( ORDER_SYMBOL )== _Symbol )
{
close_request.action= TRADE_ACTION_REMOVE ;
OrderSend (close_request,close_result);
}
}
}
while (check_order()== true );
if ( GetLastError ()!= 0 )
Print ( "ошибка код " , GetLastError (), " функция " , __FUNCTION__ , " строка " , __LINE__ );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool check_position() // функция проверяет наличие позиции
{
int counter01;
bool position_exsist= false ;
for (counter01= 0 ; counter01< PositionsTotal (); counter01++)
{
if ( PositionGetSymbol (counter01)== _Symbol )
{
position_exsist= true ;
break ;
}
}
return (position_exsist);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+bool check_order() // функция проверяет наличие ордеров
{
int counter01;
bool order_exsist= false ;
for (counter01= 0 ; counter01< OrdersTotal (); counter01++)
{
OrderGetTicket (counter01);
if ( OrderGetString ( ORDER_SYMBOL )== _Symbol )
{
order_exsist= true ;
break ;
}
}
return (order_exsist);
}
//+------------------------------------------------------------------+
위치가 있을 때 스크립트가 중단됩니다. 디버깅 중에 위치가 있는지 확인할 때 중단이 발생하는 것으로 나타났습니다. while(check_position()==true) 루프 조건이 검사되기 시작하면 check_position() 함수에 제어권이 넘어가고 함수가 처음 정상적으로 실행되면 true를 반환한다. 하지만 이후 싸이클의 본문은 실행되지 않고 조건 검사가 다시 시작되고 컨트롤은 다시 check_position()으로 돌아가서 return(order_exsist) 연산자를 실행한 후 싸이클 조건으로 돌아가지 않고 처음으로 돌아간다. check_position() 함수의. 제가 어디서 잘못했는지 알려주세요.
제가 어디서 잘못했는지 알려주세요. 현재 상품에 대한 포지션과 보류 중인 주문을 삭제하는 간단한 스크립트를 작성하려고 합니다. 여기:
위치가 있을 때 스크립트가 중단됩니다. 디버깅 중에 위치가 있는지 확인할 때 중단이 발생하는 것으로 나타났습니다. while(check_position()==true) 루프 조건이 검사되기 시작하면 check_position() 함수에 제어권이 넘어가고 함수가 처음 정상적으로 실행되면 true를 반환한다. 하지만 이후 싸이클의 본문은 실행되지 않고 조건 검사가 다시 시작되고 컨트롤은 다시 check_position()으로 돌아가서 return(order_exsist) 연산자를 실행한 후 싸이클 조건으로 돌아가지 않고 처음으로 돌아간다. check_position() 함수의. 제가 어디서 잘못했는지 알려주세요.
위치가 있으면 무한 루프가 발생합니다.
while (check_order()== true );
에 상당하다
while (check_order()== true )
{
// пустой оператор
}
Urain :
Так что это или баг терминала, или серверной истории. Но скорее терминала, тк отчёты на чемпе скорее с серверной истории восстанавливались.
시원한. 주의를 기울이지 않았다. 명확하게 설명했습니다.
나는 그것을 찾았습니다. 기본적으로 시간순으로 정렬되어 있지만 거래 번호별로 필요합니다. 그러면 모든 것이 맞습니다.
오류가 없다는 뜻인가요? 문제는 거래가 고려되어야 하고 / 시간이 아니라 티켓별로 정렬되어야 한다는 것입니다.
나는 보고서를 대충 훑어보았을 뿐, 직위의 상태는 계산하지 않았다.
오류가 없다는 뜻인가요? 문제는 거래가 고려되어야 하고 / 시간이 아니라 티켓별로 정렬되어야 한다는 것입니다.
나는 보고서를 대충 훑어보았을 뿐, 직위의 상태는 계산하지 않았다.
예, 정확히 보고서를 저장할 때 이 프로세스의 자동화가 없으며 주의 깊게 모니터링해야 합니다. 나는 모든 사용자가 이것에 주의를 기울일 것이라고 생각하지 않으며 결과적으로 보고서를 구문 분석할 때 버그가 있을 것입니다.
ZY 보고서 구문 분석 후 정렬을 추가했습니다. 결과적으로 모든 것이 효과가 있었지만 한 명 이상의 프로그래머가 이 기능에 지칠 것으로 예상합니다.
최적화하는 동안 최적화 매개변수의 이름은 최적화 그래프의 오른쪽 상단 모서리에 표시됩니다 .
최적화를 관찰할 때 새로운 최대값 이 항상 이 비문 뒤에 숨겨져 있기 때문에 이 비문은 다소 성가십니다.
Renat, 왼쪽 상단 모서리로 이동합시다! 또는 오른쪽 하단. 아니면 왼쪽 아래로 ... 어딜가나 오른쪽 위에서 제거하면 됩니다. 물론이죠! :)
// 또는 최소한 창백 하게 만들고 정보를 가리지 않도록 배경에 넣습니다.
최적화하는 동안 최적화 매개변수의 이름은 최적화 그래프의 오른쪽 상단 모서리에 표시됩니다 .
최적화를 관찰할 때 새로운 최대값 이 항상 이 비문 뒤에 숨겨져 있기 때문에 이 비문은 다소 성가십니다.
Renat, 왼쪽 상단 모서리로 이동합시다! 또는 오른쪽 하단. 아니면 왼쪽 아래로 ... 어딜가나 오른쪽 위에서 제거하면 됩니다. 물론이죠! :)
// 또는 최소한 창백 하게 만들고 정보를 가리지 않도록 배경에 넣습니다.
제가 어디서 잘못했는지 알려주세요. 현재 상품에 대한 포지션과 보류 중인 주문을 삭제하는 간단한 스크립트를 작성하려고 합니다. 여기:
위치가 있을 때 스크립트가 중단됩니다. 디버깅 중에 위치가 있는지 확인할 때 중단이 발생하는 것으로 나타났습니다. while(check_position()==true) 루프 조건이 검사되기 시작하면 check_position() 함수에 제어권이 넘어가고 함수가 처음 정상적으로 실행되면 true를 반환한다. 하지만 이후 싸이클의 본문은 실행되지 않고 조건 검사가 다시 시작되고 컨트롤은 다시 check_position()으로 돌아가서 return(order_exsist) 연산자를 실행한 후 싸이클 조건으로 돌아가지 않고 처음으로 돌아간다. check_position() 함수의. 제가 어디서 잘못했는지 알려주세요.제가 어디서 잘못했는지 알려주세요. 현재 상품에 대한 포지션과 보류 중인 주문을 삭제하는 간단한 스크립트를 작성하려고 합니다. 여기:
위치가 있을 때 스크립트가 중단됩니다. 디버깅 중에 위치가 있는지 확인할 때 중단이 발생하는 것으로 나타났습니다. while(check_position()==true) 루프 조건이 검사되기 시작하면 check_position() 함수에 제어권이 넘어가고 함수가 처음 정상적으로 실행되면 true를 반환한다. 하지만 이후 싸이클의 본문은 실행되지 않고 조건 검사가 다시 시작되고 컨트롤은 다시 check_position()으로 돌아가서 return(order_exsist) 연산자를 실행한 후 싸이클 조건으로 돌아가지 않고 처음으로 돌아간다. check_position() 함수의. 제가 어디서 잘못했는지 알려주세요.위치가 있으면 무한 루프가 발생합니다.
에 상당하다
연산자 본문에 중단이 없기 때문에 코드에서 루프를 벗어날 방법이 없습니다.