Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
{
...
return ( NormalizeDouble (lots, 2 ));
}
Bu yorum gerçekten bana çok yardımcı oluyor ve bu faydalı ama bu bana daha fazla ondalık sayı veriyor.
(daha fazla ondalık sayı normaldir - çünkü bunu zaten okudum)
Hala ' NormalizeDouble ' için endişeleniyorum ve 'NormalizeDouble'dan daha iyi olan başka bir yol arıyorum
Teşekkürler!
Yorum yazanlara çok teşekkürler.
@whroeder1 - Yorumunuzu (/ linkler) geniş çapta araştıracağım, çok teşekkürler.
@Marco - LotSize LotStep sorunundan sonra kullanacağım. Teşekkürler!
Bu yorum gerçekten bana çok yardımcı oluyor ve bu faydalı ama bu bana daha fazla ondalık sayı veriyor.
(daha fazla ondalık sayı normaldir - çünkü bunu zaten okudum)
Hala ' NormalizeDouble ' için endişeleniyorum ve 'NormalizeDouble'dan daha iyi olan başka bir yol arıyorum
Teşekkürler!
Belki de tam olarak neyi başarmak istediğinizi belirlemek en iyisi olacaktır.
Bir fonksiyonun sipariş vermek için geçerli bir parti büyüklüğü döndürmesini istiyorsanız, NormalizeDouble() kullanmanıza gerek yoktur. Orijinal kod parçacığım veya WHRoeder's bunu sizin için başaracak. Aralarında kişisel tercih meselesi olacak ince farklılıklar vardır.
Ancak, bu lot değerinden düz bir Print() yaparsanız, 0.0700000000000001 gibi bazı "garip" sonuçlar alabilirsiniz.
Bu OrderSend() için bir sorun olmayacak ama görmeyi beklediğiniz gibi olmayabilir.
Sayıların "normal" bir şekilde görüntülenmesini istiyorsanız 2 seçeneğiniz var:
1. İşlevde NormalizeDouble() öğesini kullanabilirsiniz . Standart bir çıktı için değer beklediğiniz gibi olacaktır. Ancak (manuel olarak) yeterince ondalık basamak yazdırırsanız, sonunda sayının tam olarak düşündüğünüz gibi olmadığını göreceksiniz. WHRoeder'ın yapmaya çalıştığı nokta bu (sanırım). Bu çözüm en zarif değil, ancak en basit olanıdır. Veya...
2. Parti boyutunu olduğu gibi bırakabilir (yani NormalizeDouble kullanmayın ) ve ardından gerektiğinde değeri görüntüleme amacıyla ayarlayabilirsiniz. Neye ihtiyacınız olduğuna bağlı olarak, bunu başarmak için DoubleToStr() veya StringFormat() veya printf() kullanabilirsiniz. Bu daha esnek bir yaklaşımdır.
Gerçek değerin ve bu değerin nasıl görüntülendiğinin aynı olması gerekmediğini unutmayın. Tam olarak 0.07'yi asla depolayamazsınız:
printf ( "%.24f" ,myVal);
Sonuç: 0.0700000000000000006661338
Belki de tam olarak neyi başarmak istediğinizi belirlemek en iyisi olacaktır.
...
Vay ne güzel yazmışsın, yorumunu beğenerek neredeyse anladım.
Bu yüzden yakında yeni yorum yazacağım.
//--- ikinci kez düzenlendi
Bahsettiğim gibi LotSize ve LotStep gösterilerine ihtiyacım yok, sadece ekranda, LotSize'a ihtiyacım var ve LotStep her yerde aynı şeyi gösterebilir.
Sadece bunun için endişeleniyorum.
Eh, dinamik lotizing ile ilgiliyse, her zaman basit bir dişli kutusu takabilirsiniz.
double Lots;
Balance= AccountInfoDouble ( ACCOUNT_BALANCE );
if (Balance> 10000 )
{Lots= 10 ; Print ( " Gear Two" );}
if (Balance> 100000 )
{Lots= 100 ; Print ( " Gear Three" );}
if (Balance> 1000000 )
{Lots= 1000 ; Print ( " Gear Four" );}
if (Balance> 10000000 )
{Lots= 10000 ; Print ( " Gear Five" );}
if (Balance< 10000000 )
{Lots= 1000 ; Print ( " Gear Four" );}
if (Balance< 1000000 )
{Lots= 100 ; Print ( " Gear Three" );}
if (Balance< 100000 )
{Lots= 10 ; Print ( " Gear Two" );}
if (Balance< 10000 )
{Lots= 1 ; Print ( " Gear One" );}
if (Balance> 1000000000 )
{Lots= 0 ;}
EA'mın bir kısmını sizinle paylaşmam gerekiyor, umarım beni daha net anlamanıza yardımcı olur.
Yani, bu iyi bir kod mu, yoksa ne olduğunu bilmem gerekiyor?
Lütfen bana iyi (açıkça) tavsiye veya yardım verin, şimdiden teşekkürler.
const long & lparam , // Parameter of type long event
const double & dparam , // Parameter of type double event
const string & sparam // Parameter of type string events
)
{
_lotCalc();
//-------Process Button---------------------------------------------------------|
if ( sparam == _btnLotMinus )
{
ObjectSetInteger ( 0 , _btnLotMinus, OBJPROP_STATE , false );
_lotSize -= _lotStep;
if ( NormalizeDouble ( _lotSize, 2 ) <= 0 ) _lotSize = _lotMin;
_calcUpdade( CALC_CHANGE_LOT );
Print ( " | Lot: " , _lotSize );
return ;
} //---if Close
// ...
}
double _lotCalc()
{
//---
_lotMin = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
_lotMax = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
_lotStep = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
//---
return ( NormalizeDouble ( _lotSize, 2 ) );
}
EA'mın bir kısmını sizinle paylaşmam gerekiyor, umarım beni daha net anlamanıza yardımcı olur.
Yani, bu iyi bir kod mu yoksa ne olduğunu bilmem gerekiyor?
Lütfen bana iyi (açıkça) tavsiye veya yardım verin, şimdiden teşekkürler.
Gece geç saatlerde, derlenmemiş, denenmemiş.
_lotSize'ı ilk nerede ayarladığınızı göremiyoruz... _lotSize öğesinin her zaman _lotStep'in katı olduğundan emin olmanız gerektiğini unutmayın.
IMHO, tüm lot hesaplamalarınızı OnChartEvent() ve _lotCalc() arasında bölmek yerine bir arada tutarsanız daha iyi olur. Min / maks / adımı kontrol eden ve artırma / eksiltmeyi yapan bir fonksiyon .
const long & lparam , // Parameter of type long event
const double & dparam , // Parameter of type double event
const string & sparam // Parameter of type string events
)
{
_lotCalc();
//-------Process Button---------------------------------------------------------|
if ( sparam == _btnLotMinus )
{
ObjectSetInteger ( 0 , sparam , OBJPROP_STATE , false );
_lotSize = fmax (_lotMin, _lotSize-_lotStep);
_calcUpdade( CALC_CHANGE_LOT );
printf ( " | Lot: %.2f " , _lotSize );
return ;
} //---if Close
// ...
}
void _lotCalc()
{
//---
_lotMin = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
_lotMax = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
_lotStep = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
//---
}
Gece geç saatlerde, derlenmemiş, denenmemiş.
_lotSize'ı ilk nerede ayarladığınızı göremiyoruz... _lotSize öğesinin her zaman _lotStep'in katı olduğundan emin olmanız gerektiğini unutmayın.
IMHO, tüm lot hesaplamalarınızı OnChartEvent() ve _lotCalc() arasında bölmek yerine bir arada tutarsanız daha iyi olur. Min / maks / adımı kontrol eden ve artırma / eksiltmeyi yapan bir fonksiyon.
Bu bana çok yardımcı oldu, yani lotSize ve losStep sorunlarımı çözdü.
Çok teşekkürler dostum.
#Lot 0 (sıfır) & (çözülmüş Lot Büyüklüğü ve Lot Adımı sorunu arasında)- Kapalı
Evet lotSize kodunu unuttum, bu yüzden onu init işlevinde kullanıyorum.
_lotSize için iyi bir yer mi?
Teşekkürler!
{
_pip = Point ;
if ( Digits == 0 || Digits == 2 || Digits == 3 || Digits == 5 ) _pip = 10 * Point ;
_lotSize = _lotValue * MarketInfo ( Symbol (), MODE_MINLOT );
//...
}