Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 124

 
Игорь :
Merhaba sevgililer!
MT4'te şablon kullanmadan çubukları nasıl yeniden renklendireceğimi söyle!?
Veya bir renk şeması nasıl uygulanır!?
Grafiğin bağlam menüsü , özellikler, renkler - denediniz mi?
 
Ihor Herasko :

Kafa karıştırmamak için cevabı biraz basitleştireceğim. Bu işaret (&), işlevin yürütülmesi sırasında işlev argümanının değerini değiştirebileceğini ve işlevin çağrıldığı yere farklı bir değerle dönebileceğini gösterir. Bu durumda, SaveOrder işlevi g_arrstBuyOrderInfo ve g_arrstSellOrderInfo dizilerinin yanı sıra g_nBuyOrdersCnt ve g_nSellOrdersCnt değişkenlerinin içeriğini değiştirebilir.

Teşekkür ederim. Biraz daha netleşir. Sadece tüm bunların foruma atıfta bulunmadan nasıl öğrenilebileceği açık değil. Ders kitaplarında böyle açıklamalar bulamadım.

Lütfen daha fazla öneride bulunun:

1) Derleyici - 'g_nBuyOrdersCnt' - bildirimini tipsiz yazar; 'g_nSellOrdersCnt' - tipsiz bildirim . Derleyicinin yemin etmemesi için g_nBuyOrdersCnt ve g_nSellOrdersCnt'nin global düzeyde bildirilmesi gerektiğini doğru anlıyor muyum?

2) Derleyici: ' for' - genel kapsamda ifadelere izin verilmez . Burada net değil.

3) void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) işlevinde, derleyici şunu yazar: 'arrstOrderInfo' bildirimi genel bildirimi gizler. önceki 'arrstOrderInfo' bildirimine bakın . Ayrıca çok net değil.

4) 'nOrderCnt' - bildirilmemiş tanımlayıcı . Ve gerçekten, neden hiçbir yerde ilan edilmiyor?

Ve son şey: .n ve .f'nin nereden geldiğini ve ne olduklarını hala anlamıyorum.




 
Игорь :

Merhaba sevgililer!

MT4'te şablon kullanmadan çubukları nasıl yeniden renklendireceğimi söyle!?

Veya bir renk şeması nasıl uygulanır!?

Programlı ise, ChartSetInteger() ve ChartGetInteger() işlevlerine bakın.

 
novichok2018 :

Teşekkür ederim. Biraz daha netleşir. Sadece tüm bunların foruma atıfta bulunmadan nasıl öğrenilebileceği açık değil. Ders kitaplarında böyle açıklamalar bulamadım.

Lütfen daha fazla öneride bulunun:

1) Derleyici - 'g_nBuyOrdersCnt' - bildirimini tipsiz yazar; 'g_nSellOrdersCnt' - tipsiz bildirim . Derleyicinin yemin etmemesi için g_nBuyOrdersCnt ve g_nSellOrdersCnt'nin global düzeyde bildirilmesi gerektiğini doğru anlıyor muyum?

2) Derleyici: ' for' - genel kapsamda ifadelere izin verilmez . Burası net değil.

3) void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) işlevinde, derleyici şunu yazar: 'arrstOrderInfo' bildirimi genel bildirimi gizler. önceki 'arrstOrderInfo' bildirimine bakın . Ayrıca çok net değil.

4) 'nOrderCnt' - bildirilmemiş tanımlayıcı . Ve gerçekten, neden hiçbir yerde ilan edilmiyor?

Tamamına bakarsanız, kodda nasıl görünmesi gerektiği aşağıda açıklanmıştır:

 #property strict

input        int i_nMagicNumber = 12876 ;

#define MAX_ORDERS_CNT   int ( 500 )
struct OrderInfo
{
   int       nTicket;
   int       nType;
   double    fOpenPrice;
   double    fSL;
   double    fTP;
   datetime dtOpenTime;
};

int          g_nBuyOrdersCnt, 
            g_nSellOrdersCnt;

OrderInfo   g_arrstBuyOrderInfo[MAX_ORDERS_CNT], 
            g_arrstSellOrderInfo[MAX_ORDERS_CNT];

//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert initialization function                                                                                                                                                                    |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit ()
{
   return INIT_SUCCEEDED ;
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert deinitialization function                                                                                                                                                                  |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Expert tick function                                                                                                                                                                              |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void OnTick ()
{
    FindOrders();
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Fills the orders arrays                                                                                                                                                                           |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void FindOrders()
{
   g_nBuyOrdersCnt = 0 ;
   g_nSellOrdersCnt = 0 ;
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; --i)
   {
       if (! OrderSelect (i, SELECT_BY_POS ))
         continue ;
   
       if ( OrderSymbol () != Symbol ())   // Если нужны ордера только по текущему символу, к графику которого прикреплен советник
         continue ;
   
       if ( OrderMagicNumber () != i_nMagicNumber)   // Если имеется входной параметр советника i_nMagicNumber, в котором указан ID ордеров советника
         continue ;
   
       if ( OrderType () == OP_BUY )
         SaveOrderInfo(g_arrstBuyOrderInfo, g_nBuyOrdersCnt);
       if ( OrderType () == OP_SELL )
         SaveOrderInfo(g_arrstSellOrderInfo, g_nSellOrdersCnt);
   }
}
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Saves one selected order in the specified array                                                                                                                                                   |
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt)
{
   if (nOrdersCnt >= MAX_ORDERS_CNT)
       return ;

   arrstOrderInfo[nOrdersCnt].nTicket = OrderTicket ();
   arrstOrderInfo[nOrdersCnt].nType = OrderType ();
   arrstOrderInfo[nOrdersCnt].fOpenPrice = OrderOpenPrice ();
   arrstOrderInfo[nOrdersCnt].fSL = OrderStopLoss ();
   arrstOrderInfo[nOrdersCnt].fTP = OrderTakeProfit ();

   ++nOrdersCnt;
}
 
novichok2018 :

Ve son şey: .n ve .f'nin nereden geldiğini ve ne olduklarını hala anlamıyorum.

Nokta operatörü, bir yapının veya sınıfın bir üyesine erişimi gösterir. Bu durumda yapılar.

Değişmez n ve f, değişkende depolanan veri türünü belirtmenin bir yoludur. Gerçekten de, çok sayıda değişkenle, her birinin türünü hatırlamak imkansızdır. Değişken adı, türünün bir göstergesini içeriyorsa, ezberleme ihtiyacı kendiliğinden ortadan kalkar. n - bir tamsayının işareti (Sayısaldan), f - gerçek (kayan nokta - kayan nokta sayısından). Değişken isimlerinin bu şekilde yazılmasına Macar notasyonu denir.

 
Ihor Herasko :

Nokta operatörü, bir yapının veya sınıfın bir üyesine erişimi belirtir. Bu durumda yapılar.

n ve f değişmezleri, bir değişkende depolanan veri türünü belirtmenin bir yoludur. Gerçekten de, çok sayıda değişkenle, her birinin türünü hatırlamak imkansızdır. Değişken adı, türünün bir göstergesini içeriyorsa, ezberleme ihtiyacı kendiliğinden ortadan kalkar. n - bir tamsayının işareti (Sayısaldan), f - gerçek (kayan nokta - kayan nokta sayısından). Değişken isimlerinin bu şekilde yazılmasına Macar notasyonu denir.

Vay be gibi!! Görünüşe göre g_ ve g_n sadece bir tür kısaltma değil, bunların global ve global tamsayı değişkenleri olduğunu söyleyen önekler !! Phew... Ama değişkenlerin gösteriminde neden bu tireler olduğunu hala anlayamadım... Peki, bu tür incelikleri anlamayan yeni başlayan birinin diziler, yapılar vb. kullanarak kod yazması nasıl mümkün olabilir? Basit stratejimin vahşi doğaya dalmadan basit bir dille yazılabileceğini düşündüm.

İstişarelerinize paralel olarak çalışmak için ayrıntılı (genişletilmiş) bir MK4 eğitimine bağlantı verebilir misiniz?

Karşılaştırma için Macar notasyonunu kullanmadan yukarıdaki kodu yazabilir misiniz? MT4 platformunun bunu açıkça anladığından emin misiniz?


Ve kodla ilgili bir soru: neden burada devam ediyor ;?

 for ( int i = OrdersTotal () - 1 ; i >= 0 ; --i)
   {
       if (! OrderSelect (i, SELECT_BY_POS ))
         continue ;
teoride, o zaman ilk yinelemede sıra seçilmezse, sonraki yinelemelerde seçilmeyecek ve döngü süresiz olarak devam edecek mi? Çünkü sipariş sayısı değişmez. Bir hata mesajı ile kırmak daha iyi olmaz mıydı?
 
STARIJ :
Grafiğin bağlam menüsü, özellikler, renkler - denediniz mi?

Teşekkürler, yazılımı zaten bulmam gerekiyor !!!

 
Ihor Herasko :

Programlı ise, ChartSetInteger() ve ChartGetInteger() işlevlerine bakın.

Teşekkürler yardımınızla buldum!

 
novichok2018 :

Vay be gibi!! Görünüşe göre g_ ve g_n sadece bir tür kısaltma değil, bunların global ve global tamsayı değişkenleri olduğunu söyleyen önekler !! Phew... Ama değişkenlerin gösteriminde neden bu tireler olduğunu hala anlayamadım... Peki, bu tür incelikleri anlamayan yeni başlayan birinin diziler, yapılar vb. kullanarak kod yazması nasıl mümkün olabilir? Basit stratejimin vahşi doğaya dalmadan basit bir dille yazılabileceğini düşündüm.

Bir şey yapmak için inceliklere dalmanız gerekir. Başka yolu yok.

İstişarelerinize paralel olarak çalışmak için ayrıntılı (genişletilmiş) bir MK4 eğitimine bağlantı verebilir misiniz?

MQL4 - Sergei Kovalev'in Eğitimi hakkında sadece bir eğitim biliyorum.

Karşılaştırma için Macar notasyonunu kullanmadan yukarıdaki kodu yazabilir misiniz? MT4 platformunun bunu açıkça anladığından emin misiniz?

Kodun doğru tasarımına hemen alışın )) Macar notasyonu oldukça deneyimli programcılar tarafından icat edildi.

Ve kodla ilgili bir soru: neden burada devam ediyor ;?

teoride, o zaman ilk yinelemede sıra seçilmezse, sonraki yinelemelerde seçilmeyecek ve döngü süresiz olarak devam edecek mi? Çünkü sipariş sayısı değişmez. Bir hata mesajı ile kırmak daha iyi olmaz mıydı?

Bir siparişi seçemediyseniz, bu hiçbir şekilde bir sonraki siparişi seçemeyeceğiniz anlamına gelmez. Bu nedenle, döngüye devam etmeniz önerilir.

Учебник по MQL4
Учебник по MQL4
  • book.mql4.com
В настоящее время персональный компьютер стал незаменимым помощником в жизни каждого человека. Благодаря развитию Интернета и увеличению мощности современных компьютеров открылись новые возможности во многих областях деятельности. Ещё десять лет назад торговля на финансовых рынках была доступна только банкам и узкому кругу специалистов. Сегодня...
 
Ihor Herasko :

Bir siparişi seçemediyseniz, bu hiçbir şekilde bir sonraki siparişi seçemeyeceğiniz anlamına gelmez. Bu nedenle, döngüye devam etmeniz önerilir.

Ve bir hata mesajı göstermeniz gerekmiyor mu? Siparişin neden bulunamadığını ve bundan nasıl kaçınılacağını bilmek muhtemelen zarar vermezdi?