Günlük girişi ne anlama geliyor? - sayfa 4

 
Ve henüz OrderModify'ı kontrol etmedim :(
Ve bekleyen siparişler :(((
 
Yani, epey zaman geçti, birkaç gün. Bu süre zarfında, birkaç uzman çalışmayı başardı. İşte günlükler (bu günlükleri oluşturan kod yukarıdadır). Hala geliştiricilerden herhangi bir yanıt bekliyorum. En azından "sorun anlaşıldı, düzelteceğiz" düzeyinde.

Günlük 1:
Satın almaya çalışıyor, 0 denemesi başarısız, hata 6
Satın almaya çalışıyor, 1. deneme başarısız, hata 129
Satın almaya çalışıyor, 2. deneme başarısız, hata 129
Satın almaya çalışıyorum, 3. deneme başarısız oldu, hata 129
Satın almaya çalışıyor, 4. deneme başarısız, hata 129
Zigzag satın alma hatası: 4050
2.28000000, 0.02700000, 0.000000000
Satın almaya çalışıyor, 0 denemesi başarısız, hata 6
Satın almaya çalışıyorum, 1 deneme başarılı

7. denemeden itibaren sipariş açılır. Yol boyunca, gerçeklikle ilgisi olmayan birkaç hata mesajı yakaladım.

günlük 2.
7.9.2005 11:0:15, Sinyal: sat7.9.2005 11:0:15 Satmaya çalışıyor, 0 denemesi
Sor: 1.24820000, StopLoss: 0.00600000, TakeProfit: 0.00000000
başarısız, hata 6
7.9.2005 11:0:15 Satmaya çalışıyorum, 1 deneme
Sor: 1.24820000, StopLoss: 0.00600000, TakeProfit: 0.00000000
başarılı

İkinci denemeden. Altı numaralı hata, bütün bir iş parçacığı ona ayrıldı, yüzden fazla mesaj. Geliştiriciler Roche ve Composter'ın tavsiyeleri doğrultusunda, hata oranı "her seferinde" olan hata oranı "yaklaşık beşte bir"e düşürüldü. Ama o kaldı.

günlük 3.
Uzun pozisyonu kapatmaya çalışmak, bilet: 1784257
6.9.2005 12:0:13 Bu bilet hala mevcutken sipariş verin, tekrar deneyin
6.9.2005 12:0:13 Bu bilet hala mevcutken sipariş verin, tekrar deneyin
6.9.2005 12:0:13 Bu bilet hala mevcutken sipariş verin, tekrar deneyin
6.9.2005 12:0:13 Bu bilet hala mevcutken sipariş verin, tekrar deneyin
6.9.2005 12:0:13 Bu bilet hala mevcutken sipariş verin, tekrar deneyin

Beş hata, NO hata kodu. Program, pozisyonun kapatıldığını düşündü. Bileti bir döngüde yakaladım, yakalamasaydım sorun algılanmayacaktı.

Peki, vb.
 
bu şekilde yap

void CloseBuy(dize strExpertName)
{
int nTicket = OrderTicket();
SaveComment("\r\n\tUzun pozisyon kapatılmaya çalışılıyor, bilet: " + nTicket);

int nResult = OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua);

uyku (10000);

if(nSonuç == -1)
{
int nError = GetLastError();
Alert(strExpertName + ", hata: " + nError);
}

}


Metni kalın yapmak için tırnak işaretleri kullanmak zorunda kaldım.
 
Bu yapılırsa, büyük olasılıkla hatayı maskeleyecektir. Görev, geliştiricilerin onu bulmasına yardımcı olmaktır, böylece her şey döngüler olmadan çalışır.

Uykunun anlamı, yalnızca arızaya neden olan durum ortadan kalkana kadar beklemektir (peki, orada pingler geçmeye başlayacaktır). Çünkü - alım satım işlemlerinin kontrolü "aldığı" ve geri dönene kadar serbest bırakmadığı göz önüne alındığında, bir hata varsa hemen görünmelidir. Değilse, bu bir hatadır.

Tek olası istisna, döngümün henüz kapatılmış bir pozisyonun biletini kontrol etmesidir. Ancak burada bile sistemin ideal olarak nasıl davranması gerektiği tartışılabilir.

Tekrar ediyorum, sorun sadece hataların OLUŞMASI değil, aynı zamanda tavandan hata kodlarının alınması ve bazen hiç kod olmamasıdır - işlem başarı kodu döndürülür.

Bir şey anlamadıysam, lütfen açıklayın.
 
Açıklarım. Uzman Danışmanlardan birinin şartlarına göre, mevcut Satış fiyatı, bekleyen bir satış emrinin zararı durdur değerini aşarsa, bir dizi işlem gerçekleştirilir:
1. Böyle bir emri geri çekme niyetiyle ilgili bir SMS gönderilir.
2. Siparişi iptal etme girişiminde bulunuldu
3. OrderDelete() fonksiyonunun sonucu analiz edilir ve eğer negatif ise (sipariş iptal edilmemişse), o zaman
4. Arıza ile ilgili SMS gönderilir.

Dün 2 SMS mesajı geldi, hepsi düzenlemelere göre, AMA - günlüklere göre sipariş aynı anda geri çekildi.
Bu, EA'nın, sonucu aldığından bir saniye önce sipariş iptal işleminin sonucunu almaya çalıştığı anlamına gelir. Ertesi gün patates eken ve kazıp çıkaran Çinlilerle ilgili bir şaka gibi. "Ne, çok çabuk olgunlaşıyor" sorusuna - "Hayır, ama seni ısırmak istiyorum" cevabını verdiler :)
 
Tabi ama:
1. Gerçek emirlerle ilgili tüm bu yaygarayı çıkardım. Ve eğer bu şekilde davranırlarsa, düzeltilmesi gerekir.
2. Fikir, MT Uzman Danışmanlarının gecikmeli bir döngü OLMADAN ticaret yapabilmesidir. Böyle olması gerekiyordu.
Geciktireceğim ama dedikleri gibi "tamamen zevksiz" :)
 
Şu an düşündüm. Bir siparişi değiştirme işlemi ile bu işlemin sonuçlarını kontrol etme işlemi arasında bir duraklama kullanmayı önerirsem, EA'nın eşzamansız olduğunu varsayıyorum. Yani, siparişi değiştirme girişimi ile sunucuya bir istek gönderilir ve bir yanıt beklemeden danışman algoritmaya göre daha fazla çizer. Varsayılan olarak, sunucudan bir yanıt gelene kadar, bir yanıt beklediyse - yanıt gerçek, beklemediyse - yanıt sanal olana kadar olumsuz bir yanıt ona kaydırılır.

Kendime inanmıyorum, geliştiriciler ne kadar yanıldığımı açıklayabilir mi?
 
Konsensus sağlandı. Ama bir duraklama ekledim - kesinlikle emin olmak için. En azından başarıyla kapatılmış bir siparişin biletinin varlığını kontrol etmeden önce, sunucudaki veritabanına bir çağrı olabilir, güncellemesi için zaman vermelisiniz. yanlış bile olsa :)

Biraz utanç verici, bu konudaki 37 gönderi için geliştiricilerden sadece bir tane olması ...
 
Biraz utanç verici, bu konudaki 37 gönderi için geliştiricilerden sadece bir tane olması ...

zaten verimli bir tartışmaya neden müdahale edesiniz ki?
 
zaten verimli bir tartışmaya neden müdahale edesiniz ki?

ve işte ürünler =)

test yaptı. Bir pozisyonu açan ve kapatan bir Uzman Danışman çalışır (dönüşümlü olarak - al ve sat). Tüm ticaret işlemleri arasındaki minimum duraklama 10 saniyedir.

Test süresi (Alpari): 02:00 - 09:30 (yani 7,5 saat)
Sipariş Gönderme denemesi : 996
Şanslı*: 888
Hatalar**: 108

* - "Başarılı" deneme ile şunu kastediyorum: Gönderilen sipariş bilet numarasını döndürdü, GetLastError 0 döndürdü, açık pozisyon sipariş seçimi ile başarıyla seçildi.
** - Tüm hatalar #148 "ticaret bağlamı meşgul" - Slava sonraki başlıkta ne sordu - "TradeAllowed kontrolü devre dışı bırakılırsa ne olur?". Hatalar 07:16:46'da başladı ve şu ana kadar dökülmeye devam ediyor)

-------------------------------------------------- -------------------------------------------------- --------------------

Sipariş Kapatma denemesi : 890
Şanslı*: 736
Hatalar**: 154

* - "başarılı" kapatma girişimi ile şunu kastediyorum: orderclose doğru döndürüldü, GetLastError 0 döndürdü, kapalı pozisyon pozisyonu başarıyla seçildi mode_history'de orderselect.
** - 152 hata #1 "hata yok", bir #6 ve bir #138 (alıntı yapıldı)


Yakalanan durum gerçekleşmedi... Yani. tüm kapalı pozisyonlar aslında kapatıldı.