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

 
EVGENII SHELIPOV # :

İyi günler !!!

Tavsiyeniz üzerine, grup siparişlerinin takibini değiştirmek için bir komut göndermek için TrailingGroupOrder() işlevini ekleyebileceğiniz void OnTick() işlevinde bir yer buldum ve işte, grup siparişlerinin izi çalışmaya başladı. Ama sevinç uzun sürmedi. Yakından baktığımda, yalnızca minimum bilet içeren bir siparişin takip edildiğini gördüm.

Sorunun, hepsini birden değil, yalnızca ilk (minimum) sırayı değiştirmekte olduğunu yüksek bir olasılıkla varsayabilirim.

Makar, ızgaradaki tüm siparişlerin bir kerede değiştirilmesi için nasıl yapacağımı söyle????

Void OnTick() işlevinde TrailingGroupOrder()'ı nereye batırdığınızı gösterin?
 
MakarFX # :
Void OnTick() işlevinde TrailingGroupOrder()'ı nereye batırdığınızı gösterin?


 void OnTick ()
{
     double JAW = iAlligator ( Symbol (),TimeframesIndicators, 13 , 8 , 5 , 8 , 5 , 3 , MODE_SMMA , PRICE_MEDIAN ,MODE_GATORJAW, 0 );
     double TEETH = iAlligator ( Symbol (),TimeframesIndicators, 13 , 8 , 5 , 8 , 5 , 3 , MODE_SMMA , PRICE_MEDIAN ,MODE_GATORTEETH, 0 );
     double LIPS = iAlligator ( Symbol (),TimeframesIndicators, 13 , 8 , 5 , 8 , 5 , 3 , MODE_SMMA , PRICE_MEDIAN ,MODE_GATORLIPS, 0 );
     double DI_PLUSCurrent= iADX ( Symbol (),TimeframesIndicators, 14 , PRICE_CLOSE ,MODE_PLUSDI, 0 );
     double DI_MINUSCurrent= iADX ( Symbol (),TimeframesIndicators, 14 , PRICE_CLOSE ,MODE_MINUSDI, 0 );
     double MacdCurrent= iMACD ( Symbol (),TimeframesIndicators, 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 0 );
     double MacdPrevious= iMACD ( Symbol (),TimeframesIndicators, 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 2 ); 
     double ATR = iATR ( Symbol (), TimeframesVolatility, BarCount, 0 );
     {
       if (CountTrade() == 0 )
      {
         if ((UseHour== 1 &&Hour()>=StartTime&&Hour()<=StopTime)||UseHour== 0 )
         if (LIPS>TEETH&& TEETH>JAW&&DI_PLUSCurrent> 18 &&DI_PLUSCurrent>DI_MINUSCurrent&&MacdCurrent>MacdPrevious)                              
         {
           FirstLots = Lots();
           tp = NormalizeDouble (Ask + TakeProfitFirstOrder* Point , Digits );
           ticket = OrderSend ( Symbol (), OP_BUY, FirstLots, Ask, slip, 0 , tp, "1-ый ордер" , Magic, 0 , Blue); 
         }
         if ((UseHour== 1 &&Hour()>=StartTime&&Hour()<=StopTime)||UseHour== 0 )
         if (LIPS<TEETH&& TEETH<JAW&&DI_MINUSCurrent> 18 &&DI_MINUSCurrent>DI_PLUSCurrent&&MacdCurrent<MacdPrevious)                            
         {
           FirstLots = Lots();
           tp = NormalizeDouble (Bid - TakeProfitFirstOrder* Point , Digits );
           ticket = OrderSend ( Symbol (), OP_SELL, FirstLots, Bid, slip, 0 , tp, "1-ый ордер" , Magic, 0 , Red); 
         }
       }
       if (CountTrade() == 1 ) Trailing();
     }
       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);
              }
           }
         }
         if (CountTrade()> 1 )
          {
           TrailingGroupOrder();
          } 
         double op = CalculiteProfit(); 
         if (op > FindLastLots() && Drawdown > DrawdownClosingMinMaxOrders)
           {
           ClosseMinMaxOrders();
           } 
       Comment ( "Всего открыто ордеров : " + DoubleToStr(OrdersHistoryTotal(), 0 )+ "\n" +
               "Максимальное количество : " + DoubleToStr(MaxOrders, 0 )+ "\n" +
               "Количество открытых ордеров: " + DoubleToStr( OrdersTotal (), 0 )+ "\n" +
               "Осталось ордеров: " + DoubleToStr((MaxOrders - OrdersTotal ()), 0 )+ "\n" +
               "Баланс средств счета: " + DoubleToStr(AccountBalance(), 0 )+ "\n" +
               "Свободные средства: " + DoubleToStr(AccountFreeMargin(), 0 )+ "\n" +
               "Относительная текущая просадка: " + DoubleToStr(((AccountBalance() - AccountFreeMargin())/AccountBalance())* 100 , 2 )+ "\n" +
               "Относительная максимальная просадка: " + DoubleToStr(GetMaxDrawdown(), 2 )+ "\n" +
               "Текущая прибыль/убыток: " + DoubleToStr(AccountProfit(), 2 )+ "\n" +
               "Абсолютная максимальная прибыль: " + DoubleToStr(GetMaxProfit(), 2 )+ "\n" +
               "Абсолютный максимальный убыток (просадка): " + DoubleToStr(GetMaxLoss(), 2 )+ "\n" +
               "Плечо: " + DoubleToStr(AccountLeverage(), 0 )+ "\n" + 
               "Своп: " + DoubleToStr(OrderSwap(), 2 )+ "\n" + 
               "Коммссия: " + DoubleToStr(OrderCommission(), 2 )+ "\n" + 
               "Шаг: "   + DoubleToStr(Step(), 0 )+ "\n" + 
               "Минимальный тикет ордера: " + DoubleToStr(GetTicketMinOrder(), 0 )+ "\n" + 
               "Максимальный тикет ордера: " + DoubleToStr(GetTicketMaxOrder(), 0 )+ "\n" + 
               "Профит минимальный  ордера: " + DoubleToStr(GetProfitMinOrder(), 2 )+ "\n" +  
               "Профит максимального  ордера: " + DoubleToStr(GetProfitMaxOrder(), 2 )+ "\n" +
               "Профит суммарный: " + DoubleToStr(CalculiteProfit(), 2 ));       
}
 
EVGENII SHELIPOV # :

kırmızıyla vurgulanmış

 void OnTick ()
{
     double JAW = iAlligator ( Symbol (),TimeframesIndicators, 13 , 8 , 5 , 8 , 5 , 3 , MODE_SMMA , PRICE_MEDIAN ,MODE_GATORJAW, 0 );
     double TEETH = iAlligator ( Symbol (),TimeframesIndicators, 13 , 8 , 5 , 8 , 5 , 3 , MODE_SMMA , PRICE_MEDIAN ,MODE_GATORTEETH, 0 );
     double LIPS = iAlligator ( Symbol (),TimeframesIndicators, 13 , 8 , 5 , 8 , 5 , 3 , MODE_SMMA , PRICE_MEDIAN ,MODE_GATORLIPS, 0 );
     double DI_PLUSCurrent= iADX ( Symbol (),TimeframesIndicators, 14 , PRICE_CLOSE ,MODE_PLUSDI, 0 );
     double DI_MINUSCurrent= iADX ( Symbol (),TimeframesIndicators, 14 , PRICE_CLOSE ,MODE_MINUSDI, 0 );
     double MacdCurrent= iMACD ( Symbol (),TimeframesIndicators, 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 0 );
     double MacdPrevious= iMACD ( Symbol (),TimeframesIndicators, 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 2 ); 
     double ATR = iATR ( Symbol (), TimeframesVolatility, BarCount, 0 );
     {
       if (CountTrade() == 0 )
      {
         if ((UseHour== 1 &&Hour()>=StartTime&&Hour()<=StopTime)||UseHour== 0 )
         if (LIPS>TEETH&& TEETH>JAW&&DI_PLUSCurrent> 18 &&DI_PLUSCurrent>DI_MINUSCurrent&&MacdCurrent>MacdPrevious)                              
         {
           FirstLots = Lots();
           tp = NormalizeDouble (Ask + TakeProfitFirstOrder* Point , Digits );
           ticket = OrderSend ( Symbol (), OP_BUY, FirstLots, Ask, slip, 0 , tp, "1-ый ордер" , Magic, 0 , Blue); 
         }
         if ((UseHour== 1 &&Hour()>=StartTime&&Hour()<=StopTime)||UseHour== 0 )
         if (LIPS<TEETH&& TEETH<JAW&&DI_MINUSCurrent> 18 &&DI_MINUSCurrent>DI_PLUSCurrent&&MacdCurrent<MacdPrevious)                            
         {
           FirstLots = Lots();
           tp = NormalizeDouble (Bid - TakeProfitFirstOrder* Point , Digits );
           ticket = OrderSend ( Symbol (), OP_SELL, FirstLots, Bid, slip, 0 , tp, "1-ый ордер" , Magic, 0 , Red); 
         }
       }
       if (CountTrade() == 1 ) Trailing();
     }
       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);
              }
           }
         }
         if (CountTrade()> 1 )
          {
           TrailingGroupOrder();
          } 
         double op = CalculiteProfit(); 
         if (op > FindLastLots() && Drawdown > DrawdownClosingMinMaxOrders)
           {
           ClosseMinMaxOrders();
           } 
       Comment ( "Всего открыто ордеров : " + DoubleToStr(OrdersHistoryTotal(), 0 )+ "\n" +
               "Максимальное количество : " + DoubleToStr(MaxOrders, 0 )+ "\n" +
               "Количество открытых ордеров: " + DoubleToStr( OrdersTotal (), 0 )+ "\n" +
               "Осталось ордеров: " + DoubleToStr((MaxOrders - OrdersTotal ()), 0 )+ "\n" +
               "Баланс средств счета: " + DoubleToStr(AccountBalance(), 0 )+ "\n" +
               "Свободные средства: " + DoubleToStr(AccountFreeMargin(), 0 )+ "\n" +
               "Относительная текущая просадка: " + DoubleToStr(((AccountBalance() - AccountFreeMargin())/AccountBalance())* 100 , 2 )+ "\n" +
               "Относительная максимальная просадка: " + DoubleToStr(GetMaxDrawdown(), 2 )+ "\n" +
               "Текущая прибыль/убыток: " + DoubleToStr(AccountProfit(), 2 )+ "\n" +
               "Абсолютная максимальная прибыль: " + DoubleToStr(GetMaxProfit(), 2 )+ "\n" +
               "Абсолютный максимальный убыток (просадка): " + DoubleToStr(GetMaxLoss(), 2 )+ "\n" +
               "Плечо: " + DoubleToStr(AccountLeverage(), 0 )+ "\n" + 
               "Своп: " + DoubleToStr(OrderSwap(), 2 )+ "\n" + 
               "Коммссия: " + DoubleToStr(OrderCommission(), 2 )+ "\n" + 
               "Шаг: "   + DoubleToStr(Step(), 0 )+ "\n" + 
               "Минимальный тикет ордера: " + DoubleToStr(GetTicketMinOrder(), 0 )+ "\n" + 
               "Максимальный тикет ордера: " + DoubleToStr(GetTicketMaxOrder(), 0 )+ "\n" + 
               "Профит минимальный  ордера: " + DoubleToStr(GetProfitMinOrder(), 2 )+ "\n" +  
               "Профит максимального  ордера: " + DoubleToStr(GetProfitMaxOrder(), 2 )+ "\n" +
               "Профит суммарный: " + DoubleToStr(CalculiteProfit(), 2 ));       
}

Başa kadar sarı artışla vurgulanır

 void OnTick ()
{
       if (CountTrade() == 1 ) Trailing();
       if (CountTrade() > 1 ) TrailingGroupOrder();

     double JAW = iAlligator ( Symbol (),TimeframesIndicators, 13 , 8 , 5 , 8 , 5 , 3 , MODE_SMMA , PRICE_MEDIAN ,MODE_GATORJAW, 0 );
 
MakarFX # :

kırmızıyla vurgulanmış

Başa doğru sarı artışla vurgulanır

Makar, dün bana gönderdiğiniz seçenek - bu Varyant'ta çok basit olurdu, siparişler de yanlış kapatılmış

 
EVGENII SHELIPOV # :

Makar, dün bana gönderdiğin varyant - bu Varyant'ta siparişlerin doğru şekilde kapatılmaması çok basit olurdu

Kapanış ayarlarımın bir etkisi yok.

Ve bir şey daha - TrailingGroupOrder () işlevinde "tr" nedir

 if (!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble (Bid - TrailingStopGroupOrder* Point , Digits ) , tp, 0 ))
 
EVGENII SHELIPOV # :

Makar, dün bana gönderdiğiniz seçenek - bu Varyant'ta çok basit olurdu, siparişler de yanlış kapatılmış

"Doğru kapanmıyor" ile ne demek istiyorsun?
 
MakarFX # :
"Doğru kapanmıyor" ile ne demek istiyorsun?

Tüm siparişler trolden hemen kapatılmaz, yalnızca minimum biletli bir sipariş vb.

 
EVGENII SHELIPOV # :

Tüm siparişler trolden hemen kapatılmaz, yalnızca minimum biletli bir sipariş vb.

yarın kontrol edeceğim
 

Herkese iyi günler, takip eden grup siparişleri için bir kod yazıyorum. Takip için kod mantığı aşağıdaki gibidir:

İkinci ve sonraki emirleri açtıktan sonra, ModifyOrders() emirlerini değiştirmek için bir komut gönderilir, burada, fonksiyonun başında, ortalamayı hesaplarız, sonra kâr al hesaplar ve tüm emirleri değiştirir, sadece kâr alır.

Ardından void OnTick() işlevinden, Stop Loss'un bir takip eden durdurmaya dönüştürüldüğü TrailingGroupOrder() işlevini çağırırız.

Asıl soru, minimum biletle yalnızca bir siparişin değiştirilmesidir, ızgaradaki tüm siparişleri değiştirmek ve TP veya SL ile kapatmak doğru değildir. Bununla başa çıkmaya yardım et. Şimdiden teşekkürler.

 //+----------------------------------------------------------------------------+
//| Модификация групповых ордеров                                              |
//+----------------------------------------------------------------------------+
void ModifyOrders( int otype)
  {
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == otype)
           {
             if (otype == OP_BUY)
               tp = NormalizeDouble (GetAveragePrice() + TakeProfitGroupOrder* Point , Digits );
             if (otype == OP_SELL)
               tp = NormalizeDouble (GetAveragePrice() - TakeProfitGroupOrder* Point , Digits );
             if ((otype == OP_BUY || otype == OP_SELL) && (Drawdown > DrawdownClosingTakeprofitZero))
               tp = NormalizeDouble (GetAveragePrice(), 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 ( "Ошибка модификации ордеров!" );
           }
        }
     }
  }
//+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
  {
   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 && Bid - GetAveragePrice() > TrailingStopGroupOrder* Point )
              {
               if (Bid - GetAveragePrice() > 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 && GetAveragePrice() - Ask > TrailingStopGroupOrder* Point )
              {
               if (GetAveragePrice() - 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 ( "Ошибка модификации групповых ордеров на продажу!" );
                    }
                 }
              }
           }
        }
     }
  }


 
EVGENII SHELIPOV # :

Herkese iyi günler, takip eden grup siparişleri için bir kod yazıyorum. Takip için kod mantığı aşağıdaki gibidir:

Bu çoğaltma neden?

             if (OrderType() == OP_BUY && Bid - GetAveragePrice() > TrailingStopGroupOrder* Point )
              {
               if ( Bid - GetAveragePrice() > TrailingStopGroupOrder* Point || OrderStopLoss() == 0 )
                 {
                   if (OrderStopLoss() < Bid - (TrailingStep + TrailingStopGroupOrder)* Point || OrderStopLoss() == 0 )
                    {

böyle olabilir mi

             if (OrderType() == OP_BUY && Bid - GetAveragePrice() > TrailingStopGroupOrder* Point )
              {
               if (OrderStopLoss() < Bid - (TrailingStep + TrailingStopGroupOrder)* Point || OrderStopLoss() == 0 )
                  {


Ayrıca hangi parametreleri göster

TrailingStep                
TakeProfitGroupOrder        
TrailingStopGroupOrder