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

 
Maksim Efimov MACD'deki sinyal çizgisi ile histogramın kesişimini hesaplamaya çalışıyorum. Fikir şudur: Her yeni çubukta, önceki iki mum alır ve her birinin gösterge değerlerini alırız. İkinci mum çubuğundaki MACD değeri sinyal değerinden büyükse ve ilk mum çubuğunda MACD zaten sinyalin altındaysa ve tüm değer sıfırın üzerindeyse, o zaman tepede bir geçiş vardır ve buna göre, bunun tersi de geçerlidir.

Ancak, değeri alma anında, bir şekilde devasa hale gelir. Ayrıca, sadece bir - ikinci mumun sinyal hattı. Belki hangi derece doğrultusunda 8, 4,5, 7 vb. Bir sonraki çubuk göründüğünde, yenisinden ikinci çubuğun sinyal çizgisinin değeri zaten normal olabilir. Geri kalan her şey doğru. Ve veri penceresinde de değer doğrudur. Nedenini anlayamıyorum. Neyi yanlış yapıyorum?

Maddenin çift değişkende olduğunu hissetmek. Veri penceresindeki değer 0.000081 olduğundan, ancak 8.1 ..... olduğu için, aynı şeyi başka bir değerle fark ettim - 0,000071 veri penceresinde ve 7.1 değişkeninde ..... Ama hepsi çift değişkenler gibi tanımlanır.

Yorumda 8 yok ama devamı var.

Сomment( DoubleToString (CtrlMACD)+ " " + DoubleToString (CtrlSignalMACD)+ " " + DoubleToString (PrevMACD)+ " " + DoubleToString (PrevSignalMACD));
 
Vitaly Muzichenko # :

Yorumda 8 yok ama devamı var.

Teşekkür ederim. Yani doğru gösteriyor. Aptalca bir hata tabii. Ancak diğer tüm değerlerin normal olarak görüntülenmesi ve yalnızca birinin eğri olması hala ilginç.

 
Maksim Efimov # :

Teşekkür ederim. Yani doğru gösteriyor. Aptalca bir hata tabii. Ancak diğer tüm değerlerin normal olarak görüntülenmesi ve yalnızca birinin eğri olması hala ilginç.

Eğri değil, makine seviyesinde doğru, sonunda "e-08" olduğunu görüyorsunuz.

Örneğin, 1e-05 sayısı bir hata değil, 0.00001'dir .

Neye alıştığımızı görmek için DoubleToString kullanmanız gerekir ve program yine de doğru şekilde çalışacaktır.

Okumak

Все калькуляторы
  • allcalc.ru
Онлайн калькулятор для перевода чисел в экспоненциальный вид и обратно, другим языком для вычисления чисел с буквой E. На компьютере (в частности в тексте компьютерных программ) экспоненциальную запись записывают в виде MEp (пример 1e-10), где: M — мантисса, E (exponent) — буква E, означающая «*10^» («…умножить на десять в степени…»), p — порядок. Это необходимо для представлении очень больших и очень малых чисел, а также для унификации их написания. Многие пользователи калькуляторов столкнулись с вопросом: Что означает буква "E" в цифровом калькуляторе? Это Экспоненциа́льная за́пись— представление действительных чисел в виде мантиссы и порядка. Удобна для записи очень больших и очень малых чисел.
 
Vitaly Muzichenko # :

Eğri değil, makine seviyesinde doğru, sonunda "e-08" olduğunu görüyorsunuz.

Örneğin, 1e-05 sayısı bir hata değil, 0.00001'dir .

Neye alıştığımızı görmek için DoubleToString kullanmanız gerekir ve program yine de doğru şekilde çalışacaktır.

Okumak

Tekrar teşekkürler. Yapacağım.

 
mql4'te OrderSend() , ticaret sunucusu tarafından sipariş işlemenin sonucunu hemen döndürdü.
Böyle bir işlevi mql5'te kendim yazmam gerekir mi?

 
Tretyakov Rostyslav # :

Düzeltildi, şimdi çalışıyor. Kesinlikle doğru değil, ama işe yarıyor.

{
               if (iTrailTakeProfit > 0.0 )
                {
                tp=OrderTakeProfit() + NormalizeDouble (iTrailTakeProfit * Point (), _Digits );
                 if ( NormalizeDouble (((tp - OrderTakeProfit())) < 0.0 , Digits )) return ;
                tp = OrderTakeProfit();
                } else tp = 0.0 ;
               if (OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo( Symbol (), MODE_TICKVALUE) * iTrailStart * OrderLots());
                {
                 if ((( NormalizeDouble ((Bid - OrderOpenPrice()* Point ), Digits ) >= NormalizeDouble (((Bid - NormalizeDouble ((iTrailStart * Point ), _Digits ))), _Digits ) > OrderStopLoss() || OrderStopLoss()== 0 ))); //true
                   {
                     if ((OrderStopLoss() == 0.0 && NormalizeDouble (Bid - OrderStopLoss()* Point , Digits ) < NormalizeDouble ((Bid - NormalizeDouble ((iTrailDist * Point ), _Digits )), _Digits ))); //true
                      {
                       if (iTrailStep > 0.0 && OrderStopLoss() >= 0.0 && NormalizeDouble (((Bid - OrderStopLoss() - iTrailDist * Point )), Digits ) >= iTrailStep); //true
                        {
                         sl_lev = NormalizeDouble ((Bid - iTrailDist * Point ()), _Digits );
                         if ( NormalizeDouble (Bid - sl_lev * Point , _Digits ) < MarketInfo( Symbol (),MODE_STOPLEVEL)); //false
                           {
                             if (!OrderModify(Forder,OrderOpenPrice(), NormalizeDouble (Bid - NormalizeDouble ((iTrailStart * Point ), _Digits ), _Digits ),tp,OrderExpiration()));
                             Print ( "Не удалось модифицировать стоплосс ордера №" ,OrderTicket(), ". Ошибка: " , GetLastError ());
                           }
                        }
                      }
                   }
                }
             }

Pozlamalar yanlış durur, üstesinden nasıl gelinir?

 
Valeriy Yastremskiy # :

Ve dergiye bakın orada ne oluyor)

İlk başta hiçbir şey yazmadım, sonra sürekli izlemeye başladım ve çok fazla olduğu ortaya çıktı.

Teşekkür ederim.

 
Alexander Avksentyev # :

Düzeltildi, şimdi çalışıyor. Kesinlikle doğru değil, ama işe yarıyor.

Pozlamalar yanlış durur, üstesinden nasıl gelinir?

Bu verileri nereden alıyorsunuz?

OrderTakeProfit()
OrderProfit() + OrderSwap() + OrderCommission()
OrderOpenPrice()
OrderStopLoss()
 
Tretyakov Rostyslav # :

Bu verileri nereden alıyorsunuz?

Arama emrinden

 if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES))
       {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
          {
           if (OrderType() == OP_BUY) 
             {
               if (iTrailTakeProfit > 0.0 )
                {
                tp=OrderTakeProfit() + NormalizeDouble (iTrailTakeProfit * Point (), _Digits );
                 if ( NormalizeDouble (((tp - OrderTakeProfit())) < 0.0 , Digits )) return ;
                tp = OrderTakeProfit();
                } else tp = 0.0 ;
               if (OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo( Symbol (), MODE_TICKVALUE) * iTrailStart * OrderLots());
 
secret , ticaret sunucusu tarafından sipariş işlemenin sonucunu hemen döndürdü.
Böyle bir işlevi mql5'te kendim yazmam gerekir mi?

Ticaret operasyonlarının türleri

MQL5 ayrıca hemen geri döner

SiparişGönder

Emir, ticaret sunucusu tarafından başarıyla kabul edilirse, OrderSend() işlevi true değerini döndürür.