Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 225

 
Andrey Dik #:

Bu ne anlama geliyor? Biraz daha açabilir misiniz?

Kontrol etmek için zamanım oldu: evet, hile başarısız oldu, görsel ve görsel olmayan için ChartID()=12345...(test edenin sabit bir ChartID'si).

Ancak ChartGetInteger(ChartID(),CHART_WIDTH_IN_PIXELS) ekran yoksa dürüst bir -1 verir. Bunu fiziği belirlemek için kullanabilirsiniz - bir şeyin çıktısını almak için bir yer olup olmadığını. Çünkü çok fazla bayrak var ve VPS'de ne olduğunu hiç bilmiyoruz

 

Bir başka ani MQL nüansı - sanal yöntemler kuruculardan çağrılmaz.

kod içinde

class Manager;
class InfoPanel {
public:
   InfoPanel(Manager *m)    { manager=NULL; if (m!=NULL) m.Attach(&this); /* m.Attach в свою очередь должен дёрнуть виртуальный OnAttach (но не будет) */ };
   ~InfoPanel()   { };
   virtual void OnAttach(Manager *m) { PrintFormat("InfoPanel attach"); if (manager!=NULL) manager.Detach(&this); manager=m;};
   virtual void OnDetach(void) { PrintFormat("InfoPanel detach"); manager=NULL;};
   virtual void Draw(void) { PrintFormat("InfoPanel draw"); };
public:
   Manager *manager;
};
class HiLow: public InfoPanel {
public:
   HiLow(Manager *m):InfoPanel(m) { } ;
   ~HiLow() { };
   virtual void OnAttach(Manager *m) { PrintFormat("HiLow attach"); InfoPanel::OnAttach(m); };
   virtual void OnDetach(void) { PrintFormat("HiLow detach"); };
   virtual void Draw(void) { PrintFormat("HiLow draw"); };
};
class Manager {
public:
   Manager()  { };
   ~Manager() { };
   void Attach(InfoPanel *pan) {
      int id=ArraySize(panels);
      ArrayResize(panels,id+1);
      panels[id]=pan;
      panels[id].OnAttach(&this);
   }
/// some code
}
////
void OnStart()
{
   Manager *man=new Manager();
   HiLow *hilow=new HiLow(man);
   man.Draw();
   man.Detach(hilow);
   delete hilow;
   delete man;
}

bunu böyle yapamazsınız :-)) Ana sınıfın OnAttach'ı yapıcıdan çağrılacaktır; Ve normal erişim sırasında - çocuk sınıfın.


bunu anlayamazsınız, ezberlemeniz gerekir :-)

 
Maxim Kuznetsov #:

MQL'in bir başka ani nüansı - sanal yöntemler kuruculardan çağrılmaz.

kod içinde


bunu böyle yapamazsınız :-)) Ana sınıfın OnAttach'ı kurucudan çağrılacaktır; Ve normal erişim sırasında - çocuk sınıfın.


anlayamazsınız, ezberlemek zor undasınız :-)

Bunu anlamak neden imkansız? Sanal yöntemler tablosundaki bir yöntemin işaretçisinin başlatılması yapıcıda gerçekleşir. Önce ana sınıfın yapıcısı, ardından ardıl sınıfın yapıcısı çağrılır. Buna göre, ana sınıf kurucusunun gövdesi çalıştırıldığında, sanal yöntemler tablosunda işaretçi temel sınıf yönteminin adresini gösterir.

NOT. Bu, C++ öğrenmeniz gerekip gerekmediğine dair ebedi cholivar içindir. Eğer çalışırsanız, her şeyin özüne inerseniz ve tıkıştırmazsanız, bu tür şeyler kendiliğinden ortaya çıkar).

 
Vladimir Simakov #:

Bunu anlamak neden imkansız? Sanal yöntemler tablosundaki bir yöntemin işaretçisinin başlatılması yapıcıda gerçekleşir. Önce ana sınıfın yapıcısı, ardından ardıl sınıfın yapıcısı çağrılır. Buna göre, ana sınıf kurucusunun gövdesi çalıştırıldığında, işaretçi sanal yöntemler tablosundaki temel sınıf yönteminin adresini gösterir.

NOT. Bu, C++ öğrenip öğrenmemeniz gerektiği konusundaki ebedi tartışma içindir. Eğer çalışırsanız, bir şeylerin özüne inerseniz ve tıkıştırmazsanız, bu tür şeyler kendiliğinden ortaya çıkar).

Her şeyin mümkün olduğu senaryolardan sonra, "bir kurucunun sanal olamaması" biraz şaşırtıcıdır :-))

 
Maxim Kuznetsov #:

Her şeyin mümkün olduğu senaryolardan sonra, "bir kurucunun sanal olamaması" biraz şaşırtıcı :-)

Sizin "sorununuz" için böyle bir çözüm var: https: //habr.com/ru/post/64369/.

NOT. Elbette tam olarak aynı değil, ancak genel bir düşünce yönü olarak

Виртуальный конструктор
Виртуальный конструктор
  • 2009.07.13
  • habr.com
Все мы знаем, что в C++ нет такого понятия как виртуальный конструктор , который бы собирал нужный нам объект в зависимости от каких-либо входных параметров на этапе выполнения. Обычно для этих целей используется параметризованный фабричный метод (Factory Method) . Однако мы можем сделать «ход конем» и сымитировать поведение виртуального...
 
Maxim Kuznetsov #:

Her şeyin mümkün olduğu senaryolardan sonra, "bir kurucunun sanal olamaması" biraz şaşırtıcı :-)

Beklenmedik mi?

HiLow::OnAttach'ın çağrıldığını düşünün. HiLow'da yeni alanlar olsaydı ve OnAttach bunları okusaydı, "başlatılmamış değişkenlerin kullanımı" olurdu (çünkü HiLow kurucusu henüz çalışmaya başlamadı).

 

POSITION_TIME_UPDATE yalnızca bir pozisyonun lotunun değiştirilmesiyle ilgilidir. Örneğin, herhangi bir hesap türünde bir pozisyonun kısmi olarak kapatılması veya netleştirmede yeniden doldurulması.

SL/TP seviyelerindeki değişiklikler POSITION_TIME_UPDATE'i etkilemez.

Başka bir deyişle, POSITION_TIME_UPDATE yalnızca İşlem Geçmişi - işlemlere yansıtılan değişikliklerden etkilenir. SL/TP seviyeleri bu tür değişikliklere ait değildir, bu nedenle onları etkilemezler.


Evet, gerçekten de gerçek bir hesapta öyle.

Ancak Uzman Danışmanı oluşturduktan sonra, test cihazında deniyorum ve test cihazında SL / TP seviyelerindeki değişikliklerin POSITION_TIME_UPDATE'i etkilediği ortaya çıkıyor.

İşte günlüklerden bir alıntı.

Burada pozisyon açma zamanını sarı renkle ve ardından (bir sonraki tikte) SL ve TP'yi değiştirme (yerleştirme) zamanını kırmızı renkle vurguladım. Sonra POSITION_TIME ve POSITION_TIME_UPDATE zamanlarını yazdırmayı kullanarak kontrol ediyorum -bunlar farklı.

LQ      0       11:54:55.049    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.10 12:00:00   CTrade::OrderSend: market buy 0.20 AUDCAD [done at 0.95325]
CL      0       11:54:55.049    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.10 12:00:00   FnPositionOpen: Тикет открытой сделки: 6; Тикет открытого ордера: 7
PD      0       11:54:55.049    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.10 12:00:00   Order #7  State: ORDER_STATE_FILLED
JN      0       11:54:55.063    Trade   2021.05.10 12:00:01   position modified [#7  buy 0.2 AUDCAD 0.95325 sl: 0.94901 tp: 0.96150]
PM      0       11:54:55.064    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.10 12:00:01   CTrade::OrderSend: modify position #7  AUDCAD (sl: 0.94901, tp: 0.96150) [done]
HP      0       11:54:55.064    Trade   2021.05.10 12:00:01   sell stop 0.2 AUDCAD at 0.94901 tp: 0.94492 (0.95319 / 0.95324 / 0.95319)
HN      0       11:54:55.065    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.10 12:00:01   CTrade::OrderSend: sell stop 0.20 AUDCAD at 0.94901 tp: 0.94492 [done]
GR      0       11:54:55.074    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.10 12:00:02   ================ 1620648000<1620648001

SL ve TP modifikasyonunun aynı saniye içinde olduğu durumlarda, POSITION_TIME ve POSITION_TIME_UPDATE süreleri elbette aynıdır.

RH      0       12:11:44.946    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.07 16:00:00   CTrade::OrderSend: market buy 0.20 AUDCAD [done at 0.95198]
NR      0       12:11:44.946    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.07 16:00:00   FnPositionOpen: Тикет открытой сделки: 5; Тикет открытого ордера: 5
HM      0       12:11:44.946    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.07 16:00:00   Order #5  State: ORDER_STATE_FILLED
KG      0       12:11:44.946    Trade   2021.05.07 16:00:00   position modified [#5  buy 0.2 AUDCAD 0.95198 sl: 0.94537 tp: 0.96496]
CJ      0       12:11:44.947    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.07 16:00:00   CTrade::OrderSend: modify position #5  AUDCAD (sl: 0.94537, tp: 0.96496) [done]
KK      0       12:11:44.956    Trade   2021.05.07 16:00:00   sell stop 0.2 AUDCAD at 0.94537 tp: 0.93890 (0.95195 / 0.95199 / 0.95195)
OE      0       12:11:44.957    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.07 16:00:00   CTrade::OrderSend: sell stop 0.20 AUDCAD at 0.94537 tp: 0.93890 [done]
RK      0       12:11:44.957    eMAEnvelopeTrade (AUDCAD,M30)   2021.05.07 16:00:00   ================ 1620403200<1620403200
 
Andrey Kaunov #:
test cihazında, SL/TP seviyelerindeki değişiklikler POSITION_TIME_UPDATE'i etkiler

Bilgi için teşekkürler!

 
fxsaber #:

Emirler kısmen uygulandığında ORDER_TIME_SETUP_MSC alanı değişir.

Sonuç olarak, DEAL_TIME_MSC, siparişinin ORDER_TIME_SETUP_MSC 'sinden daha az olabilir.

Örnek.


 
Lütfen bana dizindeki tüm dosyaları nasıl derleyeceğimi söyler misiniz?
Neden: