MQL5'te birlikte öğrenme ve yazma - sayfa 18

 
Yedelkin :

Eh, anlamını anladınız. Size titizlikle söylüyorum, hafızadan kontrol edebilirsiniz: OrderSend() işlevi bir boole değeri döndürür. Bu durumda istek başarılı bir şekilde doğrulanırsa sipariş bileti MqlResult yapısının değişkenine yazılır. Kendim için buna "sipariş bileti işlevini iade etme" diyorum. İşte kaynağa bir bağlantı: " OrderSend() işleviyle bir satın alma talebi gönderirken, istek başarıyla doğrulandığında oluşturulan sipariş biletini hemen öğrenebilirsiniz ."

Ve moderatörün inisiyatifinde konudan uzaklaşırsak, o zaman benzer bir cevap tutun: MQL5 hakkında bir eğitim yok ve beklenmiyor, bu nedenle kendinize hangi öğreticiyi aradığınız belli değil. ...Belki de esası tartışmak için, ya da hiç değil? :)

"Yasak" hakkındaki cevap için - teşekkürler, anlıyorum.

Sunucudan bir yanıt alındığında ne olduğu tam olarak doğru anlaşılmadı.

OrderSend() gerçekten de bir boole değeri döndürür, ancak bu en önemli şey değil, ana şey sunucudan bir yanıt alırken doldurulan yapıdır.

Evet, gerçekten, yapıya bir bilet kaydedilir (sadece siparişler değil, aynı zamanda fırsatlar da), ancak yapıdaki bilgilerin geri kalanından gerçekten daha mı önemli?

Yanıtın yapısını düşünün. Bana göre resim böyle bir şey

 struct MqlTradeResult
{
//Очень важная информация
uint      retcode;           // Код результата операции
//Важная информация (важна при успешном запросе)
ulong     deal;          // Тикет сделки, если она совершена
ulong     order;         // Тикет ордера, если он выставлен
//Малосущественная информация (важна при успешном запросе, а также в случае реквоты)
double    volume;        // Объем сделки, подтверждённый брокером
double    price;         // Цена в сделке, подтверждённая брокером
//Малосущественная информация (важна при реквоте)
double    bid;           // Текущая рыночная цена предложения (цены реквота)
double    ask;           // Текущая рыночная цена спроса (цены реквота)
//Не существенная информация
string    comment;       // Комментарий брокера к операции (по умолчанию заполняется расшифровкой)
};

not

MqlResult yerine MqlTradeResult yapısını çağırmak daha doğrudur (bence çok önemli olmasa da).

İstek doğruysa ve yürütülürse, sunucunun bu işlem parametrelerini kesme "hakkına" sahip olması durumunda hacim ve fiyat önemlidir ve EA'dan sunucunun eylemlerine bir tepki verilmesi gerekebilir.

 
sergeev :

Ne yazık ki, hala alamadım.

nedense dönüş yapısında bir "zaman" alanına ihtiyacınız var. Görünen sırada zamanı kullanın. Bu, küçük bir geçmişi kontrol etmek için yeterlidir.

" OrderSend() işleviyle bir satın alma talebi gönderirken, talep başarıyla doğrulandığında oluşturulan sipariş biletini hemen öğrenebilirsiniz. Ancak aynı zamanda siparişin kendisi henüz müşteri terminalinde görünmeyebilir ve OrderSelect işlevini kullanarak seçme girişimi başarısız olur ". İkinci cümleden, bileti bilinse bile, sipariş özellikleriyle (sipariş süresi) çalışmanın her zaman mümkün olmaktan uzak olduğu sonucu çıkar. Bu nedenle "zamanı görünen sırada kullanın" ideal bir çözüm değildir. Ayrıca, sipariş hiç açılmayabilir. Benim yaklaşımım, tarihe girmeden önce siparişe ne olduğuna bakılmaksızın "küçük geçmiş kontrol problemini" çözecekti.
 
Interesting :

MqlResult yerine MqlTradeResult yapısını çağırmak daha doğrudur (bence çok önemli olmasa da).

Ders kitabını inceleme tavsiyesine cevaben "bellekten" yazdım
ilginç :

Sunucudan bir yanıt alındığında ne olduğu tam olarak doğru anlaşılmadı.

OrderSend() gerçekten de bir boole değeri döndürür, ancak bu en önemli şey değil, ana şey sunucudan bir yanıt alırken doldurulan yapıdır.

Evet, gerçekten, yapıya bir bilet kaydedilir (sadece siparişler değil, aynı zamanda fırsatlar da), ancak yapıdaki bilgilerin geri kalanından gerçekten daha mı önemli?

Kimin daha iyi anladığını tartışmayalım :) Sergeev'e verdiğim cevaba bakın. Ve burada tekrar ediyorum: stratejinin mantığına göre, sadece bir bilete ve siparişin üretim için kabul edildiği zamana ihtiyacım var. Altını çizdiğin şey ne biri ne de diğeri. Retcode gibi "çok önemli bilgiler", genel olarak bahsettiğim şey olan geçmişin indirilmesini optimize etmeye hiç yardımcı olmuyor.
 
Yedelkin :
" OrderSend() işleviyle bir satın alma talebi gönderirken, talep başarıyla doğrulandığında oluşturulan sipariş biletini hemen öğrenebilirsiniz. Ancak aynı zamanda siparişin kendisi henüz müşteri terminalinde görünmeyebilir ve OrderSelect işlevini kullanarak seçme girişimi başarısız olur ". İkinci cümleden, bileti bilinse bile, sipariş özellikleriyle (sipariş süresi) çalışmanın her zaman mümkün olmaktan uzak olduğu sonucu çıkar. Bu nedenle "zamanı görünen sırada kullanın" ideal bir çözüm değildir. Ayrıca, sipariş hiç açılmayabilir. Benim yaklaşımım, tarihe girmeden önce siparişe ne olduğuna bakılmaksızın, küçük bir geçmişi kontrol etme sorununu çözecekti.

Bilmiyorum, bu kadar önemli mi, geliştiricilerden MqlTradeResult yapısına eklemeler yapmasını isteyin (işlemin tamamlandığı veya siparişin verildiği zaman şeklinde).

Bunun neden gerekli olduğunu anlamasam da, OnTrade()'e parametreler eklemek daha iyidir.


 
Interesting :

Bilmiyorum, bu kadar önemli mi, geliştiricilerden MqlTradeResult yapısına eklemeler yapmasını isteyin (işlemin tamamlandığı veya siparişin verildiği zaman şeklinde).

Yani en başından beri bunu sordum :) Emsali var mıydı tabiri caizse :)

Ek. Birisi altı ay önce böyle bir soruyu gündeme getirmiş olsaydı, kişi yine de özelliğin nispeten kısa sürede ortaya çıkmasını umabilirdi ve gelecek yılı beklemek, tarih için bir değişkeni kendiniz tanıtmak daha kolaydır. Tamamen doğru olmayacak, ama yine de.

ilginç :

Bunun neden gerekli olduğunu anlamasam da, OnTrade()'e parametreler eklemek daha iyidir.

Şahsen Ticaret yapısının/parametrelerinin görünmesi için daha fazla bekleyemem. Ve 9 ay bekledim. Sahip olduklarınızdan kurtulmanız gerekiyor.

 
Yedelkin :
Ders kitabını çalışma tavsiyesine cevaben "hafızadan" yazdım Peki, kimin doğru anlayışa sahip olduğunu tartışmayalım :) Sergeyev'e verdiğim cevaba bakın. Ve burada tekrar ediyorum: stratejinin mantığına göre, sadece bir bilete ve siparişin üretim için kabul edildiği zamana ihtiyacım var. Altını çizdiğin şey ne biri ne de diğeri. Retcode gibi "çok önemli bilgiler", genel olarak bahsettiğim geçmişin indirilmesini optimize etmeye hiç yardımcı olmuyor.

1. OrderSend() ve geçmişi yüklemek, ancak bu yerden daha ayrıntılı olarak (aksi takdirde neden bahsettiğimi yakalayamıyorum ve çimler bitmiş gibi görünüyor).

2. Mantıksal olarak eğer analiz sadece OrderSend() sonucu üzerinde yapılıyorsa prosedür aşağıdaki gibidir.

a) Yeniden kodu kontrol ederek, gerçekte ne olduğunu bilmeniz gerekir;

b) Sonuç başarılı olursa Bilet, hacim ve fiyat alırız. Bir teklif varsa, yeni fiyatlar alırız (bize nasıl uyduklarını kontrol ederiz)

c) Cevap bize uyuyorsa ve hata yoksa bilet ve süre alıyoruz. Sunucu zamanını alabilir veya geçmişten çıkarmaya çalışabilirsiniz (şu anda yaklaşık hesaplamalar için sunucu zamanını bulmak daha uygundur);

d) Cevaptan memnun kalmazsak (veya sadece kısmen memnun kalırsak) - hacim uyuşmuyorsa veya yeniden teklif aldıysak, aşağıdaki eylemlere karar veririz.

not

Kısacası, ne söylenirse söylensin, ancak retcode'a bakmak iyi bir şeydir.

 
Interesting :

ne hakkında olduğunu anlayamadığım bir şey ve çimler bitmiş gibi görünüyor).

Tartışmayı en başından izleyin. ...Kimse retcode'un önemini inkar edemez, ancak basit çözümlerle onsuz yapmak oldukça mümkündür.
 
Yedelkin :
Tartışmayı en başından izleyin. ...Kimse retcode'un önemini inkar edemez, ancak basit çözümlerle onsuz yapmak oldukça mümkündür.

Önerilen seçenek sizin için ne kadar kritik?

c) Cevap bize uyuyorsa ve hata yoksa bilet alıyoruz. Zaman akım alınabilir;

 
sergeev :

Önerilen seçenek sizin için ne kadar kritik?


Bu standart seçenek ( yukarıda bahsedilen dezavantajları vardır) + zaman tasarrufudur. Geri kodunu kontrol etmem gerekmediğinden, geriye kalan tek soru zamandan tasarruf etmek: ya kendi başıma ya da MqlTradeResult yardımıyla estetik olarak. Aslında soru da bu :)
 
Yedelkin :
Bu standart seçenek ( yukarıda bahsedilen dezavantajları vardır) + zaman tasarrufudur. Geri kodunu kontrol etmem gerekmediğinden, geriye kalan tek soru zamandan tasarruf etmek: ya kendi başıma ya da MqlTradeResult yardımıyla estetik olarak. Aslında soru da bu :)

İstek başarıyla tamamlanırsa, işlem er ya da geç tarihe geçecek ve sipariş listede görünecektir. Bu nedenle, tam olarak ne ve nasıl olduğunu bulmak mümkün olacaktır.

Ve önerilen seçenek, tabiri caizse, ihtiyaç duyulan ve gereksiz eylemlerden muzdarip olmayan yaklaşık olarak tüm verileri hemen almak isteyenler için "acele halindedir".

Tabii ki, muhtemelen sunucunun yanıtına başka bir şey eklemeye değer, ancak geliştiricilerin bu seçeneği kabul etmemesinin bir dizi özelliği ve nedeni var (ve istek, üzgünüm, iyi temellendirilmemiş ve ikna edici argümanlarla destekleniyor).

not

Yine de, bir şeyi kaçırmış olabilirim ve geliştiriciler bunun oldukça uygun olduğuna karar verdiler.