Göstergeyi nasıl uygulayacağını bilen söyle bana, böylece trend çizgisindeki ikinci zaman koordinatı, kırılma zamanına veya ona dokunmaya göre ayarlanır. Yani bir trend çizgisi var ve başlangıcı belli bir yerde ve ikinci koordinatın zamanı sizin takdirinize bağlı olarak ayarlanmış ancak çizginin mumla kesiştiği yerde bitmesi gerekiyor. Şekilde görüntülenen göstergede izin verildiği gibi
Ve şimdi bu sayıları tekrar bileşenlere ayırmamız gerekiyor.
Bir dizeyi sayıya dönüştürmeye çalışırken, 161188 yerine 161184 yanlış sayısını tekrar yakalıyorum
long testX = StringToDouble (CalcX); Print ( "testX=" ,testX);
Görünüşe göre çizgiyi kesmek gerekiyor, ancak en uygun şekilde nasıl yapılır?
Hiçbir şeyi ayrıştırmanıza gerek yok. Sadece normal bir sayı görmek için dizeye çeviri. Hesaplamak için bir şey yapmanıza gerek yok.
Pekala, eğer karşı konulmaz bir sapıklık arzusu varsa, o zaman dizgiyi tekrar bir StringToDouble () sayısına çevirin ve gerekli sayıda karaktere, muhtemelen _Digits'e normalleştirme ile _Point ile çarpın.
Lütfen yuvarlama sorununun çözümünü söyleyin!
Virgül sayısını kalansız çıkarmak gerekir - yuvarlamak ve bir güce yükseltmek tüm sorunu çözmez - ne yapmalı?
Örneğin, 1.44430'du ve 144430'a ihtiyacınız var.
Kodun bir parçası - olduğu gibi
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1)
Sadece _Point ile bölün
Yanlış sonucu yazdırıyor, orijinal 161188 (1.61188) 161187 yazdırma yönteminiz 1.6119 veriyor (beş ondalık basamak varsa Düşük[1] yazdırırken neden yuvarlama yapıyor?), benim sürümüm 161188.
Ama eğer görevi zorlaştırırsan
long Calc=
NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+
NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+
NormalizeDouble ( Low [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 1 - 1 );
Ardından, 161184 sayısının son kısmı - yani. 4 birim tutarsızlık
Bu İfadedeki Seçeneğiniz benzer bir değer üretir
NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+
NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+
Low [ 1 ]/ Point ;
Neyin yanlış olduğu ve nasıl düzeltileceği hakkında bir fikriniz var mı?
Yanlış sonuç yazdırılıyor, orijinal 161188 (1.61188) 161187 yazdırma yönteminiz 1.6119 veriyor (beş ondalık basamak varsa Düşük[1] yazdırırken neden yuvarlama yapıyor?), benim sürümüm 161188.
Ama eğer görevi zorlaştırırsan
long Calc=
NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+
NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+
NormalizeDouble ( Low [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 1 - 1 );
Ardından, 161184 sayısının son kısmı - yani. 4 birim tutarsızlık
Bu İfadedeki Seçeneğiniz benzer bir değer üretir
NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+
NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+
Low [ 1 ]/ Point ;
Neyin yanlış olduğu ve nasıl düzeltileceği hakkında bir fikriniz var mı?
void OnStart ()
{
string i = DoubleToString ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point , 0 );
Print (i);
Print ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point );
} /*******************************************************************/
Bu şekilde başlatın.
void OnStart ()
{
string i = DoubleToString ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point , 0 );
Print (i);
Print ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point );
} /*******************************************************************/
Evet, doğru sayı bir dize değişkeni aracılığıyla elde edilir (önceden), ancak sıfırlar eklenir 161188.000000000 bunlardan nasıl kurtulur?
Evet, doğru sayı bir dize değişkeni aracılığıyla elde edilir (önceden), ancak sıfırlar eklenir 161188.000000000 bunlardan nasıl kurtulur?
Kodumda sıfır yok. Bakın nasıl yazılmış.
Teşekkürler - sıfırı kaçırdım.
Sonuç böyle bir tasarımdı
DoubleToString ( Close [ 1 ]/ _Point , 0 )+
DoubleToString ( High [ 1 ]/ _Point , 0 )+
DoubleToString ( Low [ 1 ]/ _Point , 0 );
Print ( "CalcX=" ,CalcX);
Ve şimdi bu sayıları tekrar bileşenlere ayırmamız gerekiyor.
Bir dizeyi sayıya dönüştürmeye çalışırken, 161188 yerine 161184 yanlış sayısını tekrar yakalıyorum
Print ( "testX=" ,testX);
Görünüşe göre çizgiyi kesmek gerekiyor, ancak en uygun şekilde nasıl yapılır?
Evet, bir dize değişkeni aracılığıyla doğru sayı elde edilir (önceden), ancak sıfırlar eklenir 161188.00000000 bunlardan nasıl kurtulur ?
Yani... şablonu göster. Ve sonra orada ne olduğunu nereden biliyorsun?
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
Teşekkürler - sıfırı kaçırdım.
Sonuç böyle bir tasarımdı
DoubleToString ( Close [ 1 ]/ _Point , 0 )+
DoubleToString ( High [ 1 ]/ _Point , 0 )+
DoubleToString ( Low [ 1 ]/ _Point , 0 );
Print ( "CalcX=" ,CalcX);
Ve şimdi bu sayıları tekrar bileşenlere ayırmamız gerekiyor.
Bir dizeyi sayıya dönüştürmeye çalışırken, 161188 yerine 161184 yanlış sayısını tekrar yakalıyorum
Print ( "testX=" ,testX);
Görünüşe göre çizgiyi kesmek gerekiyor, ancak en uygun şekilde nasıl yapılır?
Pekala, eğer karşı konulmaz bir sapıklık arzusu varsa, o zaman dizgiyi tekrar bir StringToDouble () sayısına çevirin ve gerekli sayıda karaktere, muhtemelen _Digits'e normalleştirme ile _Point ile çarpın.