ANDREY : Herkese iyi günler! MT-4 test cihazındaki algoritmayı mql4 kullanarak test ediyorum. Teklif fiyatını 5 (beş) ondalık basamakla günlüğe kaydetmek için Print() işlevine ihtiyacım var. Ve nedense sadece 4 (dört) karakter gösteriyor. Varsa hatamı nasıl düzelteceğimi söyleyin. İşte kodum.
Aynı zamanda, Print() 'i kullanarak emri açma ve kapama fiyatını (SL ve TP'ye göre ) yazdırırsanız, Print() fiyatı 5 (beş) karakterle yazdırır. Yardımlarınız için hepinize teşekkür ederim.
Zor değilse, lütfen gösterge arabelleği verilerini okumaya çalışırken neyin yanlış olduğunu anlamama yardım edin.
İşte danışmandan gelen kod:
if (IsTesting())
{
Trend = GlobalVariableGet(GV_tradesTrend);
TrendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0);
TrendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0);
if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);}
if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);}
if (Trend==1) {GlobalVariableSet(GV_Trend,1);}
if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
if (Trend==0) {GlobalVariableSet(GV_Trend,0);}
}
else
{
Trend = GetLastTrendChange();
if (Trend==1) {GlobalVariableSet(GV_Trend,1);}
if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
if (Trend==0) {GlobalVariableSet(GV_Trend,0);}
}
//+----------------------------------------------------------------------------+int GetLastTrendChange()
{
int trendType= 0 ;
int y= 0 ;
int t= 500 ;
while (y<t)
{
if ( iOpen ( NULL , 0 ,t)==y) { return ( 0 );}
trendType=FindTrendChange(y);
if (trendType== 1 || trendType==- 1 ) { return (trendType);}
y++;
}
return ( 0 );
}
//+----------------------------------------------------------------------------+int FindTrendChange( int index)
{
double trendUP,trendDN;
int trendType= 0 ;
trendUP = iCustom ( NULL , 0 , "Used\\# Once Trades Trend" , 3 ,index);
trendDN = iCustom ( NULL , 0 , "Used\\# Once Trades Trend" , 4 ,index);
if (trendUP> 0 ) {trendType= 1 ;}
if (trendDN> 0 ) {trendType=- 1 ;}
return (trendType);
}
//+----------------------------------------------------------------------------+
Gerçek hayatta ve testlerde, fonksiyon aracılığıyla son değeri aramak işe yarar, ancak test feci şekilde yavaşlar (yarı yıl testi birkaç gün sürer).
Bu nedenle, test etmek için bir ikame kullanmaya ve son değeri global bir değişkende saklamaya karar verdim - EA arabellek verilerini görmeyi bıraktı. Üstelik boş tamponlar 0'a eşit olmasına rağmen nedense EA değişkenleri EMPTY_VALUE değerlerini alır ve değişmez.
Ve veri penceresindeki arabellek satırının üzerine gelindiğinde araç ipucunda ilki 0 olmak üzere iki değer gösterilir, örneğin Değer 5; 0.0000; 0.8855.
Gösterge koduyla uğraşıyor olmama rağmen hiçbir şekilde çözemiyorum. İnternet aramaları ve belgeler yardımcı olmadı. Birisi bana bu göstergeye erişirken testin neden bu kadar yavaş olduğunu söyleyebilir mi?
Herkese iyi günler!
MT-4 test cihazındaki algoritmayı mql4 kullanarak test ediyorum. Teklif fiyatını 5 (beş) ondalık basamakla günlüğe kaydetmek için Print() işlevine ihtiyacım var. Ve nedense sadece 4 (dört) karakter gösteriyor. Varsa hatamı nasıl düzelteceğimi söyleyin.
İşte kodum.
}
Aynı zamanda, Print() 'i kullanarak emri açma ve kapama fiyatını (SL ve TP'ye göre ) yazdırırsanız, Print() fiyatı 5 (beş) karakterle yazdırır.
Yardımlarınız için hepinize teşekkür ederim.
NormalizeDouble() yerine DoubleToString( )
Sana kararımı beğenmediğimi söyledim.
tekrar yazmak için çok tembel
google "dizi kopyaları bul" - Sanırım bir şey var
NormalizeDouble() yerine DoubleToString( )
Bilgilendirme desteğiniz için çok teşekkür ederim.
TimeToStruct() kullanın
https://www.mql5.com/ru/docs/dateandtime/timetostruct
TimeToStruct() kullanın
https://www.mql5.com/ru/docs/dateandtime/timetostruct
Evet, mt4'te var
mt4'te çalışıyor
mt4'te çalışıyor
Başarılı bir şekilde tetiklenirse true dönen bu yapıdan pozisyonun açıldığı dakikanın değerini nasıl öğreneceğim hala net değil ...
tarihsaat o_open = OrderOpenTime();
MqlDateTime dt_struct;
TimeToStruct( o_open, dt_struct);
int min = dt_struct. dk;
Zor değilse, lütfen gösterge arabelleği verilerini okumaya çalışırken neyin yanlış olduğunu anlamama yardım edin.
İşte danışmandan gelen kod:
if (IsTesting()) { Trend = GlobalVariableGet(GV_tradesTrend); TrendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0); TrendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0); if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);} if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);} if (Trend==1) {GlobalVariableSet(GV_Trend,1);} if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);} if (Trend==0) {GlobalVariableSet(GV_Trend,0);} } else { Trend = GetLastTrendChange(); if (Trend==1) {GlobalVariableSet(GV_Trend,1);} if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);} if (Trend==0) {GlobalVariableSet(GV_Trend,0);} }Gerçek hayatta ve testlerde, fonksiyon aracılığıyla son değeri aramak işe yarar, ancak test feci şekilde yavaşlar (yarı yıl testi birkaç gün sürer).
Bu nedenle, test etmek için bir ikame kullanmaya ve son değeri global bir değişkende saklamaya karar verdim - EA arabellek verilerini görmeyi bıraktı. Üstelik boş tamponlar 0'a eşit olmasına rağmen nedense EA değişkenleri EMPTY_VALUE değerlerini alır ve değişmez.
Ve veri penceresindeki arabellek satırının üzerine gelindiğinde araç ipucunda ilki 0 olmak üzere iki değer gösterilir, örneğin Değer 5; 0.0000; 0.8855.
Gösterge koduyla uğraşıyor olmama rağmen hiçbir şekilde çözemiyorum. İnternet aramaları ve belgeler yardımcı olmadı. Birisi bana bu göstergeye erişirken testin neden bu kadar yavaş olduğunu söyleyebilir mi?
Bana yardım et lütfen!