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

 
Andrey Sokolov # :

하루의 기억이 있습니까?

아니요. 나는 필요한 것을 구현하는 방법을 배우지 않았습니다. 아마도 두 번째 반복에서 작동할 것입니다 ;-)
 
DanilaMactep # :
아니요. 나는 필요한 것을 구현하는 방법을 배우지 않았습니다. 아마도 두 번째 반복에서 작동할 것입니다 ;-)

Maxim Kuznetsov가 방법에 대해 답변했습니다. 읽고 있었다?

 

좋은 하루, 잘못된 주문 마감 문제를 해결하는 데 도움을 요청합니다.

Expert Advisor는 양의 이익을 낼 때 주문 그리드의 첫 번째 주문, 마지막 주문 및 끝에서 두 번째 주문을 마감합니다.

데모 계정에서는 모든 것이 정상이지만 실제 생활에서는 최소 및 끝에서 두 번째 것만 닫힙니다. 나는이 문제에 직면했고 전체 주문 그리드를 닫을 필요가 있었고 문제는 requots에 있었고 플래그가 설정되고 문제가 해결되었습니다. 여기서도 똑같이 했지만 문제는 사라지지 않았습니다.

깃발:

 int flag_close3= 0 ;
 //-------------------------------------------------------------------+  Команда на закрытие мин макс и предпоследнего ордеров в сетке профит = 0
   if (CalculiteProfitMinMaxPenultimateOrders() >= 0 && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0 )
     {
       flag_close3= 1 ;
     }
//-------------------------------------------------------------------+  Флаг на закрытие  ордеров
   if (flag_close3== 1 )
      ClosseMinMaxPenultimateOrdersZero();
 //+----------------------------------------------------------------------------+
//| Закрытие минимального максимального и предпоследнего ордеров профит = 0    |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxPenultimateOrdersZero()
  {
   int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
           {
             if (OrderType() == OP_BUY)
              {
               if (CalculiteProfitMinMaxPenultimateOrders() >= 0   && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0 )
                 {
                   if (OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Bid, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
                    {
                     SendNotification ( "Закрылся минимальный максимальный и предпоследний ордера на покупку: " + Symbol () + ", Баланс: " + DoubleToString ( NormalizeDouble (AccountBalance(), 2 ))
                                      + ", Свободно денежных средств: " + DoubleToString ( NormalizeDouble (AccountFreeMargin(), 2 )));
                     Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" );
                    }
                   else
                    {
                     Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
                    }
                 }
              }

             if (OrderType() == OP_SELL)
              {
               if (CalculiteProfitMinMaxPenultimateOrders() >= 0 && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0 )
                 {
                   if (OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Ask, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
                    {
                     SendNotification ( "Закрылся минимальный максимальный и предпоследний ордера на продажу: " + Symbol () + ", Баланс: " + DoubleToString ( NormalizeDouble (AccountBalance(), 2 ))
                                      + ", Свободно денежных средств: " + DoubleToString ( NormalizeDouble (AccountFreeMargin(), 2 )));
                     Print ( "Максимальный и минимальный ордера на продажу успешно закрыты!" );
                    }
                   else
                    {
                     Print ( "Не удалось закрыть максимальный и минимальный ордера на продажу!" , GetLastError ());
                    }
                 }
              }
           }
        }
     }
  }

감사해요!!!!

 
EVGENII SHELIPOV 데모 계정에서는 모든 것이 정상이지만 실제 생활에서는 최소 및 끝에서 두 번째 것만 닫힙니다. 나는이 문제에 직면했고 전체 주문 그리드를 닫을 필요가 있었고 문제는 requots에 있었고 플래그가 설정되고 문제가 해결되었습니다. 여기서도 똑같이 했지만 문제는 사라지지 않았습니다.

깃발:

감사해요!!!!

당신의 깃발은 어디에 0으로 설정되어 있습니까?
 
Tretyakov Rostyslav # :
당신의 깃발은 어디에 0으로 설정되어 있습니까?
 //-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену и текста
   if (CountTrade() == 0 )
     {
      flag_close= 0 ;
       ObjectsDeleteAll ( 0 , "AveragePriceLine" );
       if ( ObjectFind ( 0 , "signal4" )== 0 && CountTrade( 0 ) < 1 ) //для бай
        {
         ObjectDelete ( 0 , "signal4" );
        }
       if ( ObjectFind ( 0 , "signal3" )== 0 && CountTrade( 1 ) < 1 ) //для селл
        {
         ObjectDelete ( 0 , "signal3" );
        }
     }

여기에 붙여 넣기하면 정확할 것입니다.

 
EVGENII SHELIPOV # :

여기에 붙여 넣기하면 정확할 것입니다.

아니요. 따라서 모든 주문이 마감되면 재설정됩니다.

모든 주문을 마감할 필요가 없다는 점을 감안할 때 티켓을 살펴보고 마감하는 것이 좋습니다.

 
Tretyakov Rostyslav # :

아니요. 따라서 모든 주문이 마감되면 재설정됩니다.

모든 주문을 마감할 필요가 없다는 점을 감안할 때 티켓을 살펴보고 마감하는 것이 좋습니다.

이제 잠깐만

 
EVGENII SHELIPOV # :

이제 잠깐만



 //-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену мин и макс ордеров и текста
   if (CountTrade() == 0 || Drawdown < DrawdownClosingMinMaxOrdersZero)
     {
       flag_close2= 0 ;
       flag_close3= 0 ;
       ObjectsDeleteAll ( 0 , "AveragePriceLineMinMaxOrders" );
       if ( ObjectFind ( 0 , "signal41" )== 0 && (CountTrade( 0 )< 1 || Drawdown < DrawdownClosingMinMaxOrdersZero)) //для бай
        {
         ObjectDelete ( 0 , "signal41" );
        }
       if ( ObjectFind ( 0 , "signal42" )== 0 && (CountTrade( 1 )< 1 || Drawdown < DrawdownClosingMinMaxOrdersZero)) //для селл
        {
         ObjectDelete ( 0 , "signal42" );
        }
     }

그래서

 
Tretyakov Rostyslav # :

아니요. 따라서 모든 주문이 마감되면 재설정됩니다.

모든 주문을 마감할 필요가 없다는 점을 감안할 때 티켓을 살펴보고 마감하는 것이 좋습니다.

하지만 주문을 마감하는 기능으로 티켓을 분류하지 않습니까?

 //+----------------------------------------------------------------------------+
//| Закрытие минимального максимального и предпоследнего ордеров               |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxPenultimateOrders()
  {
   int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
           {
             if (OrderType() == OP_BUY)
              {
               if (CalculiteProfitMinMaxPenultimateOrders() >= 0 && OrderGroupCloseSignal()== 0 &&
                  Drawdown >= DrawdownClosingMinMaxOrders && FindPenultimateProfit() > 0 )
                 {
                   if (OrderClose( GetTicketPenultimateOrder() , FindPenultimateLots(), Bid, slipp) && OrderClose( GetTicketMinOrder() , GetMinLotOrder(), Bid, slipp) &&
                     OrderClose( GetTicketMaxOrder() , FindLastLots(), Bid, slipp))
                    {
                     SendNotification ( "Закрылся минимальный максимальный и предпоследний ордера на покупку: " + Symbol () + ", Баланс: " + DoubleToString ( NormalizeDouble (AccountBalance(), 2 ))
                                      + ", Свободно денежных средств: " + DoubleToString ( NormalizeDouble (AccountFreeMargin(), 2 )));
                     Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" );
                    }
                   else
                    {
                     Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
                    }
                 }
              }

             if (OrderType() == OP_SELL)
              {
               if (CalculiteProfitMinMaxPenultimateOrders() >= 0 && OrderGroupCloseSignal()== 1 &&
                  Drawdown >= DrawdownClosingMinMaxOrders && FindPenultimateProfit() > 0 )
                 {
                   if (OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Ask, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
                    {
                     SendNotification ( "Закрылся минимальный максимальный и предпоследний ордера на продажу: " + Symbol () + ", Баланс" + DoubleToString ( NormalizeDouble (AccountBalance(), 2 ))
                                      + ", Свободно денежных средств" + DoubleToString ( NormalizeDouble (AccountFreeMargin(), 2 )));
                     Print ( "Максимальный и минимальный ордера на продажу успешно закрыты!" );
                    }
                   else
                    {
                     Print ( "Не удалось закрыть максимальный и минимальный ордера на продажу!" , GetLastError ());
                    }
                 }
              }
           }
        }
     }
  }
 
EVGENII SHELIPOV # :


그래서

 //-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену мин и макс ордеров и текста
   if ( CountTrade() == 0 || Drawdown < DrawdownClosingMinMaxOrdersZero)
     {
       flag_close2= 0 ;
       flag_close3= 0 ;

주문이 없는 경우를 의미합니다.

사유: