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

 
EVGENII SHELIPOV # :

hiçbirşey değişmedi

Herşeyi değiştir...

 //+----------------------------------------------------------------------------+
void ClosseMinMaxOrders()
  {
   int slipp = MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   int minTicket=GetOrderTicket( 0 );
   int maxTicket=GetOrderTicket( 1 );
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderClose(maxTicket, OrderLots(), Bid, slipp)&&OrderClose(minTicket, OrderLots(), Bid, slipp))
             Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" );
         else
             Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
        }
     }
  }
//+----------------------------------------------------------------------------+
//| Калькуляция профита максимального и минимального ордера в сетке            |
//+----------------------------------------------------------------------------+
double CalculiteProfit()
  {
   double minProfit = 0 , maxProfit = 0 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
           {
             if (OrderTicket() == GetOrderTicket( 0 ))
               minProfit = OrderProfit();
             if (OrderTicket() == GetOrderTicket( 1 ))
               maxProfit = OrderProfit();
           }
        }
     }
   return (minProfit+maxProfit);
  }
//+----------------------------------------------------------------------------+
//| Номер тикета                                                               |
//| 0-минимального ордера в сетке                                              |
//| 1-максимального ордера в сетке                                             |
//+----------------------------------------------------------------------------+
int GetOrderTicket( int tick=- 1 )
   {
   int min_ticket = INT_MAX ;
   int max_ticket = 0 ;
   int result=- 1 ;
      {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--) 
         {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
            {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) 
               {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                  {
                   if (OrderTicket() < min_ticket)
                     min_ticket = OrderTicket();
                  if (OrderTicket() > max_ticket) 
                     max_ticket = OrderTicket();
                  }
               }
            }
         }
      }
   if (tick== 0 ) {result=min_ticket;} else
   if (tick== 1 ) {result=max_ticket;} else {result=- 1 ;}
   return (result);
   }
//+----------------------------------------------------------------------------+
 
EVGENII SHELIPOV # :

hiçbirşey değişmedi

Ya da öyle...

 //--- global parameters
bool closeAll= false ;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (CalculiteProfit() > ProfitMinMaxOrders && Drawdown > DrawdownClosingMinMaxOrders)
      closeAll= true ;
   ClosseMinMaxOrders()
  }
//+----------------------------------------------------------------------------+
void ClosseMinMaxOrders()
  {
   if (closeAll== true )
     {
       int slipp = MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
       int minTicket=GetOrderTicket( 0 );
       int maxTicket=GetOrderTicket( 1 );
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderClose(maxTicket, OrderLots(), Bid, slipp)&&OrderClose(minTicket, OrderLots(), Bid, slipp))
               Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" );
             else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
           }
        }
      closeAll= false ;
     }
  }
//+----------------------------------------------------------------------------+
//| Калькуляция профита максимального и минимального ордера в сетке            |
//+----------------------------------------------------------------------------+
double CalculiteProfit()
  {
   double minProfit = 0 , maxProfit = 0 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
           {
             if (OrderTicket() == GetOrderTicket( 0 ))
               minProfit = OrderProfit();
             if (OrderTicket() == GetOrderTicket( 1 ))
               maxProfit = OrderProfit();
           }
        }
     }
   return (minProfit+maxProfit);
  }
//+----------------------------------------------------------------------------+
//| Номер тикета                                                               |
//| 0-минимального ордера в сетке                                              |
//| 1-максимального ордера в сетке                                             |
//+----------------------------------------------------------------------------+
int GetOrderTicket( int tick=- 1 )
   {
   int min_ticket = INT_MAX ;
   int max_ticket = 0 ;
   int result=- 1 ;
      {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--) 
         {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
            {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) 
               {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                  {
                   if (OrderTicket() < min_ticket)
                     {
                     min_ticket = OrderTicket();
                     }
                   if (OrderTicket() > max_ticket) 
                     {
                     max_ticket = OrderTicket();
                     }
                  }
               }
            }
         }
      }
   if (tick== 0 ) {result=min_ticket;} else
   if (tick== 1 ) {result=max_ticket;} else {result=- 1 ;}
   return (result);
   }
//+----------------------------------------------------------------------------+
 
MakarFX # :

Sana başka bir fonksiyon verdim ... bir şey eklemene gerek yok

Ya da taşıyabilirsiniz...


 //+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxOrders()
{
   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 (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders)
         (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp)); 
           // Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
         else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
          }   
   
         if (OrderType() == OP_SELL)
         {
         if   (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders)     
         (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp));
           // Print("Максимальный и минимальный ордера на продажу успешно закрыты!");
         else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на продажу!" , GetLastError ());
         }
       } 
     }
  }
}
 
EVGENII SHELIPOV # :


Seçilen silinebilir

 //+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxOrders()
{
   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 (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders)
         (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp)); 
           // Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
         else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
          }   
   
         if (OrderType() == OP_SELL)
         {
         if   (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders)     
         (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp));
           // Print("Максимальный и минимальный ордера на продажу успешно закрыты!");
         else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на продажу!" , GetLastError ());
         }
       } 
     }
  }
}
 
MakarFX # :

Seçilen silinebilir

Makar nedenini açıklayabilir misin

 
EVGENII SHELIPOV # :

Makar nedenini açıklayabilir misin

size "slipp" herhangi bir yöndeki bir sırayı silmenize izin verir ... asıl mesele biletin eşleşmesidir
 
MakarFX # :

Seçilen silinebilir

Makar bir soru daha, SİZİN için resimleri atacağım, ama hiçbir şeyi yeniden yazmanıza gerek yok, SİZİN DENEYİMİNİZ SİZİN ilginizi çekiyor, bununla karşılaştınız mı?

Minimum emirler kapalıysa ve emirler tablosunda hala emirler varsa, eski ortalama fiyat doğru değilse, yeni bir maksimum emir açılırsa emirlerde değişiklik meydana gelirse durum aşağıdaki gibidir.


 if (CountTrade() < MaxOrders)                                                           
       {
           int order_type = FindLastOrderType();
           if (order_type == OP_BUY)
           { 
              price = FindLastOrderPrice(OP_BUY);  
               if (Ask<= price - Step()* Point )
              {
                  lastlot = NormalizeDouble (GetMinLotOrder()* MathPow ( MultiplierParameter, OrdersTotal ()), 2 );
                  ticket = OrderSend ( Symbol (), OP_BUY, lastlot, Ask, slip, 0 , 0 , "Групповой ордер" , Magic, 0 , Blue);
                   if (ticket < 1 )
                       Print ( "Ошибка ордера на покупку" );
                             ModifyOrders(OP_BUY);
              } 


           }
             if (order_type == OP_SELL)
           { 
              price = FindLastOrderPrice(OP_SELL);  
               if (Bid>= price + Step()* Point )
              {
                  lastlot = NormalizeDouble (GetMinLotOrder()* MathPow ( MultiplierParameter, OrdersTotal ()), 2 );
                  ticket = OrderSend ( Symbol (), OP_SELL, lastlot, Bid, slip, 0 , 0 , "Групповой ордер" , Magic, 0 , Red);
                   if (ticket < 1 )
                       Print ( "Ошибка ордера на продажу!" );
                             ModifyOrders(OP_SELL);
              }

Ve eğer fiyat eski ortalama fiyata giderse ve siparişler tablosu bunun üzerine kapanırsa, o zaman bir kayıp yaşarız. Değişikliği bir yerde daha vidalamak zorunda kaldım

//+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxOrders()
{
   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 (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders)
         (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp));
           // Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
         else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
               ModifyOrders(OP_BUY);
          }   
   
         if (OrderType() == OP_SELL)
         {
         if   (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders)     
         (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp));
           // Print("Максимальный и минимальный ордера на продажу успешно закрыты!");
         else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на продажу!" , GetLastError ());
               ModifyOrders(OP_SELL);
         }
       } 
     }
  }
}

İşte değişiklik fonksiyonunun kendisi

 //+----------------------------------------------------------------------------+
//| Модификация групповых ордеров                                              |
//+----------------------------------------------------------------------------+
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 );
    
     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 ( "Ошибка модификации ордеров!" );
           }
       }
    }
}

Soru, günlükteki hataların ne kadar kritik olduğudur.










 
MakarFX # :
"slipp" boyutu, herhangi bir yöndeki bir sırayı silmenize izin verir ... asıl şey, biletin eşleşmesidir

Alış veya Teklif fiyatında, önemli değil

 
EVGENII SHELIPOV # :

Alış veya Teklif fiyatında, önemli değil

önemli değil

 
EVGENII SHELIPOV # :

Soru, günlükteki hataların ne kadar kritik olduğudur.

Kritik değil, ama her şeyin bir açıklaması var ...