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

 
Değişken, tırnak değil. Dize değişkeninde bir sayım vardır ve double, belirtilen hassasiyetle dizeye dönüştürülür. Güçlüdür tabii.
 
Bu arada, bu, beş basamaklı bir alıntının beşten fazla ondalık basamakla gelmesiyle ilgilidir. Otomatik bir kontrol yapmak istedim, bu dilde çok kolay olmadığı ortaya çıktı. Bu arada, baskıyı manuel olarak kontrol ettim. Orada beşten fazla karakter yok, sık sık oluyor mu? Belki 4. terminaldeydi?
 
Tamam, burada sistematik görmezden gelen mesajlar. Tekrar bir konu oluşturmak gereklidir.
 
pribludilsa # :
Tamam, burada sistematik görmezden gelen mesajlar. Tekrar bir konu oluşturmak gereklidir.

Bu konuyla ilgili daha önce açılmış konular var. Bir dizede ve dizedeki karakter sayısını sayın. Ancak önce, ondalık basamakların sayısını saymanız gerekir. Bir tamsayıya indirgenebilir. Ve beceriksizce de bir ipe yol açar))))

 
Alexey Viktorov # :

MT4 test cihazında, diğer çiftlerde sipariş açamazsınız ve diğer her şey sorunsuz bir şekilde kullanılabilir.

Teşekkürler, gerçekten de göstergelerin değerini test cihazındaki başka bir cihazdan alabilirsiniz.
İskender # :

İstenen TF için AUDUSD fiyat tekliflerinin kullanılabilirliğini kontrol edin

Sürtünmenin olduğu yer burasıydı. Gerçek şu ki, bir izin gününde (Pazar) test ettim ve istenen enstrüman (AUDUSD) için teklif arşivini "indirdim", ancak forex sunucularım nedeniyle izinli oldukları gün yüklenmedikleri ortaya çıktı. bayi izin gününde müsait değildi. Ve bugün, Pazartesi günü, alıntı arşivinin indirilmesi ve testler başarılı oldu.
MakarFX # :
Üzgünüm, yanılmışım, bilmiyordum.
Sorun değil, özel mesajlardaki cevaplarınız çok daha değerli çıktı.

Buradaki insanların cevap vermesi ve birbirlerine yardım etmesi güzel. Tüm cevaplar belgelerde bulunamadı)
 
Valeriy Yastremskiy # :

Bu konuyla ilgili daha önce açılmış konular var. Bir dizede ve dizedeki karakter sayısını sayın. Ancak önce, ondalık basamakların sayısını saymanız gerekir. Bir tamsayıya indirgenebilir. Ve beceriksizce de bir ipe yol açar))))

Evet, ben de bunu yapmak istedim, yalnızca bir double'ın bir dizeye dönüştürülmesi belirtilen doğrulukla gerçekleşir, doğruluk belirtilmezse varsayılan olarak 8 karakter.

 
Valeriy Yastremskiy # :

Bu konuyla ilgili daha önce açılmış konular var. Bir dizeye ve dizedeki karakter sayısını sayın. Ancak önce, ondalık basamakların sayısını saymanız gerekir. Bir tamsayıya indirgenebilir. Ve beceriksizce de bir ipe yol açar))))

Bütüne indirgeme, evet, muhtemelen sadece bu. Benim de aklıma geldi, ama 10 ile bir tür çarpma veya bölme yapmak için çok karmaşık görünüyordu. Henüz düşünmedim.
 
MakarFX #:
 
//+----------------------------------------------------------------------------+
//| Модификация ордеров                           |
//+----------------------------------------------------------------------------+
void ModifyOrders(int otype)
{
 double
   BuyPriceMax = 0, BuyPriceMin = 0, BuyPriceMaxLot = 0, BuyPriceMinLot = 0, 
   SelPriceMin = 0, SelPriceMax = 0, SelPriceMinLot = 0, SelPriceMaxLot = 0;

   int
   BuyPriceMaxTic = 0, BuyPriceMinTic = 0, SelPriceMaxTic = 0, SelPriceMinTic = 0;

   double
   op = 0, lt = 0, order_lots = 0;

   int
   tk = 0, b = 0, s = 0;
   price = 0;tp = 0;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == Magic)
            if(OrderSymbol() == Symbol() &&  OrderType() == otype)
              {
               op = NormalizeDouble(OrderOpenPrice(), Digits());
               lt = NormalizeDouble(OrderLots(), 2);
               tk = OrderTicket();
               if(otype == OP_BUY)
                 {
                  b++;
                  if(op > BuyPriceMax || BuyPriceMax == 0)
                    {
                     BuyPriceMax    = op;
                     BuyPriceMaxLot = lt;
                     BuyPriceMaxTic = tk;
                    }
                  if(op < BuyPriceMin || BuyPriceMin == 0)
                    {
                     BuyPriceMin    = op;
                     BuyPriceMinLot = lt;
                     BuyPriceMinTic = tk;
                    }
                 }
               
               if(otype == OP_SELL)
                 {
                  s++;
                  if(op > SelPriceMax || SelPriceMax == 0)
                    {
                     SelPriceMax    = op;
                     SelPriceMaxLot = lt;
                     SelPriceMaxTic = tk;
                    }
                  if(op < SelPriceMin || SelPriceMin == 0)
                    {
                     SelPriceMin    = op;
                     SelPriceMinLot = lt;
                     SelPriceMinTic = tk;
                    }
                 }
               if (otype == OP_BUY || otype == OP_SELL) 
                  {
                   price += OrderOpenPrice() * OrderLots();
                   order_lots += OrderLots();
                  }
              }
//*************************************************************//
double   AwerageBuyPrice = 0, AwerageSelPrice = 0, avg_price = 0;
      if(b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
         AwerageBuyPrice = NormalizeDouble((BuyPriceMax*BuyPriceMaxLot + BuyPriceMin*BuyPriceMinLot)/
         (BuyPriceMaxLot + BuyPriceMinLot) + TakeProfitMinMaxOrder* Point(), Digits());
      if(s >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
         AwerageSelPrice = NormalizeDouble((SelPriceMax * SelPriceMaxLot + SelPriceMin * SelPriceMinLot)/ 
         (SelPriceMaxLot + SelPriceMinLot) - TakeProfitMinMaxOrder* Point(), Digits());
      if (Drawdown < DrawdownClosingMinMaxOrder) 
         avg_price = NormalizeDouble(price / order_lots, Digits);
//*************************************************************//
   for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == Magic)
            if(OrderSymbol() == Symbol())
              {
               op  = NormalizeDouble(OrderOpenPrice(), Digits());
               tp = NormalizeDouble(OrderTakeProfit(), Digits());
               lt  = NormalizeDouble(OrderLots(), 2);
               tk  = OrderTicket();

                  if(otype == OP_BUY && b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
                    {
                     if(tk == BuyPriceMaxTic || tk == BuyPriceMinTic)
                        if(Bid < AwerageBuyPrice && tp != AwerageBuyPrice)
                           if(!OrderModify(tk, op, OrderStopLoss(), AwerageBuyPrice, 0, clrRed))
                              Print("OrderModify error #", GetLastError());

                     if(tk != BuyPriceMaxTic && tk != BuyPriceMinTic && tp != 0)
                        if(!OrderModify(tk, op, 0, 0, 0, clrRed))
                           Print("OrderModify error #", GetLastError());
                    }
                  if(otype == OP_SELL && s >= 2  && Drawdown >= DrawdownClosingMinMaxOrder)
                    {
                     if(tk == SelPriceMaxTic || tk == SelPriceMinTic)
                        if(Ask > AwerageSelPrice && tp != AwerageSelPrice)
                           if(!OrderModify(tk, op, OrderStopLoss(), AwerageSelPrice, 0, clrRed))
                              Print("OrderModify error #", GetLastError());

                     if(tk != SelPriceMaxTic && tk != SelPriceMinTic && tp != 0)
                        if(!OrderModify(tk, op, 0, 0, 0, clrRed))
                           Print("OrderModify error #", GetLastError());
                    }
                 if (Drawdown < DrawdownClosingMinMaxOrder)    
                 if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
                 if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits); 
                    {
                    if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0))
                      Print("Ордера успешно модифицированы!");
                      else Print("Ошибка модификации ордеров!");
                    } 
             } 
}
 
Valeriy Yastremskiy # :

Belki bir şey bilmiyorum? Ayrıca, test cihazının saatine göre diğer cihazlardan bar verilerini almak mümkün değildir, mevcut saate göre alınacaktır. Bu nedenle, sadece ödeme kısmında bile, çoklu para birimini 4k'da test edemiyorum.

Her zaman MT4 test cihazının bir cihazın ortamını ve MT5'in mevcut tüm ortamı tamamen taklit ettiğini düşündüm.

Yoksa değil mi?

Valery, çizgiye dikkat et

  sd = ( int )MarketInfo( "EURJPY" , MODE_DIGITS);

kodumda… Uzun süredir beşli işlevler kullanıyorum, ancak işte benzer bir işlev

 SymbolInfoInteger ( "EURJPY" , SYMBOL_DIGITS );

ssstakaya 0 verdi.

Öyleyse hamamböceklerinin nerede olduğunu bir düşünün... Ve MT4'ü desteklemeyi reddetmeleri nedeniyle, bunun asla düzeltilmeyeceğini varsayabiliriz...

Diğer her şeyin kontrol edilmesi gerekiyor. O kadar uzun zamandır bununla uğraşmadım ki hatırlamak bile istemiyorum.

 

Alexey Viktorov # :

Uzun zamandır beşli fonksiyonları kullanıyorum

MQL5'i (Rusça) nerede öğrenebileceğimi söyleyebilir misiniz?