MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1639

 
MakarFX # :
어쨌든 무엇이 필요합니까?

나는 이미 그것을 했다. 어쩌면 너무 추하지 않을 수도 있습니다. 정정 해줘. 먼저 마지막 가격을 계산한 다음 끝에서 두 번째 가격을 계산합니다.
그러나 또 다른 문제가 있습니다. 컨트롤은 모두 모서리에 있는 Comment 이므로 사용하지 않으면 항상 DBL_MAX와 같은 값이 멈춥니다. 제거하는 방법, 빨간색으로 강조 표시)

 double MinOpenSell() // ищу ордер по самой низкой цене.
{
   double oldticket, UpPrice = DBL_MAX ;
   
   for ( int cnt= OrdersTotal (); cnt>= 0 ; cnt--)
   {
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            oldticket = OrderOpenPrice();
             if ( oldticket < UpPrice)
            {
               UpPrice = oldticket;
            }
         }
      }
   }
   return (UpPrice);
}
double FindPenultSellPrice() // а тут ищу предпоследний)
  {
   double oldticket, UpPrice = DBL_MAX ;
   
   for ( int cnt= OrdersTotal (); cnt>= 0 ; cnt--)
   {
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            oldticket = OrderOpenPrice();
             if ( oldticket < UpPrice && MinOpenSell()< oldticket)
            {
               UpPrice = oldticket;
            }
         }
      }
   }
   return (UpPrice);
}
 
makssub # :

컨트롤은 모두 모서리에 있는 Comment 이므로 사용하지 않으면 항상 DBL_MAX와 같은 값이 멈춥니다. 제거하는 방법, 빨간색으로 강조 표시)

어딘가에 넣어

 if (price== DBL_MAX ) price= 0 ;

또는 의견에서 직접 할 수 있습니다.

(price== DBL_MAX )? "нет ордера" : DoubleToString (price, _Point )
 
Taras Slobodyanik # :

어딘가에 넣어

또는 의견에서 직접 할 수 있습니다.

첫 번째 옵션이 마음에 듭니다. 올바르게 수행하는 방법에 대한 예를 제공할 수 있습니다.

 
makssub # :

첫 번째 옵션이 마음에 듭니다. 올바르게 수행하는 방법에 대한 예를 제공할 수 있습니다.

 double com_price= 0 ;

if (UpPrice== DBL_MAX ) com_price= 0 ;
else com_price=UpPrice;

Comment (com_price);
 
MakarFX # :

고마워,하지만 여전히 그것을 묶는 방법을 이해하지 못했습니다) 내 작품에 대한 비판이 없을 것입니까?

 double FindPenultSellPrice() // а тут ищу предпоследний)
  {
   double oldticket, UpPrice = DBL_MAX ;
   
   for ( int cnt= OrdersTotal (); cnt>= 0 ; cnt--)
   {
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            oldticket = OrderOpenPrice();
             if ( oldticket < UpPrice && MinOpenSell()< oldticket)
            {
               UpPrice = oldticket;
            }
         }
      }
   }
   return (UpPrice);
}
 
makssub # :

고마워,하지만 여전히 그것을 묶는 방법을 이해하지 못했습니다) 내 작품에 대한 비판이 없을 것입니까?

의견 표시

 
MakarFX # :

의견 표시

전에 사진을 올렸습니다. 그리고 내 주석은 함수 내부에 선언되어 있지 않습니다.

 Comment ( " Количество открытых ордеров: " , CountTrades(), "\n" " Количество открытых ордеров Sell: " , FindLastSell(), "\n" " Количество открытых ордеров Buy: " , FindLastBuy(),
                 "\n" " Общее количество открытых ордеров: " , OrdersTotal (), "\n" " Профит первого ордера Sell: " , FirstProfitSell(),
                 "\n" " Профит первого ордера Buy: " ,FirstProfitBuy(), "\n" " Предпоследний ордер Buy: " ,FindPenultBuyPrice(), "\n" " Предпоследний ордер Sell: " ,FindPenultSellPrice());  
 
makssub # :

전에 사진을 올렸습니다. 그리고 내 주석은 함수 내부에 선언되어 있지 않습니다.

 double com_price= 0 ;
if (FindPenultSellPrice()== DBL_MAX ) com_price= 0 ;
else com_price=FindPenultSellPrice();
Comment ( " Количество открытых ордеров: " , CountTrades(), "\n Количество открытых ордеров Sell: " , FindLastSell(),
       "\n Количество открытых ордеров Buy: " , FindLastBuy(), "\n Общее количество открытых ордеров: " , OrdersTotal (),
       "\n Профит первого ордера Sell: " , FirstProfitSell(), "\n Профит первого ордера Buy: " ,FirstProfitBuy(),
       "\n Предпоследний ордер Buy: " ,FindPenultBuyPrice(), "\n Предпоследний ордер Sell: " ,com_price);  
 

모두 좋은 하루!!!

나는 주문 그리드의 평균 가격에서 그룹 주문의 후행 중지를 위한 Expert Advisor에 대한 코드를 작성 중입니다.

로그에는 오류가 없지만 트롤도 작동하지 않습니다. 여기 코드가 있습니다. 오류가 있는 위치를 알려주세요. 감사해요!!!

 //+----------------------------------------------------------------------------+
//| Модификация групповых ордеров                                              |
//+----------------------------------------------------------------------------+
void ModifyOrders( int otype)
{
     double avg_price; 
    order_lots = 0 ;
    price = 0 ;
   
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
    {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
       {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == otype)
         {
            price += OrderOpenPrice() * OrderLots();
            order_lots += OrderLots() ;
         }
       }
    }
    avg_price = NormalizeDouble (price / order_lots, Digits );
     {
     ObjectDelete ( 0 , "AveragePriceLine" );
     ObjectCreate ( 0 , "AveragePriceLine" , OBJ_HLINE , 0 , 0 , avg_price);
     ObjectSet( "AveragePriceLine" , OBJPROP_COLOR , Magenta);
     }
     if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder* Point , Digits );
     if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder* Point , Digits );
     if ((otype == OP_BUY || otype == OP_SELL) && (Drawdown > DrawdownClosingTakeprofitZero)) 
    tp = NormalizeDouble (avg_price, Digits );
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) 
    {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
       {
           if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == otype)
           {
               if (OrderModify(OrderTicket(), OrderOpenPrice(), 0 , tp, 0 ))
                   Print ( "Ордера успешно модифицированы!" );
                 else Print ( "Ошибка модификации ордеров!" );
                TrailingGroupOrder();
           }
       }
    }
}
//+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
{
    price += OrderOpenPrice() * OrderLots();
    order_lots += OrderLots() ;
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
    {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
       {
       if (OrderType() == OP_BUY && Bid - NormalizeDouble (price / order_lots, Digits ) > TrailingStopGroupOrder)
        {
         if (Bid - NormalizeDouble (price / order_lots, Digits ) > TrailingStopGroupOrder* Point || OrderStopLoss() == 0 )
         {
         if (OrderStopLoss() < Bid - (TrailingStep + TrailingStopGroupOrder )* Point || OrderStopLoss() == 0 )
          {
           if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble (Bid - TrailingStopGroupOrder* Point , Digits ), tp, 0 ))
                     Print ( "Ошибка модификации групповых ордеров на покупку!" );
          }
         }
        }
         if (OrderType() == OP_SELL && NormalizeDouble (price / order_lots, Digits )- Ask > TrailingStopGroupOrder* Point )
         {
         if ( NormalizeDouble (price / order_lots, Digits )- Ask > TrailingStopGroupOrder* Point || OrderStopLoss() == 0 )
           {
             if (OrderStopLoss() > Ask + (TrailingStep + TrailingStopGroupOrder)* Point || OrderStopLoss() == 0 )
              {
               if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble (Ask + TrailingStopGroupOrder* Point , Digits ), tp, 0 ))
                     Print ( "Ошибка модификации групповых ордеров на продажу!" );
              }
           }
         }
      } 
    }
}
 
안녕하세요! Expert Advisor 설정 창에서 언어를 변경하는 mql4 코드는 어디에서 볼 수 있습니까?