초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 30

 
spoiltboy :

인사말. 여기저기 물어봤는데 아직 답이 안나오네요. 말해줘 제발 왜 그런 기록을 가지고

if (x!=maxpr1){x=maxpr1; 주문삭제(티켓D);}

if (z!=minpr1){z=minpr1; 주문삭제(티켓업);}

항상 오류를 던진다

: OrderDelete 기능 에 대한 유효하지 않은 티켓

: 주문 삭제 오류 4051

설명서에 따르면

유효하지 않은 함수 매개변수 값

매개 변수가 동일한 것처럼 보이지만.

조건을 제거하고 그대로 두더라도

주문삭제(티켓D);

주문삭제(티켓업);

성공적으로 삭제됩니다(그러나 조건에 따라 필요함). 내가 무엇을 잘못하고 있지? 여기에 전체 내용이 있습니다.

OrderSelect를 통해 선택해야 하기 때문에 ticketD 값이 손실되고 티켓 대신 이미 일종의 트릭이 있을 가능성이 큽니다. 인쇄하여 비교하십시오. 그리고 일반적으로 이러한 스타일의 글쓰기는 넌센스입니다.
 
Vitaly Muzichenko :
OrderSelect를 통해 선택해야 하기 때문에 ticketD 값이 손실되고 티켓 대신 이미 일종의 트릭이 있을 가능성이 큽니다. 인쇄하여 비교하십시오.

값이 손실되는 조건에 의해 삭제 기능이 트리거되기 때문입니까? 나는 다음과 같이 쓰려고 노력했다.

if (x!=maxpr1){x=maxpr1; 주문삭제(티켓D);}

주문삭제( 티켓업 );

"ticketD"에 대한 다가오는 조건에서 동일한 오류를 기록하고 " ticketUP" 주문은 각 틱 에서 성공적으로 삭제됩니다.

 
Vitaly Muzichenko :
일반적으로 이런 스타일의 글은 넌센스입니다.
이제 막 시작했는데 댓글 달겠습니다.
 
spoiltboy :
이제 막 시작했는데 댓글 달겠습니다.
볼 수 있도록 "SRC"를 통해 코드를 붙여넣습니다.
 
Renat Akhtyamov :
볼 수 있도록 "SRC"를 통해 코드를 붙여넣습니다.
extern int pointsl= 100 , pointtp= 100 , MagicB= 1111 , MagicS= 2222 , bars= 10 ;   extern double lotB= 0.1 , lotS= 0.1 ;
double slB, tpB, slS, tpS;   double x= 0 , z= 0 ;


void OnTick ()  
{
double maxpr1=- 9999 ; double minpr1= 9999 ;

for ( int shift1= 0 ; shift1<bars; shift1++)
{ double i= iHigh ( Symbol (), PERIOD_CURRENT , shift1);
if (i>maxpr1){maxpr1=i;}}

for ( int shiftA1= 0 ; shiftA1<bars; shiftA1++)
{ double y= iLow ( Symbol (), PERIOD_CURRENT , shiftA1);
if (y<minpr1) {minpr1=y;}}

if (BuyLimitCount()== 0 && BuyCount()== 0 ){
slB= NormalizeDouble (minpr1-pointsl* Point , 5 );
tpB= NormalizeDouble (minpr1+pointtp* Point , 5 );
int ticketUP= OrderSend ( Symbol (), OP_BUYLIMIT , lotB, minpr1, 3 , slB, tpB, "" , MagicB, 0 , Red);
if (ticketUP==- 1 ) Print ( "ERROR OP_BUY" ); else Print ( "OP_BUY OK" );}

if (SellLimitCount()== 0 && SellCount() == 0 ){
slS= NormalizeDouble (maxpr1+pointsl* Point , 5 );
tpS= NormalizeDouble (maxpr1-pointtp* Point , 5 );
int ticketD= OrderSend ( Symbol (), OP_SELLLIMIT , lotS, maxpr1, 3 , slS, tpS, "" , MagicS, 0 , Blue);
if (ticketD==- 1 ) Print ( "ERROR OP_SELL" ); else Print ( "OP_SELL OK" );}

if (x!=maxpr1){x=maxpr1; OrderDelete (ticketD);}
OrderDelete (ticketUP);


double maxpr=- 9999 ; double minpr= 9999 ;

for ( int shift= 0 ; shift<bars; shift++)
{ double e= iHigh ( Symbol (), PERIOD_CURRENT , shift);
if (e>maxpr){maxpr=e;}}

for ( int shiftA= 0 ; shiftA<bars; shiftA++)
{ double r= iLow ( Symbol (), PERIOD_CURRENT , shiftA);
if (r<minpr) {minpr=r;}}

string a;
if (bars== 1 )a= "bar: " ;
else a= IntegerToString (bars, 1 ) + " bar's: " ;
Comment ( "Last " , a, "max " , DoubleToStr (maxpr, 5 ), ", min " , DoubleToStr (minpr, 5 ), "." );
}

int BuyLimitCount(){
int count= 0 ;
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== true ){
if ( OrderMagicNumber ()==MagicB){
if ( OrderType ()== OP_BUYLIMIT )
count++;}}} return (count);}

int BuyCount(){
int count= 0 ;
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== true ){
if ( OrderMagicNumber ()==MagicB){
if ( OrderType ()== OP_BUY )
count++;}}} return (count);}

int SellLimitCount(){
int count= 0 ;
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== true ){
if ( OrderMagicNumber ()==MagicS){
if ( OrderType ()== OP_SELLLIMIT )
count++;}}} return (count);}

int SellCount(){
int count= 0 ;
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--){
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== true ){
if ( OrderMagicNumber ()==MagicS){
if ( OrderType ()== OP_SELL )
count++;}}} return (count);}
 
spoiltboy :

값이 손실되는 조건에 의해 삭제 기능이 트리거되기 때문입니까? 나는 다음과 같이 쓰려고 노력했다.

if (x!=maxpr1){x=maxpr1; 주문삭제(티켓D);}

주문삭제( 티켓업 );

"ticketD"에 대한 다가오는 조건에서 동일한 오류를 기록하고 " ticketUP" 주문은 각 틱 에서 성공적으로 삭제됩니다.

주문의 존재 여부를 확인하는 것이 필요하며, 그러한 티켓이 있는 주문이 있으면 삭제하고, 없으면 아무것도 하지 않습니다. 당신에게 일어나는 일은 주문이 이미 삭제되었으며 계속해서 다시 삭제한다는 것입니다.
 
Vitaly Muzichenko :
주문의 존재 여부를 확인하는 것이 필요하며, 그러한 티켓이 있는 주문이 있으면 삭제하고, 없으면 아무것도 하지 않습니다. 당신에게 일어나는 일은 주문이 이미 삭제되었으며 계속해서 다시 삭제한다는 것입니다.

이 항목에서 ticketUP 티켓이 있는 주문이 먼저 열리고 각 틱 에서 삭제되며 해당 조건이 발생하면 tikcetD 주문은 삭제 오류를 제공합니다. 잡지에서 가져온 것입니다.

아니면 내가 뭔가를 혼동하고 있습니까?

 
spoiltboy :

그러나 둘의 결론은 우연이 아니겠습니까?

if (x!=maxpr1){x=maxpr1; OrderDelete (ticketD);}
OrderDelete (ticketUP); //лишняя?

불필요하지 않다면 삭제 조건은 어디에 있습니까?

그녀는 이 버전의 코드에 있습니다. 제 생각에는 모든 틱 에서 지연을 제거하려고 합니다.

또한 연기 티켓의 번호가 명확하지 않습니다

그러면 오류가 반환됩니다.

 
spoiltboy :

이 항목에서 ticketUP 티켓이 있는 주문이 먼저 열리고 각 틱 에서 삭제되며 해당 조건이 발생하면 tikcetD 주문은 삭제 오류를 제공합니다. 잡지에서 가져온 것입니다.

아니면 내가 뭔가를 혼동하고 있습니까?

좋아요

그러면 질문은 무엇입니까?

 
Renat Akhtyamov :

좋아요

그러면 질문은 무엇입니까?

이것은 다른 주문에 대한 것입니다. 조건별로 하나씩 삭제하고, 조건 없이 다른 하나를 삭제하는 기능입니다.

문제는 제 경우 삭제 기능이 조건 없이 성공적으로 작동하는 이유이고, 조건에 넣으면 조건이 발생했을 때 오류가 발생하는 이유입니다.