Mql4 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 10

 
Alexey Viktorov :

Sürprizin ne olduğunu anlayamıyorum. Dördünde, belgelerin sağında, sipariş türünün bir int değeri vardır.

OP_BUY

0

Satın almak

OP_SELL

1

Satış

OP_BUYLIMIT

2

Bekleyen sipariş SATIN AL LIMIT

OP_SELLLIMIT

3

Bekleyen sipariş SATIŞ LİMİTİ

OP_BUYSTOP

4

Bekleyen sipariş SATIN AL DUR

OP_SELLSTOP

5

Bekleyen sipariş SATIŞ DURDUR


#define OP_BALANCE 6
#define OP_CREDIT 7

Yani 6 hücreli bir diziyle bazen sınırların dışına çıkabilirsiniz.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

EA yorumunu soldan sağ köşeye taşımak istiyorum ?

fxsaber , 2018.07.10 15:13

 // Вывод комментария по примерным координатам
void CommentXY( string Str, const uint X = 0 , const uint Y = 0 )
{
   string Shift = NULL ;
  
   StringInit (Shift, X >> 2 , ' ' );
  
   if ( StringLen (Shift))
  {
     StringReplace (Str, "\n" , "\n" + Shift);
    
    Str = Shift + Str;
  }
  
   if (Y)
  {
     StringInit (Shift, Y / 14 , '\n' );
    
    Str = Shift + Str;
  }
  
   Comment (Str);  
}


Başvuru

 void OnStart ()
{
   const uint Height = 200 ;
   const uint Width = 200 ;
  
   while (! IsStopped ())
  {
    CommentXY( "Hello World!\nCommentXY" , MathRand () * Width / SHORT_MAX , MathRand () * Height / SHORT_MAX ); // Вывод комментария со сдвигом (ноль - левый-верхний угол).
    
     Sleep ( 200 );
  }
}
 
fxsaber :

Geliştiricilerden resmi bir yanıtınız var mı? Şimdiye kadar sadece sizin araştırdığınızı, düşündüğünüzü ve karar verdiğinizi görüyorum.

 
Artyom Trishkin :

Geliştiricilerden resmi bir yanıtınız var mı? Şimdiye kadar sadece sizin araştırdığınızı, düşündüğünüzü ve karar verdiğinizi görüyorum.

"Bağımsızlık" düzeyine ilişkin vardığım sonuç, bu konunun başındakilerden hiçbir şekilde üstün değildir.

için emir tipinin ve bu tipe karşılık gelen fiyatın tanımlanmasına gerek yoktur. OrderClosePrice() fiyatına yakın yazmanız yeterlidir.


Paranoyak/saçma olmayın.

 
fxsaber :

"Bağımsızlık" düzeyine ilişkin vardığım sonuç, bu konunun başındakilerden hiçbir şekilde üstün değildir.


Paranoyak/saçma olmayın.

Muhtemelen, danışmanlar bir gecede çöktüğü için "paranoyadan" muzdarip olmayanların çoğunun kodlarını acilen yeniden yazdığı zamana gelmediniz. Sıralama bağımlılığı nedeniyle. Uzun zaman önce, ama insanların hala anıları var. Karşılarına çıkanlar, sıralamadan bağımsız olarak kod yazmaya başladılar. Koşmadım - sadece forumda okudum ve not aldım.

 
Artyom Trishkin :

Muhtemelen, danışmanlar bir gecede çöktüğü için "paranoyadan" muzdarip olmayanların çoğunun kodlarını acilen yeniden yazdığı zamana gelmediniz. Sıralama bağımlılığı nedeniyle. Uzun zaman önce, ama insanların hala anıları var. Karşılarına çıkanlar, sıralamadan bağımsız olarak kod yazmaya başladılar. Koşmadım - sadece forumda okudum ve not aldım.

Ne yazık ki, bu efsane forum tarihinde herhangi bir onay bulamıyor. Ayrıca, geliştiriciler, bu tür değişikliklerin temelde olamayacağı konumlarını sürekli olarak açıkça belirtirler.


Örneğin, güvenle böyle yazabilirsiniz

 if ( OrderType () <= OP_SELL )
  ReverseType = 1 - OrderType ();


yerine

 if (( OrderType () == OP_BUY ) || ( OrderType () == OP_SELL ))
  ReverseType = ( OrderType () == OP_BUY ) ? OP_SELL : OP_BUY ;


yazmaktan çekinmeyin

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mql4 dilinin özellikleri, incelikleri ve çalışma yöntemleri

fxsaber , 2018.04.03 16:15

 double Lots[] = { 0 , 0 , 0 , 0 , 0 , 0, 0, 0 };

for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
   if ( OrderSelect (i, SELECT_BY_POS ))
    Lots[ OrderType ()] += OrderLots ();

vb.

 
fxsaber :

Ne yazık ki, bu efsane forum tarihinde herhangi bir onay bulamıyor. Ayrıca, geliştiriciler, bu tür değişikliklerin temelde olamayacağı konumlarını sürekli olarak açıkça belirtirler.

Örneğin, güvenle böyle yazabilirsiniz


Nüanslarını sürekli hatırlamanız gereken tüm bu sözde optimizasyonlar neden? Bunun gibi varsayımlara dayanmayan bir kod yazmak gerçekten bu kadar zor mu (bu ya da bu sabit denen şey ne anlama geliyor)? Derleyicinin nüansları hakkında biraz bilgi göstermelerinin yanı sıra, bu tür yapıların anlamı nedir, ancak algılanması daha kolay olanlar değil mi?

 
Ihor Herasko :

Nüanslarını sürekli hatırlamanız gereken tüm bu sözde optimizasyonlar neden? Bunun gibi varsayımlara dayanmayan bir kod yazmak gerçekten bu kadar zor mu (bu ya da bu sabit denen şey ne anlama geliyor)? Derleyicinin nüansları hakkında biraz bilgi göstermelerinin yanı sıra, bu tür yapıların anlamı nedir, ancak algılanması daha kolay olanlar değil mi?

Garip, böyle bir kodu okurken hiçbir sorunum yok. Üstelik okuması ve anlaması "kanonik"ten daha hızlıdır.

Pekala, yukarıdaki Lots[] örneği gerçek bir hazinedir ve kodun nasıl hem çok kısa hem de kesinlikle anlaşılır olabileceğini gösterir. Ve unutmayın, bu hiçbir şekilde "kanonik" bir tarz değildir.

Muhtemelen, birçok Market / Freelance çalışmasının kaynaklarına bakarsanız, sadece "kanonik" kodun ayak izleriyle değil, aynı zamanda korkunç bir performans verimsizliği ve aynı derecede önemli bir faktör - okurken kod anlama ile karşılaşırsınız.


Devam etmek için aynı silinmez sevgi, dilin olanaklarına tam bir saygısızlıktır. 100 satırlık kod, aynı şeyi yapan 200 satırlık koddan çok daha okunabilirdir. Bu nedenle başlangıçta insanlar MQL5'ten şikayet ettiler. MT5 için KB'deki MT4 kodundaki değişikliklere bakın - TS'nin mantığını anlamak çok zordur (kod çok daha büyüktür). Orijinal MT4'e gidip kodu görmek daha kolay.

 
fxsaber :

Garip, böyle bir kodu okurken hiçbir sorunum yok. Üstelik okuması ve anlaması "kanonik"ten daha hızlıdır.

Birçok yazılım şirketinde, bu tür bir kod için tüm parmaklar dövülür. Her zaman ve her yerde gerekli olan ilk şey, "ekstra okuma"nın olmamasıdır. Örneğin, fonksiyon girilirken koşul kullanılırsa:

 if (<условие>)
{
}

sonra şunu yazmanız önerilir:

 if (!<условие>)
   return ;

Bu yaklaşım yuvalama koşullarında çok yardımcı olur.

Pekala, yukarıdaki Lots[] örneği gerçek bir hazinedir ve kodun nasıl hem çok kısa hem de kesinlikle anlaşılır olabileceğini gösterir. Ve unutmayın, bu hiçbir şekilde "kanonik" bir tarz değildir.

Bir kez daha - parmaklarınızı çırpın. Sonuçta, kimse OrderType() işlevinin ne döndürdüğünü kontrol etmedi. Ya da belki -1 veya 6 döndü? Bu, her zaman uzak durmanız gereken bir şey olan derleyici özelliklerini bağlamanın bir örneğidir. Kendiniz birçok platformlar arası kod örneği veriyorsunuz. Öyleyse neden onu bu durumda bırakıyorsun? MQ'dan yeni bir derleyici çıkacak ve bu kod artık düzgün çalışmayacak.

Devam etmek için aynı silinmez sevgi, dilin olanaklarına tam bir saygısızlıktır. 100 satırlık kod, aynı şeyi yapan 200 satırlık koddan çok daha okunabilirdir. Bu nedenle başlangıçta insanlar MQL5'ten şikayet ettiler. MT5 için KB'deki MT4 kodundaki değişikliklere bakın - TS'nin mantığını anlamak çok zordur (kod çok daha büyüktür). Orijinal MT4'e gidip kodu görmek daha kolay.

Aynı duruma devam etmekle. Tür kodu:

 if ( OrderSelect (i, SELECT_BY_POS ) && OrderSymbol () == Symbol () && OrderMagicNumber () == m_nMagicNumber)
{
}

okumaktan daha zor:

 if (! OrderSelect (i, SELECT_BY_POS ))
   continue ;

if ( OrderSymbol () != Symbol ())
   continue ;

if ( OrderMagicNumber () != m_nMagicNumber)
   continue ;
Ancak her iki durumda da yürütme verimliliği aynıdır.