1) NormalizeDouble() - 0.0'ı çağırdıktan sonra ve saf haliyle 4.243991582918676e-314
Birkaç gösterge denedim. Her ikisi de eskiden iyi çalışıyordu, şimdi çalışmıyorlar.
2) çekirdeklere bağlantı ile çalıştırmayı test etmeye çalışırken genellikle sorunlar vardır (n. çalıştırmadan itibaren çalışır). resmi görmek.
TheXpert : Bir grup telepat zaten probleminizi araştırıyor.
iCustom() işlevinin gerektiği gibi çalışmadığını anlamak için telepat gerekmez.
kontrol etmek için uzmanın kodunu çalıştırabilirsiniz: çift arabellek[]; ResetLastError(); int MA_handle = iCustom(NULL, 0, "Örnekler\\Özel Hareketli Ortalama", 21, 0, MODE_SMMA); //int MA_handle = iMA(NULL, 0, 21, 0, MODE_SMMA, PRICE_MEDIAN); Print("MA_handle = ", MA_handle, " error = ", GetLastError()); int kopya = CopyBuffer(MA_handle, 0, 0, 5, arabellek); if (copy == -1) Print("Özel Hareketli Ortalama gösterge değerlerini alma başarısız denemesi"); başka for (int i = 0; i < 5; i++) Print("tampon[", i, "] = ", arabellek[i]);
ve sonuç "Özel Hareketli Ortalama göstergesinin değerlerini alma girişimi başarısız" mesajı olacaktır.
onlar. CopyBuffer, iCustom() gösterge tanıtıcısı için bir hata (-1 döndürür) verir. standart iMA() göstergesini alırsak, aynı kod çalışır!
Ukrayna : Ortaya çıkan dizinin indeksleme yönüne bakın, genişletilmesi gerekebilir.
indeksleme yönünde her şey yolunda ve önceki yapılarda da aynı şey çalıştı. 448 ve 450'de - çalışmıyor. Geliştiricilere , terminalin ana işlevselliğini daha kapsamlı bir şekilde test etmelerini defalarca önerdim, ancak terminalde derlemeden derlemeye, bazı kritik hatalar yerine, diğerleri görünür ve bunlar da kritiktir. onlar. biri tamir ediliyor, diğeri zaten normal çalışıyor, bozuluyor ve görünürde bir son yok. görünüşe göre, kararlı bir sürüm için sabırsızlanıyoruz (((
Verileri kopyalamadan önce bir fiş koyun, göstergeyi hesaplamak zaman alır, bu nedenle tutamaç doğru döndürülmesine rağmen veriler henüz hesaplanmamıştır,
genel olarak, İnternet'teki göstergeleri çağırmanız ve halihazırda OnTick() veya diğer özel işlevlerde bulunan verileri talep etmeniz önerilir.
double buffer[];
ResetLastError ();
int MA_handle = iCustom ( NULL , 0 , "Examples\\Custom Moving Average" , 21 , 0 , MODE_SMMA );
//int MA_handle = iMA(NULL, 0, 21, 0, MODE_SMMA, PRICE_MEDIAN);Print ( "MA_handle = " , MA_handle, " error = " , GetLastError ());
Sleep ( 100 );
int copy = CopyBuffer (MA_handle, 0 , 0 , 5 , buffer);
if (copy == - 1 ) Print ( "Неудачная попытка получить значения индикатора Custom Moving Average" );
elsefor ( int i = 0 ; i < 5 ; i++) Print ( "buffer[" , i, "] = " , buffer[i]);
Yine sıfır çubuğundan 5 veri kopyalıyorsunuz, ancak sıfır çubuğu 1970 civarında bir yerde (maksimum çubuk ayarlarına bağlı olarak), bu yüzden dizi indekslemeye bakın dedim.
Verileri kopyalamadan önce bir fiş koyun, göstergeyi hesaplamak zaman alır, bu nedenle tutamaç doğru şekilde döndürülmesine rağmen veriler henüz hesaplanmamıştır.
uyku(1000); // 1 saniye. iCustom()'u çağırdıktan sonra gerçekten yardımcı oldu, AMA... şimdi gecikme süresini seçmeli miyim? Hesaplama işleminin ne kadar süreceğini nereden öğrenmeliyim? çöpü işaret eden göstergenin doğru tutamağını vermek yanlış! ve daha önce, görünüşe göre, düzgün çalıştı, çünkü böyle bir sorun yoktu.
Ukrayna :
genel olarak, İnternet'teki göstergeleri çağırmanız ve halihazırda OnTick() veya diğer özel işlevlerde bulunan verileri talep etmeniz önerilir.
bu benim için iyi bir not, teşekkür ederim) çünkü bunu yapsaydım sorunu görmezdim...
Yine sıfır çubuğundan 5 veri kopyalıyorsunuz, ancak sıfır çubuğu 1970 civarında bir yerde (maksimum çubuk ayarlarına bağlı olarak), bu yüzden dizi indekslemeye bakın dedim.
Anladığım kadarıyla, referans belgelerinden CopyBuffer()'da sıfır çubuğu aslında "şimdiki zaman"dır ve zaten kopyalama sırasında dizi tersine çevrilir.
uyku(1000); // 1 saniye. iCustom()'u çağırdıktan sonra gerçekten yardımcı oldu, AMA... şimdi gecikme süresini seçmeli miyim? Hesaplama işleminin ne kadar süreceğini nereden öğrenmeliyim? çöpü işaret eden göstergenin doğru tutamağını vermek yanlış! ve daha önce, görünüşe göre, düzgün çalıştı, çünkü böyle bir sorun yoktu.
iCustom çağrısı ve bu göstergenin değerlerine erişim zamana göre ayrılmışsa, Sleep() işlevi için gecikme süresini seçmeye gerek yoktur. Ayrıca, BarsCalculated () işlevi vardır.
Bunun bir hataya bağlanması gerekip gerekmediğini bilmiyorum, ancak bence master için her tür hareketli ortalama (SignalFrAMA, SignalAMA, SignalMA, SignalDEMA, SignalTEMA) için kitaplık kodunda hatalar var, bkz. CsignalTEMA:: KısaKoşul()
//| "Voting" that price will grow. |//| INPUT: no. |//| OUTPUT: number of "votes" that price will grow. |//| REMARK: no. |//+------------------------------------------------------------------+int CSignalTEMA::LongCondition()
{
int result= 0 ;
int idx =StartIndex();
//--- analyze positional relationship of the close price and the indicator at the first analyzed barif (DiffCloseMA(idx)< 0.0 )
{
//--- the close price is below the indicatorif (IS_PATTERN_USAGE( 1 ) && DiffOpenMA(idx)> 0.0 && DiffMA(idx)> 0.0 )
{
//--- the open price is above the indicator (i.e. there was an intersection), but the indicator is directed upwards
result=m_pattern_1;
//--- consider that this is an unformed "piercing" and suggest to enter the market at the current price
m_base_price= 0.0 ;
}
}
else
{
//--- the close price is above the indicator (the indicator has no objections to buying)if (IS_PATTERN_USAGE( 0 ))
result=m_pattern_0;
//--- if the model 2 is usedif (IS_PATTERN_USAGE( 2 ) && DiffMA(idx)> 0.0 )
{
//--- the indicator is directed upwardsif (DiffOpenMA(idx)< 0.0 )
{
//--- the open price is below the indicator (i.e. there was an intersection)
result=m_pattern_2;
//--- suggest to enter the market at the "roll back"
m_base_price=m_symbol.NormalizePrice(MA(idx));
}
else
{
//--- the open price is above the indicatorif (DiffLowMA(idx)< 0.0 )
{
//--- the low price is below the indicator
result=m_pattern_2;
//--- consider that this is a formed "piercing" and suggest to enter the market at the current price
m_base_price= 0.0 ;
}
}
}
}
//--- return the resultreturn (result);
}
//+------------------------------------------------------------------+//| "Voting" that price will fall. |//| INPUT: no. |//| OUTPUT: number of "votes" that price will fall. |//| REMARK: no. |//+------------------------------------------------------------------+int CSignalTEMA::ShortCondition()
{
int result= 0 ;
int idx =StartIndex();
//--- analyze positional relationship of the close price and the indicator at the first analyzed barif (DiffCloseMA(idx)> 0.0 )
{
//--- the close price is above the indicatorif (IS_PATTERN_USAGE( 1 ) && DiffOpenMA(idx)< 0.0 && DiffMA(idx)< 0.0 )
{
//--- the open price is below the indicator (i.e. there was an intersection), but the indicator is directed downwards
result=m_pattern_1;
//--- consider that this is an unformed "piercing" and suggest to enter the market at the current price
m_base_price= 0.0 ;
}
}
else
{
//--- the close price is below the indicator (the indicator has no objections to buying)if (IS_PATTERN_USAGE( 0 ))
result=m_pattern_0;
//--- if the model 2 is usedif (IS_PATTERN_USAGE( 2 ) && DiffMA(idx)< 0.0 )
{
//--- the indicator is directed downwardsif (DiffOpenMA(idx)< 0.0 )---------------------------------------->ДОЛЖЕН БЫТЬ ЗНАК "БОЛЬШЕ" !!!
{
//--- the open price is above the indicator (i.e. there was an intersection)
result=m_pattern_2;
//--- suggest to enter the market at the "roll back"
m_base_price=m_symbol.NormalizePrice(MA(idx));
}
else
{
//--- the open price is below the indicatorif (DiffHighMA(idx)> 0.0 )
{
//--- the high price is above the indicator
result=m_pattern_2;
//--- consider that this is a formed "piercing" and suggest to enter the market at the current price
m_base_price= 0.0 ;
}
}
}
}
//--- return the resultreturn (result);
}
Ayrıca SignalMA Kitaplığında
int CSignalMA::ShortCondition()
{
.......
//--- analyze positional relationship of the close price and the indicator at the first analyzed barif (DiffCloseMA(idx)> 0.0 )
{
.......
}
else
{
//--- the close price is below the indicator (the indicator has no objections to buying)if (IS_PATTERN_USAGE( 0 ))
result=m_pattern_0;
//--- if the model 2 is used
То что ниже не корректно:
if (DiffMA(idx)< 0.0 )
{
//--- the indicator is directed downwardsif (IS_PATTERN_USAGE( 2 ) && DiffOpenMA(idx)< 0.0 )
{
.....
}
Последние 2 условия должны выглядеть так:
if (IS_PATTERN_USAGE( 2 ) && DiffMA(idx)< 0.0 )
{
//--- the indicator is directed downwardsif (DiffOpenMA(idx)> 0.0 )
{
.....
}
Bunun bir hataya bağlanması gerekip gerekmediğini bilmiyorum, ancak bence master için her tür hareketli ortalama (SignalFrAMA, SignalAMA, SignalMA, SignalDEMA, SignalTEMA) için kitaplık kodunda hatalar var, bkz. CsignalTEMA:: KısaKoşul()
Ayrıca SignalMA Kitaplığında
Çok teşekkürler. Düzeltilecektir. (Lanet olası kopyala-yapıştır)
Ve tam olarak hangisi?
Birkaç gösterge denedim. Her ikisi de eskiden iyi çalışıyordu, şimdi çalışmıyorlar.
2) çekirdeklere bağlantı ile çalıştırmayı test etmeye çalışırken genellikle sorunlar vardır (n. çalıştırmadan itibaren çalışır). resmi görmek.
Bir grup telepat zaten probleminizi araştırıyor.
iCustom() işlevinin gerektiği gibi çalışmadığını anlamak için telepat gerekmez.
kontrol etmek için uzmanın kodunu çalıştırabilirsiniz:
çift arabellek[];
ResetLastError();
int MA_handle = iCustom(NULL, 0, "Örnekler\\Özel Hareketli Ortalama", 21, 0, MODE_SMMA);
//int MA_handle = iMA(NULL, 0, 21, 0, MODE_SMMA, PRICE_MEDIAN);
Print("MA_handle = ", MA_handle, " error = ", GetLastError());
int kopya = CopyBuffer(MA_handle, 0, 0, 5, arabellek);
if (copy == -1) Print("Özel Hareketli Ortalama gösterge değerlerini alma başarısız denemesi");
başka
for (int i = 0; i < 5; i++) Print("tampon[", i, "] = ", arabellek[i]);
ve sonuç "Özel Hareketli Ortalama göstergesinin değerlerini alma girişimi başarısız" mesajı olacaktır.
onlar. CopyBuffer, iCustom() gösterge tanıtıcısı için bir hata (-1 döndürür) verir. standart iMA() göstergesini alırsak, aynı kod çalışır!
Ortaya çıkan dizinin indeksleme yönüne bakın, genişletilmesi gerekebilir.
indeksleme yönünde her şey yolunda ve önceki yapılarda da aynı şey çalıştı. 448 ve 450'de - çalışmıyor.
Geliştiricilere , terminalin ana işlevselliğini daha kapsamlı bir şekilde test etmelerini defalarca önerdim,
ancak terminalde derlemeden derlemeye, bazı kritik hatalar yerine, diğerleri görünür ve bunlar da kritiktir.
onlar. biri tamir ediliyor, diğeri zaten normal çalışıyor, bozuluyor ve görünürde bir son yok. görünüşe göre, kararlı bir sürüm için sabırsızlanıyoruz (((
Verileri kopyalamadan önce bir fiş koyun, göstergeyi hesaplamak zaman alır, bu nedenle tutamaç doğru döndürülmesine rağmen veriler henüz hesaplanmamıştır,
genel olarak, İnternet'teki göstergeleri çağırmanız ve halihazırda OnTick() veya diğer özel işlevlerde bulunan verileri talep etmeniz önerilir.
Yine sıfır çubuğundan 5 veri kopyalıyorsunuz, ancak sıfır çubuğu 1970 civarında bir yerde (maksimum çubuk ayarlarına bağlı olarak), bu yüzden dizi indekslemeye bakın dedim.
Verileri kopyalamadan önce bir fiş koyun, göstergeyi hesaplamak zaman alır, bu nedenle tutamaç doğru şekilde döndürülmesine rağmen veriler henüz hesaplanmamıştır.
uyku(1000); // 1 saniye. iCustom()'u çağırdıktan sonra gerçekten yardımcı oldu, AMA... şimdi gecikme süresini seçmeli miyim? Hesaplama işleminin ne kadar süreceğini nereden öğrenmeliyim?
çöpü işaret eden göstergenin doğru tutamağını vermek yanlış! ve daha önce, görünüşe göre, düzgün çalıştı, çünkü böyle bir sorun yoktu.
genel olarak, İnternet'teki göstergeleri çağırmanız ve halihazırda OnTick() veya diğer özel işlevlerde bulunan verileri talep etmeniz önerilir.
bu benim için iyi bir not, teşekkür ederim) çünkü bunu yapsaydım sorunu görmezdim...
Yine sıfır çubuğundan 5 veri kopyalıyorsunuz, ancak sıfır çubuğu 1970 civarında bir yerde (maksimum çubuk ayarlarına bağlı olarak), bu yüzden dizi indekslemeye bakın dedim.
Anladığım kadarıyla, referans belgelerinden CopyBuffer()'da sıfır çubuğu aslında "şimdiki zaman"dır ve zaten kopyalama sırasında dizi tersine çevrilir.
uyku(1000); // 1 saniye. iCustom()'u çağırdıktan sonra gerçekten yardımcı oldu, AMA... şimdi gecikme süresini seçmeli miyim? Hesaplama işleminin ne kadar süreceğini nereden öğrenmeliyim?
çöpü işaret eden göstergenin doğru tutamağını vermek yanlış! ve daha önce, görünüşe göre, düzgün çalıştı, çünkü böyle bir sorun yoktu.
Aşağıdaki gösterge seçeneklerini (kırmızı daire içine alınmış) programlı olarak ayarlamak mümkün müdür?
Bunu yapmanın bir yolunu bulamadı.
Bunun bir hataya bağlanması gerekip gerekmediğini bilmiyorum, ancak bence master için her tür hareketli ortalama (SignalFrAMA, SignalAMA, SignalMA, SignalDEMA, SignalTEMA) için kitaplık kodunda hatalar var, bkz. CsignalTEMA:: KısaKoşul()
Ayrıca SignalMA Kitaplığında
Bunun bir hataya bağlanması gerekip gerekmediğini bilmiyorum, ancak bence master için her tür hareketli ortalama (SignalFrAMA, SignalAMA, SignalMA, SignalDEMA, SignalTEMA) için kitaplık kodunda hatalar var, bkz. CsignalTEMA:: KısaKoşul()
Ayrıca SignalMA Kitaplığında
https://www.mql5.com/ru/forum/1111/page391#comment_67358
Çağrı dizesinin tamamını verin.
/i:<MQL5 klasörünün yolu>
Tam çağrı dizesini verin.
İşte denediğim tüm seçenekler:
Her denemeden sonra, yol boyunca bir dosyanın varlığı için bir kontrol yapıldı.
D:\Users\Дмитрий\AppData\Roaming\MetaQuotes\Terminal\ 44 D6FB562C883F0C70690F3306A3851D\MQL5\Scripts\sInstallerTestScript.ex5Yol boyunca kapsayıcı
D:\Users\Дмитрий\AppData\Roaming\MetaQuotes\Terminal\ 44 D6FB562C883F0C70690F3306A3851D\MQL5\Include\InstallerTestInclude\IncInstallerTest.mqhmevcut.
Varlık kontrolü şu fonksiyon tarafından gerçekleştirildi: