Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 111

 
Trendy :

Çok teşekkürler! Mumların özelliklerini (fazla, az vs.) karşılaştırmak için buna ihtiyacım vardı, vidaladım ve işe yarıyor. Dize veri türünü böyle nasıl karşılaştırdığını anlayamıyorum? veya çift dizge, sayıyı dizgeye çevirmiyor mu? :-D


not. Göstergede çalışmıyor - sadece komut dosyasında... Sorun şu ki, çizelgedeki programda çubuk özellikleri 5 ondalık basamakla iletilmesine rağmen, Yüksek[i] çağrıldığında sadece 4 ondalık basamak geliyor dışarı.

Yazı:

Alert("doubletostr Yüksek = ", DoubleToStr(Yüksek[1],5));
if (DoubleToStr(Yüksek[2],5)>(DoubleToStr(Yüksek[3],5)))
{
Uyarı("Diğer");
}
if (DoubleToStr(Yüksek[2],5)<(DoubleToStr(Yüksek[3],5)))
{
Uyarı("Daha Az");

}

Pulluklar, sonucu beş haneli yazar, fazla/az sayar. Sorun, göstergedeki dizi dizisinin grafikte görüntülenmemesidir. Böyle...

...yazı:

Alert("NormalizeÇift Yüksek = ", NormalizeDouble(Yüksek[1],5));

Pulluk yapmaz - sonuç - > 1.1234

Geliştiricileri anlamıyorum - neden bu kadar karmaşık hale getiriyorsunuz? Neden grafikte bu kadar çok işaret gösteriyorsa, çağrılan fonksiyonun beş işaretini çizmiyor? Basit bir çıkış yolu var mı?


Daha da ilginç:

Çevirmek

Alert("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2), Digits ));

Yazma: 1.32169 - Tamam

StrToDouble kullanarak sayısal bir değere geri dönüştürün:

Uyarı ("iFractals StrToDoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits)));

Sonuç: 1.3217

Jackie Chan ile çipi anlamadığı bir meme olmalı.)

 
hoz :

Ve Alert aslında ne veriyor?

Yazılı 0.01 Ama aslında 0...0100.
 
Trendy :

Daha da ilginç:

Çevirmek

Alert("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits));

Yazma: 1.32169 - Tamam

StrToDouble kullanarak sayısal bir değere geri dönüştürün:

Alert("iFractals StrToDoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits)));

Sonuç: 1.3217

Jackie Chan ile çipi anlamadığı bir meme olmalı.)


DoubleToStr(), mesajları istediğiniz hassasiyette görüntülemek için kullanılır. Standard Print() , Alert() , vb. 4 basamaklı hassasiyetle yazdırır.

İhtiyacınız olan kesinlikte bir sayı görmek istediğinizde, hesaplamalarda değil DoubleToStr() kullanın.

Hiçbir şeyi ileri geri çevirmeye gerek yok... ;)

 
semiromid :

Yazılı 0.01 Ama aslında 0...0100.


Çıktı daha sonra 100 * nokta = 100 * 0.00001 = 0.001pp'dir (beş basamaklı ise)

lBUY değeri yukarıda değiştirilmiştir. Bu nedenle, gördüğüm kadarıyla durum şudur:

 if (lBUY== 0.01 )

Yürütülmeyecek. Ve buna göre, lBUY değeri aynı kalacaktır.

 
artmedia70 :
j değişkeni, fonksiyonun en başında negatif bir değerle açıkça başlatılmalıdır. Dene. Daha fazla bir şeye bakmadım.


hm. Şimdiye kadar aynı. İşte sahip olduklarımız:

 //+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos( int delta)
{
   datetime lastOrderCloseTime = 0 ,               // Время закрытия последнего открытого ордера
            lastOOTHist = - 1 ;                     // Время открытия последнего открытого ордера из истории
   int j = - 1 ;
   
   for ( int i=OrdersHistoryTotal()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderType() > 1 ) continue ;               // Все удалённые отложки нас не интересуют..
  
       if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         j = i;
      }
   }
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY))
   {
       if (OrderProfit() + OrderCommission() + OrderSwap() <= 0 ) return ( false );
       if ( MathAbs (OrderProfit() - OrderClosePrice()) > delta * pt) return ( false );
       else
      {
         lastOOTHist = OrderOpenTime();
         Comment ( "FUNC isCloseByTakeLastOpenPos : lastOOTHist = " , lastOOTHist);
      }
   }
   else
   {
       Comment ( "FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории" );
       Print ( "FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории" );
       return ( false );
   }
  
   for ( int h= OrdersTotal ()- 1 ; h>= 0 ; h--)
   {
       if ( OrderSelect (h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue ;
         if (OrderSymbol() != Symbol ())       continue ;
         if (OrderType() > 1 )                 continue ;
         if (lastOOTHist < OrderOpenTime()) return ( false );   // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
       else { Print ( "FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер" ); return ( false );}
   }
   
   return ( true );
}
 
artmedia70 :

DoubleToStr(), mesajları istediğiniz hassasiyette görüntülemek için kullanılır. Standart Print(), Alert(), vb. 4 hane hassasiyetinde çıktı.

İhtiyacınız olan kesinlikte bir sayı görmek istediğinizde, hesaplamalarda değil DoubleToStr() kullanın.

Hiçbir şeyi ileri geri çevirmeye gerek yok... ;)


Bu anlaşılabilir bir durum ... şimdi ...) Ama asıl mesele şu ki, hesaplamalar için bir şekilde beşinci basamağı seçmem gerekiyor (

Ve DoubleToStr () bunun için uygun değilse, o zaman genel olarak bu olasılık bu dilde sağlanmaz mı? bu çok garip. Geliştiriciler bunu öngörmedi mi?

 
hoz :


hm. Şimdiye kadar aynı. İşte sahip olduklarımız:

Ne aynı olmamalı? ;)
 
Trendy :

Bu anlaşılabilir bir durum ... şimdi ...) Ama asıl mesele şu ki, hesaplamalar için bir şekilde beşinci basamağı seçmem gerekiyor (

Ve DoubleToStr () bunun için uygun değilse, o zaman genel olarak bu olasılık bu dilde sağlanmaz mı? bu çok garip. Geliştiriciler bunu öngörmedi mi?


Hesaplamalar düşündüğünüzden daha fazla sayı kullanıyor. Gerekli hassasiyetle görmek istiyorsanız DoubleToStr() kullanın. Başka türlü göremezsiniz.
 

Lord programcılar! Lütfen bana bir danışmanı bir göstergeyle nasıl birleştireceğimi söyle?

Örneğin, kendi algoritmasıyla işlem yapan basit bir mo_bidir.mq4 botu aldım ve algoritmasına göre işlem açmaya devam etmesi gerekiyor, ancak 3x MA sinyalinden sonra -

Örneğin, sinyale göre - Üç Hareketli Ortalama :

FastEMA>MediumEMA>YavaşEMA ( trend yukarı ) - bot satın alır

HızlıEMA<OrtaEMA<YavaşEMA ( trend aşağı ) – bot satıyor

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod = 48;

Ayrıca, beş dakikalık grafikte işlem yapmaya devam etmek için danışmana ve günlük veya 4 saatlik zaman diliminden sinyaller vermek için göstergeye ihtiyacım var ve böylece zaman dilimlerini bot ayarlarında değiştirmek mümkün olacak.

 
Tüm tüccarlara iyi günler. Belki bu konu daha önce tartışılmıştır, ancak kod tabanından bazı Uzman Danışmanlar yeni yapılarda derlenmez, derleyici bunun geri derlenmiş bir sürüm olduğuna yemin eder. Ama saçma gibi görünüyor, sürümler hiç çözülmedi