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

 
makssub # :

Hepsinin aynı döviz çifti içinde olmasına izin verin, örneğin EurUsd. Her ikisi de Buy'da açık.

Genel olarak, bunlar farklı çiftlerde ve birinde farklı görevlerdir. Birinde, aynı lotla, 2 emir/pozisyonun kesişmeyen ve kesişmeyen farklı yönlerde seçenekleri vardır. sadece siparişler arasında kesişen kârlar için her ikisi için örtüşmeyen zararlar arasındaki fiyat. Daha yüksek, daha düşük, siparişlere olan mesafeye bağlı olarak ya kayıp ya da kârdır. Bir yön için, biri kârda diğeri zararda, hem kârda hem de zararda daha düşük.

İsteğinize göre. Hacim aynıysa, aynı hacmi kapatın, aynı değilse, kârdaki para miktarını, paradaki kayıp miktarını hesaplamanız, kârın zarara oranını hesaplamanız, bu oranı çarpmanız gerekir. kârsız pozisyonun lot sayısı ve bu kısmı kapatın.

 
Ivan Butko yeni bir mum başladığında ve kodu inceledikten sonra, yere uzanıp bir sonraki mumun başlamasını beklediğinde nasıl çalıştırılacağını?

işlev

   bool NewBar()
   {
       static datetime LastTime = 0 ;
       if ( iTime ( Symbol (), PERIOD_CURRENT , 0 ) != LastTime)
      {
         LastTime = iTime ( Symbol (), PERIOD_CURRENT , 0 );
         return ( true );
      }
       else
         return ( false );
   }
 
Valeriy Yastremskiy # :

Genel olarak, bunlar farklı çiftlerde ve birinde farklı görevlerdir. Birinde, aynı lotla, 2 emir/pozisyonun kesişmeyen ve kesişmeyen farklı yönlerde seçenekleri vardır. sadece siparişler arasında kesişen kârlar için her ikisi için örtüşmeyen zararlar arasındaki fiyat. Daha yüksek, daha düşük, siparişlere olan mesafeye bağlı olarak ya kayıp ya da kârdır. Bir yön için, biri kârda diğeri zararda, hem kârda hem de zararda daha düşük.

İsteğinize göre. Hacim aynıysa, aynı hacmi kapatın, aynı değilse, kârdaki para miktarını, paradaki kayıp miktarını hesaplamanız, kârın zarara oranını hesaplamanız, bu oranı çarpmanız gerekir. kârsız pozisyonun lot sayısı ve bu kısmı kapatın.

Bu doğru, tam olarak istediğim şey bu. Karsız kısmı hesaplayın ve kapatın.
Örnekler var mı?
Denedim , kafam karıştı, işe yaramadı.

 
Valeriy Yastremskiy # :

saşasonik # :

işlev

Çok teşekkürler!
 
makssub # :

Bu doğru, tam olarak istediğim şey bu. Karsız kısmı hesaplayın ve kapatın.
Örnekler var mı?
Denedim , kafam karıştı, işe yaramadı.

Örnek olarak alın, yanılmıyorsam, bu işlevler bir yönde örtüşüyor, yani ya sadece alıyor ya da satıyor. Kısacası bitirmeniz gerekiyor.




//=========================================================================================================================================//
//  Функция расчета текущего состояния по открытым ордерам                                                                                 //
//=========================================================================================================================================//

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CurrentCondition(string OrdType, string inf)
{
   int    Pos   = 0;
   double result = 0, Count = 0, AveragePrice = 0, profit = 0;
   double LastPriceBuy, LastPriceSell, ProfitBuy, ProfitSell, SumProfit;
   for(int cnt = 0; cnt < OrdersTotal(); cnt++)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber || MagicCheck()))
         {
            if(OrderType() == OP_SELL || OrderType() == OP_BUY)
            {
               if(inf == "Lpos")
               {
                  profit = OrderProfit()              ;
                  Pos    = OrderTicket()              ;

                  if(profit > 0 && profit > Lprofit)
                  {
                     Lprofit1 = Lprofit                  ;
                     Lpos1    = Lpos                     ;
                     Lprofit  = profit                   ; //макс значение
                     Lpos     = Pos                      ;
                  }

                  if(profit < 0 && profit < Cprofit)
                  {
                     Cprofit = profit                    ; //мин  значение
                     Cpos    = Pos                       ;
                  }
               }

               SumProfit += OrderProfit() + OrderSwap() + OrderCommission() ;
               if(inf == "CurrentDrawdown")
                  result = MathMax((AccountBalance() + AccountCredit() - AccountEquity()) / (AccountBalance() + AccountCredit()) * 100, 0);
               if(inf == "CurrentUrov" && AccountMargin() > 0)
                  result = AccountEquity() / AccountMargin() * 100        ;
               if(inf == "TotalOrd")
                  result++                ;

               if(OrdType == "Buy")
               {
                  if(OrderType() == OP_BUY)
                  {
                     if(inf == "TotalBuy")
                        result++                         ;
                     if(inf == "LastLotBuy")
                        result  = OrderLots()            ;
                     if(inf == "SumLotBuy")
                        result += OrderLots()            ;
                     AveragePrice += OrderOpenPrice() * OrderLots()            ;
                     Count        += OrderLots()                              ;
                     LastPriceBuy  = OrderOpenPrice()                         ;
                     ProfitBuy += OrderProfit() + OrderSwap() + OrderCommission() ;
                     if(AveragePrice > 0 && Count > 0)
                     {
                        if(inf == "CalculateAveragePriceBuy")
                           return(NormalizeDouble(AveragePrice / Count, Digits));
                     }
                     else
                        return(0);
                  }
               }

               if(OrdType == "Sell")
               {
                  if(OrderType() == OP_SELL)
                  {
                     if(inf == "TotalSell")
                        result++                        ;
                     if(inf == "LastLotSell")
                        result  = OrderLots()           ;
                     if(inf == "SumLotSell")
                        result += OrderLots()           ;
                     AveragePrice  += OrderOpenPrice() * OrderLots()           ;
                     Count         += OrderLots()                             ;
                     LastPriceSell  = OrderOpenPrice()                        ;
                     ProfitSell += OrderProfit() + OrderSwap() + OrderCommission();
                     if(AveragePrice > 0 && Count > 0)
                     {
                        if(inf == "CalculateAveragePriceSell")
                           return(NormalizeDouble(AveragePrice / Count, Digits));
                     }
                     else
                        return(0);
                  }
               }
            }
         }
      }
   }

   if(inf == "Lpos")
      return(Lpos)                                    ;  //Ордер с наибольшим профитом
   if(inf == "Cpos")
      return(Cpos)                                    ;  //Ордер с наименьшим профитом
   if(inf == "LastPriceBuy")
      return(NormalizeDouble(LastPriceBuy, Digits))  ;
   if(inf == "LastPriceSell")
      return(NormalizeDouble(LastPriceSell, Digits))  ;
   if(inf == "ProfitBuy")
      return(NormalizeDouble(ProfitBuy,      2))  ;
   if(inf == "ProfitSell")
      return(NormalizeDouble(ProfitSell,      2))  ;
   if(inf == "SumProfit")
      return(NormalizeDouble(SumProfit,      2))  ;
   return(result)                                                             ;
}

//=========================================================================================================================================//
//   Перекрытие ордеров                                                                                                                    //
//=========================================================================================================================================//

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CheckOverlapping()
{
   Lpos = 0;
   Cpos = 0;
   Lprofit = 0;
   Cprofit = 0;

   Lpos = CurrentCondition("", "Lpos");
   Cpos = CurrentCondition("", "Cpos");

   if(totalord >= LeadingOrder)
   {
      if(Lprofit > 0 && Lprofit1 <= 0 && Cprofit < 0)
      {
         if(Lprofit + Cprofit > 0 && (Lprofit + Cprofit) * 100 / Lprofit > ProfitPersent)
         {
            Lpos1 = 0;
            CloseSelectOrder();
         }
      }
      else

         if(Lprofit > 0 && Lprofit1 > 0 && totalord > LeadingOrder && Cprofit < 0)
         {
            if(Lprofit + Lprofit1 + Cprofit > 0 && (Lprofit + Lprofit1 + Cprofit) * 100 / (Lprofit + Lprofit1) > SecondProfitPersent)
               CloseSelectOrder();
         }
   }
}

//=========================================================================================================================================//
//  Перекрытие ордеров                                                                                                                     //
//=========================================================================================================================================//

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CloseSelectOrder()
{
   if(Info)
      Print("Функция перекрытия ордеров.");
   int error =  0;
   int error1 = 0;
   int error2 = 0;
   int Result = 0;
   int Slippage = 2 * MarketInfo(Symbol(), MODE_SPREAD);

//                       ---------------------- последний  -----------------------

   while(error1 == 0)
   {
      RefreshRates();
      int i = OrderSelect(Lpos, SELECT_BY_TICKET, MODE_TRADES);
      if(i != 1)
      {
         Print("Ошибка! Невозможно выбрать ордер с наибольшим профитом. Выполнение перекрытия отменено.");
         return (0);
      }
      if(OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber || MagicCheck()))
      {
         if(OrderType() == OP_BUY)
         {
            error1 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Blue));
            if(error1 == 1)
            {
               if(Info)
                  Print("Лидирующий ордер закрыт успешно.");
               Sleep(500);
            }
            else
            {
               Print("Ошибка закрытия лидирующего ордера, повторяем операцию. ");
            }
         }

         //                        -----------------------------------------------------

         if(OrderType() == OP_SELL)
         {
            error1 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Red));
            if(error1 == 1)
            {
               if(Info)
                  Print("Лидирующий ордер закрыт успешно");
               Sleep(500);
            }
            else
            {
               Print("Ошибка закрытия лидирующего ордера, повторяем операцию. ");
            }
         }
      }
   }

//                       ---------------------- пред последний  -----------------------

   if(Lpos1 != 0)
   {
      while(error2 == 0)
      {
         RefreshRates();
         i = OrderSelect(Lpos1, SELECT_BY_TICKET, MODE_TRADES);
         if(i != 1)
         {
            Print("Ошибка! Невозможно выбрать пред ордер с наибольшим профитом. Выполнение перекрытия отменено.");
            return (0);
         }
         if(OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber || MagicCheck()))
         {
            if(OrderType() == OP_BUY)
            {
               error2 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Blue));
               if(error2 == 1)
               {
                  if(Info)
                     Print("Пред Лидирующий ордер закрыт успешно.");
                  Sleep(500);
               }
               else
               {
                  Print("Ошибка закрытия пред лидирующего ордера, повторяем операцию. ");
               }
            }
            //                        -----------------------------------------------------
            if(OrderType() == OP_SELL)
            {
               error2 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Red));
               if(error2 == 1)
               {
                  if(Info)
                     Print("Пред Лидирующий ордер закрыт успешно");
                  Sleep(500);
               }
               else
               {
                  Print("Ошибка закрытия Пред лидирующего ордера, повторяем операцию. ");
               }
            }
         }
      }
   }

//                      ----------- выбранный (обычно с наименьшим профитом ) -----------

   while(error == 0)
   {
      RefreshRates();
      i = OrderSelect(Cpos, SELECT_BY_TICKET, MODE_TRADES);
      if(i != 1)
      {
         Print("Ошибка! Невозможно выбрать ордер с наименьшим профитом. Выполнение перекрытия отменено.");
         return (0);
      }
      if(OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber || MagicCheck()))
      {
         if(OrderType() == OP_BUY)
         {
            error = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Blue));
            if(error == 1)
            {
               if(Info)
                  Print("Перекрываемый ордер закрыт успешно.");
               Sleep(500);
            }
            else
            {
               Print("Ошибка закрытия перекрываемого ордера, повторяем операцию. ");
            }
         }

         //                             --------------------------------------------------

         if(OrderType() == OP_SELL)
         {
            error = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Red));
            if(error == 1)
            {
               if(Info)
                  Print("Перекрываемый ордер закрыт успешно.");
               Sleep(500);
            }
            else
            {
               Print("Ошибка закрытия перекрываемого ордера, повторяем операцию. ");
            }
         }
      }
   }

   Result = 1;
   return (Result);
}

 
makssub # :

Bu doğru, tam olarak istediğim şey bu. Karsız kısmı hesaplayın ve kapatın.
Örnekler var mı?
Denedim , kafam karıştı, işe yaramadı.

ve Vile neden anlıyor? ne çalışmıyor? Kod gerekli. Sadece bu sorunlarım yoktu. ve dürüst olmak gerekirse, bu yaklaşımın para yönetimi için makul olmadığını düşünüyorum.

 
Söyle bana, aynı girişlere sahip 2 özdeş göstergenin MT5'te bir pencereye yüklenmesi için nasıl yapılır? Her başlattığımda INDICATOR_SHORTNAME öğesini değiştirmeye çalıştım ama yardımcı olmuyor. Belki başka yollar vardır?
 
Aleksandr Kononov # :
Söyle bana, aynı girişlere sahip 2 özdeş göstergenin MT5'te bir pencereye yüklenmesi için nasıl yapılır? Her başlattığımda INDICATOR_SHORTNAME öğesini değiştirmeye çalıştım ama yardımcı olmuyor. Belki başka yollar vardır?

Başka bir değersiz girdi alın ve değiştirin.

 
Valeriy Yastremskiy # :

ve Vile neden anlıyor? ne çalışmıyor? Kod gerekli. Sadece bu sorunlarım yoktu. ve dürüst olmak gerekirse, bu yaklaşımın para yönetimi için makul olmadığını düşünüyorum

tünaydın. Vile'ı okudum. Ekleyemez veya çıkaramazsınız.
Para yönetimi hakkında bir şey söyleyemem. denemedi.
En son revizyon ektedir. Ama orada zaten her şeyi kendim için karıştırdım)
Seçilen siparişin Order1(2) karı
Seçilen siparişin Order1(3) lotu

 double FirstProfit( int a = 1 )
{
   double   profit = 0 , proflot = 0 ,
           OneProfLot = 0 , result = 1 , profit_1 = 0 ;
           
      OneProfLot = NormalizeDouble (Lots*Order1( 2 )/Order1( 3 ), 2 );
      profit = NormalizeDouble (Lots*Order1( 2 )/Order1( 3 ), 2 );
      proflot = Order1( 3 );
       while (profit >= Order1( 2 ) && profit <= OneProfLot)
         {
            profit -= OneProfLot;
             if (profit != 0 && NormalizeDouble (profit + CalculateProfitHistory(), 2 ) > NormalizeDouble (ProfitLot, Digits )*Lots* 100 ) 
            profit_1 = profit;
            proflot = NormalizeDouble (proflot*profit/Order1( 2 ), 2 );
 
         }
      }
   }
   if (a== 1 ) {result = ( double )profit_1;} else
   if (a== 2 ) {result = ( double )proflot;}  
   return (result);
}
 
Alexey Viktorov # :

Başka bir değersiz girdi alın ve değiştirin.

Peki ya manuel müdahale olmadan? MT4'te birbiri üzerine yığılmış göstergelerim var ve nedenini bilmiyorum. Bunu MT5'te de yapmak ve genel olarak neye bağlı olduğunu anlamak istiyorum.