MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1890

 
Andrey Sokolov # :

Bir günlük anınız var mı?

hayır. İhtiyacım olanı nasıl uygulayacağımı öğrenmedim - muhtemelen ikinci yinelemeden işe yarayacak ;-)
 
DanilaMactep # :
hayır. İhtiyacım olanı nasıl uygulayacağımı öğrenmedim - muhtemelen ikinci yinelemeden işe yarayacak ;-)

Maxim Kuznetsov size nasıl cevap verdi. Okuyordum?

 

İyi günler, siparişlerin yanlış kapatılmasıyla ilgili sorunu çözmenize yardımcı olmanızı rica ediyorum.

Uzman Danışman, pozitif bir kar elde ederken, siparişler tablosundaki ilk siparişi, son siparişi ve sondan bir önceki siparişi kapatır.

demo hesapta her şey yolundadır; gerçek hayatta sadece minimum ve sondan bir öncekiler kapalıdır. Bu sorunla karşılaştım, sonra tüm sipariş tablosunu kapatmak gerekiyordu ve sorun alıntılardaydı, ardından bayrak kuruldu ve sorun çözüldü. Burada da aynısını yaptım ama sorun gitmedi.

Bayrak:

 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 ());
                    }
                 }
              }
           }
        }
     }
  }

Teşekkürler!!!!

 
EVGENII SHELIPOV demo hesapta her şey yolundadır; gerçek hayatta sadece minimum ve sondan bir öncekiler kapalıdır. Bu sorunla karşılaştım, sonra tüm sipariş tablosunu kapatmak gerekiyordu ve sorun alıntılardaydı, ardından bayrak kuruldu ve sorun çözüldü. Burada da aynısını yaptım ama sorun gitmedi.

Bayrak:

Teşekkürler!!!!

Bayrağınız nerede sıfıra ayarlandı?
 
Tretyakov Rostyslav # :
Bayrağınız nerede sıfıra ayarlandı?
 //-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену и текста
   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" );
        }
     }

buraya yapıştırırsam düzelir

 
EVGENII SHELIPOV # :

buraya yapıştırırsam düzelir

Numara. Böylece tüm siparişler kapatıldığında sıfırlanacaktır.

Tüm siparişleri kapatmanız gerekmediği göz önüne alındığında, biletleri gözden geçirmek ve kapatmak daha iyidir.

 
Tretyakov Rostyslav # :

Numara. Böylece tüm siparişler kapatıldığında sıfırlanacaktır.

Tüm siparişleri kapatmanız gerekmediği göz önüne alındığında, biletleri gözden geçirmek ve kapatmak daha iyidir.

şimdi bir dakika bekle

 
EVGENII SHELIPOV # :

şimdi bir dakika bekle



 //-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену мин и макс ордеров и текста
   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" );
        }
     }

ve bu yüzden

 
Tretyakov Rostyslav # :

Numara. Böylece tüm siparişler kapatıldığında sıfırlanacaktır.

Tüm siparişleri kapatmanız gerekmediği göz önüne alındığında, biletleri gözden geçirmek ve kapatmak daha iyidir.

Ama emirleri kapatma işlevinde biletleri sıralamıyor muyum?

 //+----------------------------------------------------------------------------+
//| Закрытие минимального максимального и предпоследнего ордеров               |
//+----------------------------------------------------------------------------+
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 # :


ve bu yüzden

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

Bu, sipariş yoksa

Neden: