Türkçe (orijinal): Bir MQL dil özelliği talebinde bulunmak istiyorum. Eğer bu doğru başlık değilse, lütfen bana bildirin. Orijinal istek İngilizce forumda ...
Rusça (Google çeviri): Bir MQL dil özelliği talebinde bulunmak istiyorum.Eğer bu doğru başlık değilse, lütfen bana bildirin.Orijinal istek İngilizce forumda ...
Erişim hakları için bir hayat hilesi daha: Bir sınıfın özel alanlarına/fonksiyonlarına başka bir sınıfa erişim vermek için karşı konulmaz bir arzunuz varsa, standart MQL araçlarını kullanarak aşağıdakileri yapabilirsiniz:
Yapmamız gerekenler: B'den A::f1()'e erişim sağlamak
//--------- как былоclass A
{
int m;
int f1() {return m;} // нужно дать к нему доступ классу Bpublic:
A(int a): m(a) {}
};
class B {};
Bunu şu şekilde yeniden yazalım:
class A;
class B
{
private:
class AB
{
public:
virtualint CallAf1(A&) const = 0;
AB() {ABptr = &this;}
} static *ABptr;
// внутри B используем этот метод для получения доступа к A::f1()staticint CallAf1(A & obj)
{
return ABptr.CallAf1(obj);
}
public:
class AB2: AB {};
// вспомогательный метод - только для проверкиstaticvoid _f1_test(A & obj)
{
Print("test ", CallAf1(obj));
}
};
B::AB *B::ABptr = NULL;
class A
{
int m;
int f1() {return m;}
public:
A(int a): m(a) {}
//-- добавленоprivate:
class AB3: B::AB2
{
int CallAf1(A &obj) const {return obj.f1();}
} staticconst ABlink;
};
const A::AB3 A::ABlink;
B içinde (A)a.f1()'i çağırmak için CallAf1(a)'yı çağırın. Eğer f1()'in parametreleri varsa, bunları CallAf1()'e ekleriz.
Test edin:
voidOnStart()
{
A f(2);
B::_f1_test(f);
}
CallAf1()'i korumalı yapabilirsiniz, ancak erişim haklarında büyük bir boşluk olacaktır - kodun herhangi bir yerinde B sınıfının bir torununu ve içinde CallAf1()'i çağırmak için bir public yöntem oluşturabilirsiniz - yani herkesin A::f1()'e erişimi olacaktır.
Not: Bu yapı çok hantaldır (isterseniz makrolara sıkıştırabilirsiniz), ancak friend C++'a göre bir avantajı vardır: tüm sınıf üyelerine değil, yalnızca seçilenlere erişim sağlar.
Erişim hakları için bir hayat hilesi daha: Bir sınıfın özel alanlarına/fonksiyonlarına başka bir sınıfa erişim izni vermek için dayanılmaz bir arzunuz varsa, bunu standart MQL araçlarını kullanarak yapabilirsiniz
Buna alışmam uzun zaman aldı... sanallaştırma ile iyi hamle, teşekkürler!
fxsaber #: İçine girmek uzun zaman aldı... sanallaştırma ile iyi hamle, teşekkürler!
Başlangıçta yazmadığım tek şey, B::AB2 (ve onun soyundan gelenler) sınıfından daha fazla nesne oluşturamayacağınızdır, aksi takdirde her şey dağılır :-)
Bu Uzman Danışmanı Test Cihazında tüm semboller modunda çalıştırma
inputint inTmp = 0; // https://www.mql5.com/ru/forum/321656/page90#comment_44727856bool Res = true;
// Проверяет, нормализована ли цена по алгоритму NormalizeDouble.bool IsNDPrice( constdouble &Price )
{
return(Price == NormalizeDouble(Price, 5));
}
// Проверяет, нормализована ли цена, как при парсинге или ручном вводе.bool IsNDPrice2( constdouble &Price )
{
return(Price == (double)DoubleToString(Price, 5));
}
voidOnTick()
{
MqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick))
// Res &= IsNDPrice(Tick.bid) && IsNDPrice(Tick.ask); // OnTester == 1.
Res &= IsNDPrice2(Tick.bid) && IsNDPrice2(Tick.ask); // OnTester == 0.
}
doubleOnTester()
{
return(Res);
}
tüm fiyatların NormalizeDouble algoritması kullanılarak normalleştirildiğini gösterir. Terminalden değil de ayrıştırma veya manuel giriş yoluyla elde edilen fiyatlarla çalışıyorsanız, doğru işlem için normalleştirilmeleri gerekir. Yanılgıya düşmeye gerek yoktur.
Deinit'ten sonra, yeni EA kopyası başlamak için bir saniyeden fazla (iki saniyeye kadar) bekler. Bu kadar uzun süre beklemenin nedenleri nelerdir ve bunu hızlandırmak mümkün müdür?
SymbolInfoTick bu üç çağrının her birinde en son tiki döndürecektir. Yani, göstergeler arasında atlama yapmadan tiklerin sözde toplanması en hafif tabirle tartışmalıdır.
Bir gösterge tarafından tik toplamanın imkansızlığının kanıtı (atlama olmadan).
Türkçe (orijinal): Bir MQL dil özelliği talebinde bulunmak istiyorum. Eğer bu doğru başlık değilse, lütfen bana bildirin. Orijinal istek İngilizce forumda ...
Rusça (Google çeviri): Bir MQL dil özelliği talebinde bulunmak istiyorum. Eğer bu doğru başlık değilse, lütfen bana bildirin. Orijinal istek İngilizce forumda ...
bir dizi tek satırla nasıl doldurulur?
clr_struct clr[] = {{0x999999}, {0x999999}};Erişim hakları için bir hayat hilesi daha: Bir sınıfın özel alanlarına/fonksiyonlarına başka bir sınıfa erişim vermek için karşı konulmaz bir arzunuz varsa, standart MQL araçlarını kullanarak aşağıdakileri yapabilirsiniz:
Yapmamız gerekenler: B'den A::f1()'e erişim sağlamak
Bunu şu şekilde yeniden yazalım:
B içinde (A)a.f1()'i çağırmak için CallAf1(a)'yı çağırın. Eğer f1()'in parametreleri varsa, bunları CallAf1()'e ekleriz.
Test edin:
CallAf1()'i korumalı yapabilirsiniz, ancak erişim haklarında büyük bir boşluk olacaktır - kodun herhangi bir yerinde B sınıfının bir torununu ve içinde CallAf1()'i çağırmak için bir public yöntem oluşturabilirsiniz - yani herkesin A::f1()'e erişimi olacaktır.
Not: Bu yapı çok hantaldır (isterseniz makrolara sıkıştırabilirsiniz), ancak friend C++'a göre bir avantajı vardır: tüm sınıf üyelerine değil, yalnızca seçilenlere erişim sağlar.
Erişim hakları için bir hayat hilesi daha: Bir sınıfın özel alanlarına/fonksiyonlarına başka bir sınıfa erişim izni vermek için dayanılmaz bir arzunuz varsa, bunu standart MQL araçlarını kullanarak yapabilirsiniz
İçine girmek uzun zaman aldı... sanallaştırma ile iyi hamle, teşekkürler!
REASON_ACCOUNT olduğunda (hesap değiştirilmese, sadece yeniden giriş yapılsa bile) Uzman Danışman tamamen boşaltılır ve yeni bir kopya yüklenir.
Bu nedenle OnDeinit'teki ExpertRemove yeni kopyayı etkilemez, çünkü boşaltılmış olana dokunur.
Yeniden oturum açtıktan sonra sonuç.
Deinit'ten sonra, yeni EA kopyası başlamak için bir saniyeden fazla (iki saniyeye kadar) bekler. Bu kadar uzun süre beklemenin nedenleri nelerdir ve bunu hızlandırmak mümkün müdür?
SymbolInfoTick bu üç çağrının her birinde en son tiki döndürecektir. Yani, göstergeler arasında atlama yapmadan tiklerin sözde toplanması en hafif tabirle tartışmalıdır.
Bir gösterge tarafından tik toplamanın imkansızlığının kanıtı (atlama olmadan).
Sonuç.
Alım Satım, Otomatik Alım Satım Sistemleri ve Alım Satım Stratejilerinin Test Edilmesi Forumu
Hatalar, hatalar, sorular
fxsaber, 2023.02.14 13:11
Ne yazık ki, MQL4 henüz bu tür bir işi yapmıyor.