Geliştiriciler! Oluşturduğunuz şeyi hiç test ediyor musunuz? - sayfa 11

 

papaklas, c-4

OnTradeTransaction aracılığıyla mevcut sunucu yanıt modeli

bana uyuyor ve EA'mda çalışıyor, AMA

ilk mesajım, sunucunun (hiç) bir mesaj döndürmemesi gerçeğinden kaynaklanıyordu,

işlemin tamamlandığını (siparişin 1 tarafından doldurulduğunu) ve ikinci hatanın şuydu:

siparişin verildiğine ilişkin yanıt yerine, siparişin kısmen yerine getirildiğine (yinelendiğine) ilişkin yanıt geldi.

İşleyiciyle ilgili değil (bununla ilgili hiçbir şikayetim yok), ancak sunucudan gelen yanıtlarla ilgili ( biri hiç gelmedi ve ikincisi doğru değildi ).

EA'mdaki sunucu yanıtlarıyla çalışma modeli, sunucu yanıtlarının sırasına dayalı DEĞİLDİR, ANCAK yanıt doğru ve doğru olmalıdır.

Ne olduğunu görün (ilk gönderideki resim):

EA, 3 hacimli bir sipariş verdi.

Sipariş bir kişi tarafından dolduruldu - sunucunun yanıtları doğru.

Ayrıca, danışman siparişi değiştirdi - sunucunun yanıtı ORDER_STATE_PARTIAL idi - ancak ORDER_STATE_PLACED olması gerekirdi.

Ardından sipariş 1 kişi tarafından daha uygulandı, sunucudan HİÇBİR mesaj gelmedi.

Birkaç gün sonra (aşağıdaki resim) bu diziyi tekrarladım - sonuç değişti (muhtemelen geliştiriciler bir şeyi düzeltti),

bir işlemin gerçekleştiğine dair bir mesaj alındı (ikincisi 21:15:02.232), ancak değişiklik mesajı yanlış kaldı.

Sunucudan aynı anda üç yanıt gelmesi de çok endişe verici (21:14:53.049)!

Her şeyin tek bir iş parçacığında çalıştığı ve mesajların biriktiği açık, ama yine de .... Danışmanı durduruyorum,

mesajları almak için.

 

papaklas!

Gerçek şu ki, *.ex5 programları aşağıdaki durumlarda tek bir iş parçacığında çalışır:

bir sürü işleyici olacak, daha da kötü olacak.

 
papaklass :

Şimdi bir uzman OnTrade ve OnTradeTransaction'ın çalışmasını kontrol etti.

Piyasada bir pozisyon açmak için bir ticaret emri (piyasa emri), 3 OnTrade tetikleyicisi veya 4 OnTradeTransaction tetikleyicisi oluşur. Ve bir OnPositionOpened işleyicisinin çalışmasına ihtiyacım var.

Zararı durdur/kar al ile bir pozisyonu kapatmak için, bir - OnPositionClosed yerine 3 OnTrade tetikleyicisi veya 3 OnTradeTransaction tetikleyicisi oluşur. Fazlalık var!

Mevcut olay işleyicilerinin (OnTrade/OnTradeTransaction) bu birden fazla tetiklenmesi, "Hangi ticaret olayı meydana geldi ve ticaret işleminin sonucu nedir?" sorusuna açık bir cevap vermez; bu, bu olayların kullanıcı tarafından ek olarak işlenmesi anlamına gelir. organize edilmelidir. Soru şu: "Neden tüm bu bahçe?"

Ticaret olaylarının bu kadar aşırı çalışmasıyla, özellikle müşterilerden toplu alım satım emirlerinin gönderilmesi sırasında hatalara yol açacak çeşitli türde çarpışmalar kolayca ortaya çıkabilir.

Bu nedenle, sizin durumunuzda veya komposter (mola aşımı) durumunda olanlar beni kişisel olarak şaşırtmıyor.

OnTrade ve OnTradeTransaction olaylarının istem dışı uygulanma şekli bana 20 yıl önceki bir bölümü hatırlattı... Spectrum için yeni oyunların incelemelerini okuduğumu hatırlıyorum, özellikle bir oyunun incelemesini hatırlıyorum, burada şöyle bir şey söylendi: " ...oyundaki ses iyi çünkü onu kapatmak için bir fırsat var ... ". OnTrade ve OnTradeTransaction olaylarına karşı yaklaşık olarak aynı tavrım var, sadece onları kullanamadığınız için iyiler.
 
SWA :
OnTrade ve OnTradeTransaction olaylarının istem dışı uygulanma şekli bana 20 yıl önceki bir bölümü hatırlattı... Spectrum için yeni oyunların incelemelerini okuduğumu hatırlıyorum, özellikle bir oyunun incelemesini hatırlıyorum, burada şöyle bir şey söylendi: " ...oyundaki ses iyi çünkü onu kapatmak için bir fırsat var ... ". OnTrade ve OnTradeTransaction olaylarına karşı yaklaşık olarak aynı tavrım var, sadece onları kullanamadığınız için iyiler.

Ben ise tam tersine bu iki işleyiciyi (başarıyla) kullanıyorum!

Herhangi bir nedenle OnTradeTransaction çalışmadıysa, kontrol ederim

OnTrade'de - çok uygun, çünkü önce OnTradeTransaction tetiklenir,

ve ardından OnTrade.

 
Mikalas :

Ben ise tam tersine bu iki işleyiciyi (başarıyla) kullanıyorum!

Herhangi bir nedenle OnTradeTransaction çalışmadıysa, kontrol ederim

OnTrade'de - çok uygun, çünkü önce OnTradeTransaction tetiklenir,

ve ardından OnTrade.

Şahsen, bu kolaylık bana şüpheli görünüyor: zaman kaybı ve sunucuda ne olduğu hakkında doğru bilgi elde etmek için kanalın istemci-sunucu çağrılarıyla yüklenmesi. Sunucudan bu tür bir zorlukla yırtılan bilgiler, alındığında ilgili ve güvenilir olmaktan çıktığında bir durum ortaya çıkabilir.
Alım satım algoritması için gereken sıklıkta EA, sunucuya aşağıdaki gibi bir istek oluştursaydı, bu olayları kullanmak (en azından benim için uygun) gerçekten uygun olurdu:
 bool TradeTransaction(TIME_REQUEST);
bool Trade(TIME_REQUEST);
// где временная метка может принимать значение к примеру TIME_REQUEST=TimeTradeServer или TIME_REQUEST=TimeGMT

Ve sunucu böyle bir talebe hemen kapsamlı bilgilerle cevap verirdi...

Ancak böyle bir kolaylığın gerçekleşmesini imkansız kılan "aşılmaz nesnel nedenler" olduğunu varsayarsak, elimdekilerle yetiniyorum :)

 

Kim yapabilir... :)

Bu arada, API'yi Plaza II değişim sunucusundan indirin ve "bacakların nereden büyüdüğünü" anlayacaksınız.

 
Mikalas :

Lütfen kaba olmayın! Bu arada, zaten 10!

Ve burada yazılanları okumama hakkınız var!

Neden o zaman konu? Sadece çığlık atmak mı?

Bir hata olduğunu düşünüyorsanız, loglar ve kod ile onaylayın (resimlerinizi kimse çözemez).
Güvenilir bir çözüm bulmak istiyorsanız, söylediklerini dinleyin (olay modelini bırakın ve mevcut durumu analiz edin).

OnTradeTransaction veya OnTrade'i yalnızca ticaret durumundaki bir değişikliğe anında tepki vermek için kullanırdım. Ancak Vasily ( OnRefresh() ) tarafından önerildiği gibi tüm işlemleri tek bir işleyiciye koyardım .

İyi şanlar!

 
komposter :

Neden o zaman konu? Sadece çığlık atmak mı?

Bir hata olduğunu düşünüyorsanız, loglar ve kod ile onaylayın (resimlerinizi kimse çözemez).
Güvenilir bir çözüm bulmak istiyorsanız, söylediklerini dinleyin (olay modelini bırakın ve mevcut durumu analiz edin).

OnTradeTransaction veya OnTrade'i yalnızca ticaret durumundaki bir değişikliğe anında tepki vermek için kullanırdım. Ancak Vasily ( OnRefresh() ) tarafından önerildiği gibi tüm işlemleri tek bir işleyiciye koyardım .

İyi şanlar!

organik gübre!

1. Ya yazılan HER ŞEYİ okuyun ya da ...

2. Bu sayfalara ne yazıyorsam foruma katılma hakkımdır,

ve AÇIK RUDENESS hiçbir yerde uygun değildir!

3. Hatayı nerede ele alırsanız alın, sunucunun yanıtı olması gerektiği gibi değilse - sonuç aynı olacaktır - HATA!

4. Muhtemelen kendinizi takas etmiyorsunuz.

 
Mikalas :
AÇIK RUDE - açık bir çarpışmaya cevap! Soru nedir - cevap böyle. Ve bir kahraman olabilir...))
 

pronych ve ....

1. >> AÇIK RUDE - açık bir çarpışmaya cevap! Soru nedir - cevap böyle. Ve bir kahraman olabilir...))

Muhtemelen çevrenizdeki dünya hakkında TAM bu algıya sahipsiniz ...

2. PROGRAMCI MISINIZ, YAZAR MISINIZ?

3. Herhangi biri basit bir soruya cevap verebilir mi: Sunucu "Sırayı Değiştir" komutuna ne demeli?

4. O halde belgeler ne için? Nesne? Gözlerini kapat ve ne istersen tükür! Yine de MÜŞTERİ ÖDER (ve ona da birleşmek için)!

 bool CheckMoney()
{
   return (ВАСЯ_ПУПКИН);
}
Neden: