MQL 4 프로그래머를 위한 질문과 답변 - 페이지 6

 
복잡한 코드, 더 간단한 것이 있습니까?
 

1. 배열 또는 2개의 변수에 주문 티켓을 저장 합니다.

2. OrderSelect를 사용하여 하나씩 선택합니다(여기서는 배열이 더 편리합니다).

3. 현재 순간의 유형을 확인하십시오.

4. OP_BUY를 입력하면 || OP_SELL -> 두 번째 티켓에 대한 OrderDelete.

 

간단한 예를 적어주세요. 많이 알아 냈지만 선택 주문은 교통 체증 일뿐입니다!

 

다음은 오류가 있는 코드입니다. 1개의 딜레이가 발동되면 2번째 딜레이를 제거하지 않는다.......


만약 (MA1<MA2)
{
if(n==0)
{
//================================================== ==================================================== ================//

tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,slb,tpb,NULL,MagicNumber,0, CLR_NONE );
if(ticket<0) Alert("오류 # - ",GetLastError()," 기기에서 ", Symbol()); //오류를 쓴다 //
//================================================== ==================================================== ==============//
t2 = OrderSend(Symbol(), OP_BUYSTOP, lot*Overlot, OtkrBS, 슬립, 0, tpb, 0, MagicNumber, 만료);
//================================================== ==================================================== ==============//
t1 = OrderSend(Symbol(), OP_SELLSTOP, lot*Overlot+1,OtkrSS,Slip,0,slb, 0, MagicNumber,만료);
//================================================== ==================================================== ==============//

//================================================== ==================================================== ================//
}
//================================================== ==================================================== ================//
또 다른
//================================================== ==================================================== ===============//
만약 (MA1>MA2)
{
tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE);
if(ticket<0) Alert("오류 # - ",GetLastError()," 기기에서 ", Symbol()); //오류를 쓴다 //
//================================================== ==================================================== ==============//
t2 = OrderSend(Symbol(), OP_BUYSTOP, lot*Overlot+1,OtkrSS1,Slip,0,sls,0, MagicNumber,만료);
//================================================== ==================================================== ==============//
t1 = OrderSend(Symbol(), OP_SELLSTOP, lot*Overlot, OtkrBS1, 슬립, 0, tps, 0, MagicNumber, 만료);
//================================================== ==================================================== ==============//
}
//================================================== ==================================================== ================//
// SELLSTOP이 작동하면 BUYSTOP을 제거합니다.
if(주문선택(t1, SELECT_BY_TICKET))
{
if(주문 유형()==OP_SELL)
{
주문 삭제(t2);
}
}
//----
// BUYSTOP이 작동하면 SELLSTOP을 제거합니다.
if(주문선택(t2, SELECT_BY_TICKET))
{
if(주문유형()==OP_BUY)
{
주문 삭제(t1);
}
}

 

용어에 대해 혼란스럽습니다. {} 대괄호가 있는 것 같습니다. 이 대괄호가 있어야 할 위치가 아닙니다.

 if ( n == 0 )
{
         if (MA1<MA2) 
        {
                 //==================================================================================================================//

                tiket= OrderSend ( Symbol (),OP_BUY,Lots, NormalizeDouble (Ask, Digits ),Slip,slb,tpb, NULL ,MagicNumber, 0 , CLR_NONE ); 
                 if (tiket< 0 ) Alert ( "Ошибка № - " , GetLastError (), " На инструменте " , Symbol ()); //пишет ошибку// 
                 //================================================================================================================//
                t2 = OrderSend ( Symbol (), OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip, 0 ,tpb, 0 , MagicNumber,expiration);
                 //================================================================================================================//
                t1 = OrderSend ( Symbol (), OP_SELLSTOP, Lots*Overlot+ 1 ,OtkrSS,Slip, 0 ,slb, 0 , MagicNumber,expiration);
                 //================================================================================================================//

                 //==================================================================================================================//
        }
         //==================================================================================================================// 
         else 
         //=================================================================================================================// 
         if (MA1>MA2) 
        {
                tiket= OrderSend ( Symbol (),OP_SELL,Lots, NormalizeDouble (Bid, Digits ),Slip,sls,tps, NULL ,MagicNumber, 0 , CLR_NONE );
                 if (tiket< 0 ) Alert ( "Ошибка № - " , GetLastError (), " На инструменте " , Symbol ()); //пишет ошибку//
                 //================================================================================================================//
                t2 = OrderSend ( Symbol (), OP_BUYSTOP, Lots*Overlot+ 1 ,OtkrSS1,Slip, 0 ,sls, 0 , MagicNumber,expiration);
                 //================================================================================================================//
                t1 = OrderSend ( Symbol (), OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip, 0 ,tps, 0 , MagicNumber,expiration);
         //================================================================================================================//
        }
}
//==================================================================================================================//
// если сработал SELLSTOP удаляем BUYSTOP
if ( OrderSelect (t1, SELECT_BY_TICKET))
{
         if (OrderType()==OP_SELL)
        {
                OrderDelete(t2);
        }
}
//----
// если сработал BUYSTOP удаляем SELLSTOP
if ( OrderSelect (t2, SELECT_BY_TICKET))
{
         if (OrderType()==OP_BUY)
        {
                OrderDelete(t1);
        }
}

또는 같은 것.

 
아니 불행히도 도움이되지 않았습니다 ...
 

놀랍게도 비슷한 전문가가 있습니다. 나는 그와 같은 방식으로 프린세페에서 모든 것을 명확하게 확인했습니다. 작동하지만 이것은 작동하지 않습니다 ...

차이점은 다른 EA에는 구매 항목에 대해 하나의 포즈만 있고 두 가지가 보류 중이라는 것입니다.

 

전역 변수 의 티켓? (외부 시작 및 기타 기능)

그렇지 않은 경우 매 틱마다 재설정됩니다.

Expert Advisor의 각 단계에서 더 많은 Print()-s를 삽입하면 충돌이 발생한 위치와 수행하지 않는 작업을 이해할 수 있습니다.

 

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA! 이겼다 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!하나

주석!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
hasayama :

전역 변수의 티켓? (외부 시작 및 기타 기능)

그렇지 않은 경우 매 틱마다 재설정됩니다.

Expert Advisor의 각 단계에서 더 많은 Print()-s를 삽입하면 충돌이 발생한 위치와 수행하지 않는 작업을 이해할 수 있습니다.

미친듯이 감사합니다 처음에 티켓이 2배로 공지되고 주문이 1.0과 2.0으로 나열되지 않아서 삭제 기능이 부동소수점으로 뭔가를 기다리고 있었던 순간을 놓쳤습니다