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

 
Renat Akhtyamov :
int ticket;//тикет ордера
..........
ticket= OrderSend (.....);//приказ и запоминаем тикет ордера
if (ticket> 0 )//открылась
{
//действия с тикетом
}

더 정확하게는 다음과 같습니다.

if (ticket!=- 1 ) //открылась
{
//действия с тикетом
}

OrderSend - "거래 서버가 주문에 할당한 티켓 번호를 반환하거나 실패하면 -1을 반환합니다. "

테스터에서도 첫 번째 티켓은 0이 아닌 1입니다.

 
Oksana Berenko :

더 정확하게는 다음과 같습니다.

if (ticket!=- 1 ) //открылась
{
//действия с тикетом
}

OrderSend - "거래 서버가 주문에 할당한 티켓 번호를 반환하거나 실패하면 -1을 반환합니다. "

테스터에서도 첫 번째 티켓은 0이 아닌 1입니다.

누락된 Oksana를 만나서 너무 기쁩니다))

예, 티켓은 테스터와 DC 서버에서 1로 시작하지만 DC에서는 절대 1을 잡을 수 없습니다. 귀하의 버전이 제대로 작동하지 않습니다. -1과 불평등을 비교하는 것은 올바르지 않습니다. 실제 계정 이 1234567을 반환한다면?

if (ticket> 0 ) //открылась
{
//действия с тикетом
}


// так верно
 

그래서 테스터에는 티켓이 한 장 이상 있을 수 없습니다. 실생활에서는 더욱 그렇습니다.

0은 1보다 작으면 두 조건이 모두 정확하며 하나는 비교용이고 다른 하나는 예외용입니다.

나는 이것을하는 데 익숙하지만 :

// Открываем ордер
       int ticketbuy = OrderSend (sy, OP_BUY ,ll, MarketInfo (sy, MODE_ASK ),Slippage, 0 , 0 ,Comments,mn, 0 ,BuyColor);
         if (ticketbuy< 0 )
         Print (sy, " OpenPosition. OrderSend Buy fail #" , GetLastError ());
         else
         Print (sy, " OpenPosition. OrderSend Buy successfully" );

그러나 내 것을 고려하면 조건이 모두 정확하고 논리 만 다릅니다)

 
안녕히 주무세요 여러분 새해 복 많이 받으세요 .. 이 코드에 무엇이 문제인지 알려주세요 마을이 닫히면 구매도 닫힙니다.
void CloseOrder( int type)
  {
   bool ret;
   int error= 0 ;
   double price= 0.0 ;
   int total= OrdersTotal ();
   if (!disabled( _Symbol ))
     {
       Print (rezult);
       return ;
     }
   for ( int i=total- 1 ; i>= 0 ; i--)
     {
       if (! OrderSelect (i, SELECT_BY_POS )) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderType ()> 1 ) continue ;
       if ( OrderType ()!=type) continue ;
       int digits=( int ) SymbolInfoInteger ( OrderSymbol (), SYMBOL_DIGITS );
       if ( OrderType ()== OP_BUY )price= NormalizeDouble ( SymbolInfoDouble ( OrderSymbol (), SYMBOL_BID ),digits);
       if ( OrderType ()== OP_SELL )price= NormalizeDouble ( SymbolInfoDouble ( OrderSymbol (), SYMBOL_ASK ),digits);

       if ( NormalizeDouble (NormalizePrice( OrderSymbol (),price),digits)!=price) continue ;
      ret= OrderClose ( OrderTicket (), OrderLots (),price,Slippage, clrLawnGreen );
       if (!ret)
        {
         error= GetLastError ();
         rezult= StringConcatenate ( OrderSymbol (), ": error close order " , OrderTicket (), " " , DoubleToString ( OrderLots (), 2 ), " " ,TypeToStr( OrderType ()), " №- " ,error, " " ,ErrorDescription(error));
         Print (rezult);
        }
       else
        {
         rezult= StringConcatenate ( OrderSymbol (), ": close order " , OrderTicket (), " " , DoubleToString ( OrderLots (), 2 ), " " ,TypeToStr( OrderType ()));
         Print (rezult);
        }

     }
  }
 
Movlat Baghiyev :
안녕히 주무세요 여러분 새해 복 많이 받으세요 .. 이 코드에 무엇이 문제인지 알려주세요 마을이 닫히면 구매도 닫힙니다.

루트에서 논리를 변경하는 것이 좋습니다.

즉, 미결 주문 기록을 유지해야 합니다. 얼마나 많은 판매가 열려 있는지, 얼마나 많은 이야기가 열려 있는지

그런 다음에만 이러한 고려 사항을 기반으로 주문을 관리하십시오 - 열기 및 닫기

 

다가오는 모든 것!

도움을 청합니다 왜 어드바이저가 주문을 많이 여는지 이해가 안가서 여는 조건에 딜레이가 없어야 하고 개통 후 다시 열어요. 주기에 문제가 있는 것 같습니까? 사이클을 이해하지 못한다

for(int i=OrdersTotal()-1;i>=0;i--)

if( 주문선택(i, SELECT_BY_POS ))

if(OrderMagicNumber()==magic) // 우리의 마법이라면

{

if(주문유형()==OP_BUY) sdel_b++; // 구매 카운트

if(주문유형()==OP_SELL) sdel_s++; // 마을 계산

if(주문유형()==OP_BUYSTOP) otl_b++; // 지연된 바이스톱 카운트

if(주문유형()==OP_SELLSTOP) otl_s++; // 보류 중인 판매 중지 계산

}


// 이제 오픈 오더

if (시()==00 && 분()==01 && otl_b==0 && otl_s ==0); // 시간이 되었고 지연이 없는 경우

{

OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // 딜레이를 넣는다

OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //

}

 
wishmast :

다가오는 모든 것!

도움을 청합니다 왜 어드바이저가 주문을 많이 여는지 이해가 안가서 여는 조건에 딜레이가 없어야 하고 개통 후 다시 열어요. 주기에 문제가 있는 것 같습니까? 사이클을 이해하지 못한다

for(int i=OrdersTotal()-1;i>=0;i--)

if(주문선택(i,SELECT_BY_POS))

if(OrderMagicNumber()==magic) // 우리의 마법이라면

{

if(주문유형()==OP_BUY) sdel_b++; // 구매 카운트

if(주문유형()==OP_SELL) sdel_s++; // 마을 계산

if(주문유형()==OP_BUYSTOP) otl_b++; // 지연된 바이스톱 카운트

if(주문유형()==OP_SELLSTOP) otl_s++; // 보류 중인 판매 중지 계산

}


// 이제 오픈 오더

if (시()==00 && 분()==01 && otl_b==0 && otl_s ==0); // 시간이 되었고 지연이 없는 경우

{

OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); // 딜레이를 넣는다

OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //

}

이렇게 시도

   sdel_b= 0 ;
   sdel_s= 0 ;
   otl_b= 0 ;
   otl_s= 0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
        {
         if ( OrderMagicNumber ()==magic) // Если наш Меджик
           {
             if ( OrderType ()== OP_BUY ) sdel_b++; // Считаем баи
             if ( OrderType ()== OP_SELL ) sdel_s++; // Считаем селы
             if ( OrderType ()== OP_BUYSTOP ) otl_b++; // Считаем отложенные байстопы
             if ( OrderType ()== OP_SELLSTOP ) otl_s++; // Считаем отложенные селлстопы
           }
        }
     }

....
 
Sergey Gritsay :

이렇게 시도

   sdel_b= 0 ;
   sdel_s= 0 ;
   otl_b= 0 ;
   otl_s= 0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
        {
         if ( OrderMagicNumber ()==magic) // Если наш Меджик
           {
             if ( OrderType ()== OP_BUY ) sdel_b++; // Считаем баи
             if ( OrderType ()== OP_SELL ) sdel_s++; // Считаем селы
             if ( OrderType ()== OP_BUYSTOP ) otl_b++; // Считаем отложенные байстопы
             if ( OrderType ()== OP_SELLSTOP ) otl_s++; // Считаем отложенные селлстопы
           }
        }
     }

....
여전히 많은 주문을 엽니다.
148 미결 및 보류 중인 주문 수가 브로커가 설정한 한도에 도달했습니다.
 
wishmast :
여전히 많은 주문을 엽니다.
148 미결 및 보류 중인 주문 수가 브로커가 설정한 한도에 도달했습니다.
전체 코드를 게시하면 어디서 실수했는지 이해하기 어렵습니다.
 

인사말. 모두 NG와 함께!

실행 후 Expert Advisor를 최적화하려고 할 때 결과와 최적화 그래프가 비어 있고 로그 항목이 다음과 같을 때 발생합니다.

최적화 중에 2개의 패스가 수행되었으며 2개의 결과가 중요하지 않은 것으로 삭제되었습니다.

" 유전 알고리즘 "을 선택 취소해도 도움이 되지 않습니다. 결과가 테스터에게 중요하지 않은 것처럼 보이지만 거기에 무엇이 있는지 확인하는 방법은 무엇입니까? 그리고 이것은 해당 기간의 고문이 테스트 중에 같은 기간(연도) 동안 배수되지 않고 +/- 20%를 구동한다는 사실에도 불구하고.