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