Programlamayı öğrenmeme yardım et.

 

İşlemler hakkında bilgi nasıl toplanır ve kullanılır? Danışmanın tüm pozisyonları, hacimleri, karı, türü, açılış fiyatı hakkında bilgi toplamam gerekiyor. Ardından en son konum veya en büyük konum hakkındaki bilgilere dönün. Dizilere yazarken sorun yaşıyorum.

1. Dizilerle hiç uğraşmama gerek var mı?

2. Bir dizi yapı mı yoksa farklı diziler mi kullanmak daha iyidir?

3. Hala bir kenar boşluğu ile bellek ayırmanız gerekiyorsa neden dinamik bir diziye ihtiyacımız var? Statik bir dizi kullanmak daha kolay değil mi? Yoksa dinamik olmadan yapmak imkansız mı, çünkü ters indeksleme ile olabilir mi?


OOP'siz kod örneği, çünkü nedense bu yapıyı yazamadım bile, eğer zorlaştırmıyorsa, teşekkürler.

 
pribludilsa :

İşlemler hakkında bilgi nasıl toplanır ve kullanılır? Danışmanın tüm pozisyonları, hacimleri, karı, türü, açılış fiyatı hakkında bilgi toplamam gerekiyor. Ardından en son konum veya en büyük konum hakkındaki bilgilere dönün. Dizilere yazarken sorun yaşıyorum.

1. Dizilerle hiç uğraşmama gerek var mı?

2. Bir dizi yapı mı yoksa farklı diziler mi kullanmak daha iyidir?

3. Hala bir kenar boşluğu ile bellek ayırmanız gerekiyorsa neden dinamik bir diziye ihtiyacımız var? Statik bir dizi kullanmak daha kolay değil mi? Yoksa dinamik olmadan yapmak imkansız mı, çünkü ters indeksleme ile olabilir mi?


OOP'siz kod örneği, çünkü nedense bu yapıyı yazamadım bile, eğer zorlaştırmıyorsa, teşekkürler.

Neden bir şey toplasın? Konumlar arasında dolaşmanız ve bilgileri işlemeniz gerekir - ancak bunları toplamanız gerekmez. Aynı anda topladığınız her şey eski bilgilerdir.

 

1. Ticaret tarihi ile çalışırken, dizilerden genellikle vazgeçilir. Yaklaşık olarak örnekteki gibi: https://www.mql5.com/ru/docs/trading/historyselect . Bağlantının solundaki sütundaki tüm işlevleri (ve orada bulunan tüm örnekleri) keşfetmeye değer.

2. Bir dizi yapı çok uygundur. Ancak çok boyutlu dizilere uygulanabilen yerleşik işlevler - ArraySort(), vb. onunla çalışmaz.

3. Başlangıçta belirtilen dizi boyutunun yeterli olduğundan eminseniz, statik olanları da kullanabilirsiniz. Boyutları makul ise.

 
Vladimir Karputov :

Neden bir şey toplasın? Konumlar arasında dolaşmanız ve bilgileri işlemeniz gerekir - ancak bunları toplamanız gerekmez. Aynı anda topladığınız her şey eski bilgilerdir.

Hatasız bir ızgara yazmaya çalışıyorum. Pekala, yeni başlayanlar için pratik yapmaya karar verdim ve bir nedenden dolayı bir diziye giriş yapamıyorum. Belki ona ihtiyacı yoktur? Bunu yapmanın en iyi yolu nedir? Şey, döngüde düşünüyordum. İşte böyle başladı.
 int OnInit ()
{
ENUM_POSITIONS_TYPE ar [ 1000 ]; //проинициализирую нулем еще, просто я не копирую, а вручную всё пишу, и некоторые очевидные куски не пишу.
 return ( INIT_SUCCEEDED );
}
void OnDeinit ( const int reason)
{}
void OnTick ()
{
for ( int index= PositionsTotal ()- 1 ; index>= 0 ; index--)
{
ulong ticket= PositionGetTicket (index);
PositionSelectByTicket (ticket); // И вот я готов вызывать функции для выуживания данных, только я не знаю //как их вписывать в массив. 
 
Dmitry Fedoseev :

1. Ticaret tarihi ile çalışırken, dizilerden genellikle vazgeçilir. Yaklaşık olarak örnekteki gibi: https://www.mql5.com/ru/docs/trading/historyselect . Bağlantının solundaki sütundaki tüm işlevleri (ve orada bulunan tüm örnekleri) keşfetmeye değer.

2. Bir dizi yapı çok uygundur. Ancak çok boyutlu dizilere uygulanabilen yerleşik işlevler - ArraySort(), vb. onunla çalışmaz.

3. Başlangıçta belirtilen dizi boyutunun yeterli olduğundan eminseniz, statik olanları da kullanabilirsiniz. Boyutları makul ise.

Tarihten bahsetmiyorum, açık pozisyonları analiz etmek istiyorum. Nasıl daha iyi yapılır?
 
Burada oop olmadan bir ızgara yazıyorum. Açık pozisyonlardan hangisinin en büyük olduğunu ve ne tür işlemler olduğunu bulmam gerekiyor, satın al veya otur. Anladığım kadarıyla önce döngüdeki her pozisyondan veri toplamak, bir diziye yazmak, ardından diziyi analiz etmek veya ters indeksleme ile dinamik ise en son elemanı almak gerekiyor.
 
pribludilsa :
Tarihten bahsetmiyorum, açık pozisyonları analiz etmek istiyorum. Nasıl daha iyi yapılır?

Hemen hemen aynı, ancak HistorySelect() olmadan. PositionsToatal() işleviyle başlıyoruz ve ardından Position ile başlayan tüm işlevleri incelemek için bu bağlantıyı takip ediyoruz.

 
pribludilsa :
Burada oop olmadan bir ızgara yazıyorum. Açık pozisyonlardan hangisinin en büyük olduğunu ve ne tür işlemler olduğunu bulmam gerekiyor, satın al veya otur. Anladığım kadarıyla bir döngüdeki her pozisyondan veri toplamak, bir diziye yazmak, ardından diziyi analiz etmek veya ters indeksleme ile dinamik ise en son elemanı almak gerekiyor.

Dizideki konumları sıralamak ve yol boyunca maksimum ve minimumu aramak gerekli değildir.

 
Dmitry Fedoseev :

Dizideki konumları sıralamak ve yol boyunca maksimum ve minimumu aramak gerekli değildir.


Teşekkür ederim. Sadece kısa bir örnek verebilir misiniz? Karşılaştırmak için yazmamız gerekiyor mu? Ve bir dizide olmadığı gibi nereye yazmak için? Kayıt olmadan nasıl yapacağımı bulamıyorum. Daha sonra iş, döngü geçişinde bir konumla devam eder, başka bir döngü geçişindeyse başka bir konumu nasıl karşılaştırabiliriz?

 
pribludilsa :

Teşekkür ederim. Sadece kısa bir örnek verebilir misiniz? Karşılaştırmak için yazmamız gerekiyor mu? Ve bir dizide olmadığı gibi nereye yazmak için? Kayıt olmadan nasıl yapacağımı bulamıyorum. Daha sonra iş, döngü geçişinde bir konumla devam eder, başka bir döngü geçişindeyse başka bir konumu nasıl karşılaştırabiliriz?

 int Magic= 123 ;

double maxBuyPrice= 0 ;
ulong maxBuyTicket= 0 ;
double minSellPrice= DBL_MAX ;
ulong minSellTicket= 0 ;   

for ( int i= 0 ;i< PositionsTotal ();i++){
   ulong ticket= PositionGetTicket (i);
   if (ticket!= 0 ){
       long magic= PositionGetInteger ( POSITION_MAGIC );
       string symbol= PositionGetString ( POSITION_SYMBOL );
       if (magic==Magic && symbol== Symbol ()){
         long type= PositionGetInteger ( POSITION_TYPE );
         if (type== POSITION_TYPE_BUY ){
             if ( PositionGetDouble ( POSITION_PRICE_OPEN )>maxBuyPrice){
               maxBuyPrice= PositionGetDouble ( POSITION_PRICE_OPEN );
               maxBuyTicket=ticket; // тут можно и другие данные позиции запоминать в переменные
            }
         }
         else if (type== POSITION_TYPE_SELL ){
             if ( PositionGetDouble ( POSITION_PRICE_OPEN )<minSellPrice){
               minSellPrice= PositionGetDouble ( POSITION_PRICE_OPEN );
               minSellTicket=ticket; // и тут
            }      
         }
      }
   }
}

if (maxBuyTicket!= 0 ){
   
}
if (minSellTicket!= 0 ){

}
 
Dmitry Fedoseev :

Böyle bir örnek için teşekkürler.

       long magic= PositionGetInteger ( POSITION_MAGIC );
       string symbol= PositionGetString ( POSITION_SYMBOL );
       if (magic==Magic && symbol== Symbol ())

Her şeyi bu şekilde düzenlemeyi ve xs gibi yazmamayı tercih eden tek kişinin ben olduğumu sanıyordum.

       if ( PositionGetInteger ( POSITION_MAGIC )==Magic && PositionGetString ( POSITION_SYMBOL )== Symbol ())

xs - Rusçaya çevrilmiş “Bilmek istiyorum” ... kötü düşünme ...


not; Bu, programda hata ayıklarken mümkün olan her şeyi izlemeye yardımcı olur.