포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 384

 
팍! 죄송합니다!
고유한 주문 번호를 추적하는 방법은 무엇입니까? 그것을 변경하는 방법?
 
Link_x :

내 예에서: 임의 주문 번호 , 거래량 - 5, 종가, 미끄러짐 0, 화살표 없음.
문서 예에서: order_id, 볼륨 1, 종가에 의한 주문 번호 계산, 슬리피지 3에서 화살표는 빨간색입니다.

영리한 팬케이크이지만 한 가지 강조 표시된 사항이 있습니다. Symbol() 을 처방합니다.

그리고 "어떻게?"라는 코드는

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)   //
    {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
       {
     if ( OrderType ()== OP_BUY ) price= Bid ;
     else                     price= Ask ;
     OrderClose ( OrderTicket (), OrderLots (),price, 3 ,CLR_NONE);
       }
    }    
이 같은
 
r772ra :
이 같은

우와! 이제 포지션을 닫지만 즉시 종료됩니다 . 이렇게 해보자:
 if ( AccountProfit () > 50 )
{
for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) 
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
{
if ( OrderType ()== OP_BUY ) price= Bid ;
else                     price= Ask ;
OrderClose ( OrderTicket (), OrderLots (),price, 3 ,CLR_NONE);
}
}   
}

그리고 우리는 $50의 잠재적인 이익으로 모든 포지션을 마감하는 코드를 얻습니다.
매우 감사합니다!
이제 모든 것이 명확해졌습니다!
수업! :)
 
안녕하세요! 똑똑한 사람들을 도와주세요. Profit=10 포인트로 설정했습니다(즉, 두 쌍의 총 수익이 10포인트일 때). 두 개의 미결 거래가 모두 종료되어야 합니다. 그러나 거래는 종료되지 않습니다. 실수는 어디에 있습니까?
 extern double lotAU= 0.01 ;
extern double lotEA= 0.01 ;
extern double Profit= 10 ;
extern string Сomment           = "KVAZ_EURAUD_AUDUSD" ;
extern int Magic                = 1111 ;

int EASell, EABuy, AUSell, AUBuy;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
double prof;
double bidEA = MarketInfo ( "EURAUD" , MODE_BID );
double askEA = MarketInfo ( "EURAUD" , MODE_ASK );
double bidAU = MarketInfo ( "AUDUSD" , MODE_BID );
double askAU = MarketInfo ( "AUDUSD" , MODE_ASK );

string symEA = "EURAUD" ;
string symAU = "AUDUSD" ;

for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
 OrderSelect (i, SELECT_BY_POS );
 prof=prof+ OrderProfit ();
 Print ( "Profit=" +prof);
}
if (prof>=Profit)
{
 for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
 {
   OrderSelect (i, SELECT_BY_POS );
   OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 5 , 0 );
 }
}

double LineEA = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 0 , 1 ); // Первый инструмент
double LineAU = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 1 , 1 ); // Второй инструмент

if (NumberOfPositions( "EURAUD" )== 0 && LineEA > 0.1 && LineAU < - 0.1 )
    {
       EASell = OrderSend (symEA, OP_SELL ,lotEA,bidEA, 3 , 0 , 0 , "KVAZ_EURAUD_AUDUSD" ,Magic, 0 ,Red);
    }
if (NumberOfPositions( "AUDUSD" )== 0 && LineEA > 0.1 && LineAU < - 0.1 )
    {
       AUSell = OrderSend (symAU, OP_SELL ,lotAU,bidAU, 3 , 0 , 0 , "KVAZ_EURAUD_AUDUSD" ,Magic, 0 ,Red);
    }
if (NumberOfPositions( "EURAUD" )== 0 && LineEA < - 0.1 && LineAU > 0.1 )
    {
       EABuy = OrderSend (symEA, OP_BUY ,lotEA,bidEA, 3 , 0 , 0 , "KVAZ_EURAUD_AUDUSD" ,Magic, 0 ,Red);
    }
if (NumberOfPositions( "AUDUSD" )== 0 && LineEA < - 0.1 && LineAU > 0.1 )
    {
       AUBuy = OrderSend (symAU, OP_BUY ,lotAU,bidAU, 3 , 0 , 0 , "KVAZ_EURAUD_AUDUSD" ,Magic, 0 ,Red);
    }
    
   return ( 0 );
  }
//+------------------------------------------------------------------+

int NumberOfPositions( string sy= "" , int op=- 1 , int mn= 1111 ) {       //|  Параметры:                                                                |
                                                                   //|    sy - наименование инструмента   (""   - любой символ,                   |
                                                                   //|                                     NULL - текущий символ)                 |
                                                                   //|    op - операция                   (-1   - любая позиция)                  |
                                                                   //|    mn - MagicNumber                (-1   - любой магик)                    
   int i, k= OrdersTotal (), kp= 0 ;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) kp++;
          }
        }
      }
    }
  }
   return (kp);
}

나는 닫을 때 고문이 단순히 기호와 마술에 의한 명령을 보지 못한다는 것을 지적으로 이해합니다. 그리고 다............

네, 다른 선택지가 있었습니다. 거래는 1건만 성사되었고 10포인트의 이익을 위한 조건은 지켜지지 않았습니다. 한마디로 완전 개소리.

 for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
 OrderSelect (i, SELECT_BY_POS );
 prof=prof+ OrderProfit ();
 Print ( "Profit=" +prof);
}
if (prof>=Profit)
{
 for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
 {
   OrderSelect (i, SELECT_BY_POS );
  {
   if ( OrderSymbol ()!= Symbol ()  || OrderMagicNumber ()!=Magic) continue ;
   OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 5 , 0 );
  }
 }
}
 
안녕하세요! 차트, 현재 막대 및 현재 가격에서 특정 조건에 도달하면 화살표가 나타나고 경고가 한 번 트리거되어 메시지가 표시되도록 만드는 방법을 알려주십시오(코드 예제가 바람직함)? 예를 들어, 아래에서 위로 교차 이동하면 "매수" 메시지와 함께 위쪽 화살표 가 나타나고 "매도" 메시지와 함께 위에서 아래로 화살표가 각각 나타납니다. 미리 감사드립니다.
 
alexey1979621 :
안녕하세요! 똑똑한 사람들을 도와주세요. Profit=10 포인트로 설정했습니다(즉, 두 쌍의 총 수익이 10포인트일 때). 두 개의 미결 거래가 모두 종료되어야 합니다. 그러나 거래는 종료되지 않습니다. 실수는 어디에 있습니까?

나는 닫을 때 고문이 단순히 기호와 마술에 의한 명령을 보지 못한다는 것을 지적으로 이해합니다. 그리고 다............

네, 다른 선택지가 있었습니다. 거래는 1건만 성사되었고 10포인트의 이익을 위한 조건은 지켜지지 않았습니다. 한마디로 완전한 헛소리.


1. 개장한 상품의 호가 또는 호가에서 포지션을 청산합니다.

그리고 OrderClosePrice()에 있는 방식이 아닙니다.

이렇게 쓰다

 if (prof>=Profit)
   {
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) 
      {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
     double AS= MarketInfo ( OrderSymbol (), MODE_ASK );
     double BI= MarketInfo ( OrderSymbol (), MODE_BID );

       if ( OrderType ()== OP_BUY ) price=BI;
       else                     price=AS;

       OrderClose ( OrderTicket (), OrderLots (),price, 3 ,CLR_NONE);
         }
      }   
   }
이 같은
 
중지 가능성이 있으며 그 후에는 플래그를 원래 상태로 재설정해야 합니다. 차트 에서 어드바이저를 제거하면 이 문제가 해결됩니까?
 
r772ra :

1. 포지션이 오픈된 상품의 매수 또는 매도에 의해 청산된 경우

그리고 OrderClosePrice()에 있는 방식이 아닙니다.

이렇게 쓰다

이 같은

하긴 했는데 위의 부엉이와 관련하여 문제가 해결되지 않습니다. 닫을 때 고문은 단순히 기호와 마법으로 명령을 보지 않고 닫을 필요가 있다고 생각합니다.
 
alexey1979621 :
안녕하세요! 똑똑한 사람들을 도와주세요. Profit=10 포인트로 설정했습니다(즉, 두 쌍의 총 수익이 10포인트일 때). 두 개의 미결 거래가 모두 종료되어야 합니다. 그러나 거래는 종료되지 않습니다. 실수는 어디에 있습니까?

나는 닫을 때 고문이 단순히 기호와 마술에 의한 명령을 보지 못한다는 것을 지적으로 이해합니다. 그리고 다............

네, 다른 선택지가 있었습니다. 거래는 1건만 성사되었고 10포인트의 이익을 위한 조건은 지켜지지 않았습니다. 한마디로 완전한 헛소리.

오류 시 오류. 아마도 다음과 같이 작동할 것입니다.

 extern double lotAU= 0.01 ;
extern double lotEA= 0.01 ;
extern double Profit= 10 ;
extern string EXP_Comment           = "KVAZ_EURAUD_AUDUSD" ;
extern int Magic                = 1111 ;

int EASell, EABuy, AUSell, AUBuy;
string gsa_SMB[ 2 ];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  gsa_SMB[ 0 ] = "EURAUD" ;
  gsa_SMB[ 1 ] = "AUDUSD" ;
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
     int     li_N;
     double prof = 0 ., ld_Price = 0 .;

     for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
    {
        OrderSelect (i, SELECT_BY_POS );
        li_N = fGet_NumSymbol ( OrderSymbol (), gsa_SMB);
        if (li_N < 0 ) continue ;
        if ( OrderMagicNumber () != Magic) continue ;
        prof += OrderProfit ();
         Print ( "Profit=" , prof);
    }
     if (prof>=Profit)
    {
         for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
             OrderSelect (i, SELECT_BY_POS );
            li_N = fGet_NumSymbol ( OrderSymbol (), gsa_SMB);
            if (li_N < 0 ) continue ;
            if ( OrderMagicNumber () != Magic) continue ;
            if ( OrderType () == OP_BUY ) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_BID );
            else if ( OrderType () == OP_SELL ) ld_Price = MarketInfo (gsa_SMB[li_N], MODE_ASK );
             OrderClose ( OrderTicket (), OrderLots (), ld_Price, 5 );
        }
    }
     double bidEA = MarketInfo ( "EURAUD" , MODE_BID ),
           askEA = MarketInfo ( "EURAUD" , MODE_ASK ),
           bidAU = MarketInfo ( "AUDUSD" , MODE_BID ),
           askAU = MarketInfo ( "AUDUSD" , MODE_ASK ),
           LineEA = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 0 , 1 ), // Первый инструмент
           LineAU = iCustom ( Symbol (), 0 , "Ind_2 Line+1" , 1 , 1 ); // Второй инструмент

     if (NumberOfPositions (gsa_SMB[ 0 ], -1, Magic) == 0 )
    {
         if (LineEA > 0.1 ) if (LineAU < - 0.1 )
        {EASell = OrderSend (gsa_SMB[ 0 ], OP_SELL , lotEA, bidEA, 3 , 0 , 0 , EXP_Comment, Magic, 0 , Red);}
         if (LineEA < - 0.1 ) if (LineAU > 0.1 )
        {EABuy = OrderSend (gsa_SMB[ 0 ], OP_BUY , lotEA, askEA, 3 , 0 , 0 , EXP_Comment, Magic, 0 , Blue);}
    }
     if (NumberOfPositions (gsa_SMB[ 1 ], -1, Magic) == 0 )
    {
        if (LineEA < - 0.1 ) if (LineAU > 0.1 )
        {AUBuy = OrderSend (gsa_SMB[ 1 ], OP_BUY , lotAU, askAU, 3 , 0 , 0 , EXP_Comment, Magic, 0 , Blue);}
        if (LineEA > 0.1 ) if (LineAU < - 0.1 )
        {AUSell = OrderSend (gsa_SMB[ 1 ], OP_SELL , lotAU, bidAU, 3 , 0 , 0 , EXP_Comment, Magic, 0 , Red);}
    }
     return ( 0 );
}
//+------------------------------------------------------------------+
int fGet_NumSymbol ( string fs_Symbol, string ar_SMB[])
{
     for ( int li_IND = 0 ; li_IND < 2 ; li_IND++)
    { if (fs_Symbol == ar_SMB[li_IND]) return (li_IND);}
    return (- 1 );
}
//+------------------------------------------------------------------+

???

 
alexey1979621 :
하긴 했는데 위의 부엉이와 관련하여 문제가 해결되지 않습니다. 닫을 때 고문은 단순히 기호와 마법으로 명령을 보지 않고 닫을 필요가 있다고 생각합니다.


그는 상징이나 마술사를 보지 않아야하며 모든 것이 당신의 고문에 올바르게 기록되어 있습니다. 로그를 보면 어떤 오류가 발생하는지 확인하십시오.
사유: