초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 518

 
Sergey Gritsay :

다음은 클래스를 사용하는 또 다른 옵션입니다.

검사 결과

정말 감사합니다, 세르게이! 내가 올바르게 이해했다면 :
첫 번째 경우 고정된 시간 프레임이 있는 고유한 기호에 대해 각각 정적 변수의 배열이 생성됩니다. 이 기호에는 다른 기간을 사용할 수 없습니다.
두 번째 - 각 기호+시간 프레임 조합에 대한 클래스입니다.
 
MikeZv :
정말 감사합니다, 세르게이! 내가 올바르게 이해했다면 :
첫 번째 경우 고정된 시간 프레임이 있는 고유한 기호에 대해 각각 정적 변수의 배열이 생성됩니다. 이 기호에는 다른 기간을 사용할 수 없습니다.
두 번째 - 각 기호+시간 프레임 조합에 대한 클래스입니다.
네 맞습니다만 조금만 생각해보면 어레이 버전에서 1차원 배열을 2차원 배열로 바꿀 수 있습니다.
 
질문입니다. 열고 닫는 조건 없이 주문을 열고 확인하고 닫는 템플릿 코드를 어디선가 본 사람이 있습니까? 조건은 제가 직접 작성해 보려고 하는데 주문 마감, 착오 오류... 특히 주문 마감 조회와 조회가 잘 안되네요.
 
Vitaliy Medvedev :
질문입니다. 열고 닫는 조건 없이 주문을 열고 확인하고 닫는 템플릿 코드를 어디선가 본 사람이 있습니까? 조건은 제가 직접 작성해 보려고 하는데 주문 마감, 착오 오류... 특히 주문 마감 조회와 조회 가 잘 안되네요.

잘 되지 않는 것은 당연합니다. 결국, 마감 조건이 없으면 그러한 주문의 검색 및 확인은 다음과 같은 정신에 있어야합니다. 무언가를 찾고 무엇을 모르고 닫습니다.

먼저 마감할 주문을 선택하기 위한 조건을 결정하면 파악하기가 더 쉬울 것입니다. 결국 오해가 있으면 알려진 조건을 준수하는지 확인하는 것만 남아 있습니다.

 
Yury Reshetov :

잘 되지 않는 것은 당연합니다. 결국, 마감 조건이 없으면 그러한 주문의 검색 및 확인은 다음과 같은 정신에 있어야합니다. 무언가를 찾고 무엇을 모르고 닫습니다.

먼저 마감할 주문을 선택하기 위한 조건을 결정하면 파악하기가 더 쉬울 것입니다. 결국 오해가 있으면 알려진 조건을 준수하는지 확인하는 것만 남아 있습니다.

이것은 모두 분명합니다. 조건을 결정했지만 조건에 따라 주문 을 여는 것 (개방은 여전히 \u200b\u200b넌센스, 개방, 반으로 슬픔으로 밝혀졌습니다 ...),

그리고 더욱이 정확한 주문 마감... 드디어, BYADA!

 
Vitaliy Medvedev :

이것은 모두 분명합니다. 조건을 결정했지만 조건에 따라 주문 을 여는 것 자체가 (개방은 여전히 넌센스, 개방, 반으로 슬픔으로 밝혀졌습니다 ...),

그리고 더욱이 정확한 주문 마감... 드디어, BYADA!

어떤 주문이 마감되도록 선택되었는지 알고 나면 해당 티켓 번호로 마감합니다.
 
Vitaliy Medvedev :

이것은 모두 분명합니다. 조건을 결정했지만 조건에 따라 주문 을 여는 것 (개방은 여전히 \u200b\u200b넌센스, 개방, 반으로 슬픔으로 밝혀졌습니다 ...),

그리고 더욱이 정확한 주문 마감... 드디어, BYADA!

내 마음에서 찢는 것처럼 잡아

 int Total_orders( int type)
  {
   int n= 0 ;
   int total= OrdersTotal ();

   for ( int i= 0 ; i<total; i++)
     {
       if (! OrderSelect (i, SELECT_BY_POS )) continue ;
       if ( OrderType ()!=type) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
      n++;
     }
   return (n);
  }
//+------------------------------------------------------------------+
void OrderOpen( int type, double sl)
  {
   double price= 0.0 ;
   double lot;

   if (error> 1 ) return ;
   if (type== WRONG_VALUE ) return ;

   if (Risk!= 0.0 )lot=LotNormalize(LotVolume(Risk,sl));
   else lot=LotNormalize(Lot);

   do
     {
       if (type== OP_BUY )
        {
         RefreshRates ();
         price= NormalizeDouble ( Ask , _Digits );
         if ( AccountFreeMarginCheck ( _Symbol ,type,lot)<= 0 ) return ;
        }
       if (type== OP_SELL )
        {
         RefreshRates ();
         price= NormalizeDouble ( Bid , _Digits );
         if ( AccountFreeMarginCheck ( _Symbol ,type,lot)<= 0 ) return ;
        }

       int Ticket= OrderSend ( _Symbol ,type,lot,price, 10000 , 0 , 0 ,CommentOrder,Magic);
       if (Ticket> 0 )
        {
         error=Fun_Error( _Symbol , GetLastError ());
         Alert ( __FUNCTION__ , ": open order " ,StrToType(type), " " , _Symbol , " :" ,Ticket);
        }
       else error=Fun_Error( _Symbol , GetLastError ());
     }
   while (error== 1 && ! IsStopped ());

  }
//+------------------------------------------------------------------+
void Order_Close( int type)
  {
   double price= 0.0 ;
   int total= OrdersTotal ();
   if (error> 1 ) return ;

   for ( int i=total- 1 ; i>= 0 ; i--)
     {
       if (! OrderSelect (i, SELECT_BY_POS )) continue ;
       if ( OrderType ()!=type) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       do
        {
         if ( OrderType ()== OP_BUY )
           {
             RefreshRates ();
            price= NormalizeDouble ( Bid , _Digits );
           }
         if ( OrderType ()== OP_SELL )
           {
             RefreshRates ();
            price= NormalizeDouble ( Ask , _Digits );
           }
         int res= OrderClose ( OrderTicket (), OrderLots (),price, 10000 );
         if (res)
           {
             Alert ( __FUNCTION__ , ": close order " ,StrToType( OrderType ()), " " , OrderSymbol (), " :" , OrderTicket ());
            error=Fun_Error( _Symbol , GetLastError ());
           }
         else error=Fun_Error( _Symbol , GetLastError ());
        }
       while (error== 1 && ! IsStopped ());
     }
  }
//+------------------------------------------------------------------+
void ModifySL( int Stop_Loss)
  {
   if (Stop_Loss<= 0 ) return ;
   double sl= 0.0 ;
   bool res;

   int total= OrdersTotal ();

   for ( int i= 0 ; i<total; i++)
     {
       if (! OrderSelect (i, SELECT_BY_POS )) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       if ( OrderStopLoss ()!= 0 ) continue ;
       if ( OrderType ()== OP_BUY )  sl= NormalizeDouble ( OrderOpenPrice ()-(New_Stop(Stop_Loss)* _Point ), _Digits );
       if ( OrderType ()== OP_SELL ) sl= NormalizeDouble ( OrderOpenPrice ()+(New_Stop(Stop_Loss)* _Point ), _Digits );
      res= OrderModify ( OrderTicket (), OrderOpenPrice (),sl, OrderTakeProfit (), 0 );
       if (!res) Print ( __FUNCTION__ , ": Error modifying StopLoss order " ,StrToType( OrderType ()), " № - " , GetLastError (), " " , OrderSymbol (), " " , OrderTicket ());
     }
  }
//+------------------------------------------------------------------+
void ModifyTP( int Take_Profit)
  {
   if (Take_Profit<= 0 ) return ;
   double tp= 0.0 ;
   bool res;

   int total= OrdersTotal ();

   for ( int i= 0 ; i<total; i++)
     {
       if (! OrderSelect (i, SELECT_BY_POS )) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       if ( OrderTakeProfit ()!= 0 ) continue ;
       if ( OrderType ()== OP_BUY ) tp= NormalizeDouble ( OrderOpenPrice ()+(New_Stop(Take_Profit)* _Point ), _Digits );
       if ( OrderType ()== OP_SELL ) tp= NormalizeDouble ( OrderOpenPrice () -(New_Stop(Take_Profit)* _Point ), _Digits );
      res= OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss (),tp, 0 );
       if (!res) Print ( __FUNCTION__ , ": Error modifying TakeProfit order " ,StrToType( OrderType ()), " № - " , GetLastError (), " " , OrderSymbol (), " " , OrderTicket ());
     }
  }
//+------------------------------------------------------------------+
double LotVolume( double procent, double sl)
  {
   double lot= 0.0 ;
   double tv= MarketInfo ( _Symbol , MODE_TICKVALUE );
   double minlot= MarketInfo ( _Symbol , MODE_MINLOT );
   double maxlot= MarketInfo ( _Symbol , MODE_MAXLOT );

   if (sl!= 0 && tv!= 0 ) lot=( AccountFreeMargin ()*procent)/(sl*tv* 100.0 );

   if (lot < minlot)lot = minlot;
   if (lot > maxlot)lot = maxlot;
   return (lot);
  }
//+------------------------------------------------------------------+
double LotNormalize( double lot)
  {
   double minlot= MarketInfo ( _Symbol , MODE_MINLOT );
   double maxlot= MarketInfo ( _Symbol , MODE_MAXLOT );

   if (lot < minlot)lot = minlot;
   if (lot > maxlot)lot = maxlot;

   if (minlot== 0.001 ) return ( NormalizeDouble (lot, 3 ));
   if (minlot== 0.01 )   return ( NormalizeDouble (lot, 2 ));
   if (minlot== 0.1 )   return ( NormalizeDouble (lot, 1 ));

   return ( NormalizeDouble (lot, 0 ));
  }
//+------------------------------------------------------------------+
string StrToType( int type)
  {
   if (type== OP_BUY ) return ( "Buy" );
   if (type== OP_SELL ) return ( "Sell" );
   return ( NULL );
  }
//+------------------------------------------------------------------+
int New_Stop( int Parametr)
  {
   int Min_Dist=( int ) MarketInfo ( _Symbol , MODE_STOPLEVEL );
   if (Parametr<Min_Dist)
     {
      Parametr=Min_Dist* 2 +( int ) MarketInfo ( _Symbol , MODE_SPREAD );
       Alert ( _Symbol , " Увеличина дистанция стоп-приказа." );
     }
   return (Parametr);
  }
//+------------------------------------------------------------------+
int Fun_Error( string symbol, int Error)
  {
   switch (Error)
     {
       case 0 : return ( 0 );
       case 1 : Alert (symbol, " " ,Error, ":No error returned, but the result is unknown" ); return ( 2 );
       case 2 : Alert (symbol, " " ,Error, ":Common error" ); return ( 2 );
       case 3 : Alert (symbol, " " ,Error, ":Invalid trade parameters" ); return ( 2 );
       case 4 : Alert (symbol, " " ,Error, ":Trade server is busy" ); Sleep ( 3000 ); return ( 1 );
       case 5 : Alert (symbol, " " ,Error, ":Old version of the client terminal" ); return ( 2 );
       case 6 : Alert (symbol, " " ,Error, ":No connection with trade server" ); Sleep ( 3000 ); return ( 1 );
       case 7 : Alert (symbol, " " ,Error, ":Not enough rights" ); return ( 2 );
       case 8 : Alert (symbol, " " ,Error, ":Too frequent requests" ); return ( 2 );
       case 9 : Alert (symbol, " " ,Error, ":Malfunctional trade operation" ); return ( 2 );
       case 64 : Alert (symbol, " " ,Error, ":Account disabled" ); return ( 2 );
       case 65 : Alert (symbol, " " ,Error, ":Invalid account" ); return ( 2 );
       case 128 : Alert (symbol, " " ,Error, ":Trade timeout" ); return ( 1 );
       case 129 : Alert (symbol, " " ,Error, ":Invalid price" ); return ( 2 );
       case 130 : Alert (symbol, " " ,Error, ":Invalid stops" ); return ( 2 );
       case 131 : Alert (symbol, " " ,Error, ":Invalid trade volume" ); return ( 2 );
       case 132 : Alert (symbol, " " ,Error, ":Market is closed" ); Sleep ( 10000 ); return ( 1 );
       case 133 : Alert (symbol, " " ,Error, ":Trade is disabled" ); return ( 2 );
       case 134 : Alert (symbol, " " ,Error, ":Not enough money" ); return ( 2 );
       case 135 : Alert (symbol, " " ,Error, ":Price changed" ); return ( 1 );
       case 136 : Alert (symbol, " " ,Error, ":Off quotes" ); Sleep ( 3000 ); return ( 1 );
       case 137 : Alert (symbol, " " ,Error, ":Broker is busy" ); Sleep ( 3000 ); return ( 1 );
       case 138 : Alert (symbol, " " ,Error, ":Requote" ); return ( 1 );
       case 139 : Alert (symbol, " " ,Error, ":Order is locked" ); Sleep ( 10000 ); return ( 1 );
       case 140 : Alert (symbol, " " ,Error, ":Buy orders only allowed" ); return ( 2 );
       case 141 : Alert (symbol, " " ,Error, ":Too many requests" ); return ( 2 );
       case 145 : Alert (symbol, " " ,Error, ":Modification denied because order is too close to market" ); Sleep ( 10000 ); return ( 1 );
       case 146 : Alert (symbol, " " ,Error, ":Trade context is busy" ); Sleep ( 3000 ); return ( 1 );
       case 147 : Alert (symbol, " " ,Error, ":Expirations are denied by broker" ); return ( 2 );
       case 148 : Alert (symbol, " " ,Error, ":The amount of open and pending orders has reached the limit set by the broker" ); return ( 2 );
       case 149 : Alert (symbol, " " ,Error, ":An attempt to open an order opposite to the existing one when hedging is disabled" ); return ( 2 );
       case 150 : Alert (symbol, " " ,Error, ":An attempt to close an order contravening the FIFO rule" ); return ( 2 );
       default : Alert (symbol, ":Error - № " ,Error); return ( 2 );
     }
   return ( 0 );
  }
 
Sergey Gritsay :

내 마음에서 찢는 것처럼 잡아

오 ... 그리고 젠장! 나야.. 별로 안했어..! Mdya ... 이제 아무 것도 제대로 작동하지 않는 이유를 이해합니다.

당신에게 거대한 인간, 감사합니다!


 
Sergey Gritsay :

내 마음에서 찢는 것처럼 잡아

왜 이러는지 알 수 있을까요?

정수 합계 = OrdersTotal ();

 
Vasyl Nosal :

왜 이러는지 알 수 있을까요?

정수 합계 = OrdersTotal ();

루프를 실행하는 동안 OrdersTotal ()의 값이 발생하기 때문입니다. 변경될 수 있으며 순서를 건너뛸 수 있습니다. 그렇지 않으면 주기의 본문에 버그가 있습니다.
사유: