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

 
Mikalas :

Lütfen siparişin değiştirildiğini nasıl kontrol ettiğinizi söyler misiniz (sunucu yanıtı olmadan)?

Bir siparişin değiştirilmesi birkaç olayı tetikler ve tüm bu olayları kontrol ettiğim gibi, bekleyen görevin bekleme listesinde olduğu süreyi de kontrol ederim.

My Forts robotu seans başına 500-600 işlem yapıyor ve şu ana kadar herhangi bir olay kaybı olmadı, yani. bekleme listesindeki tüm görevler yürütülür ve zamanlayıcı kontrolüne ulaşmaz.

 
Yurich :

Bir olay modeli, tanımı gereği, kesinlikle güvenilir olamaz, eğer bir olay ulaşmadıysa, bu hiç var olmadığı anlamına gelmez.

Bazı olaylar ulaşır ve bazıları ulaşmazsa, komutların yürütülmesinin sonuçlarının garantili işlenmesi için, durumu bir öncekiyle karşılaştırarak kontrol edecek çift kod blokları gerekir, vb. O zaman soru şu ki, yinelenen kod kesinlikle güvenilir bir şekilde çalışıyorsa, neden olay tabanlı kod kullanıyorsunuz? Olaylara dayalı olmayan bir kod yerine neden iki kod kullanalım? Fazlalık mı?
 
Yurich :

Bir siparişin değiştirilmesi birkaç olayı tetikler ve tüm bu olayları kontrol ettiğim gibi, bekleyen görevin bekleme listesinde olduğu süreyi de kontrol ederim.

My Forts robotu seans başına 500-600 işlem yapıyor ve şu ana kadar herhangi bir olay kaybı olmadı, yani. bekleme listesindeki tüm görevler yürütülür ve zamanlayıcı kontrolüne ulaşmaz.

Şimdi bu daha ilginç ... Yani. sonuçta beklenen olayın gelmeyeceğine dair bir durum yok muydu?
 
C-4 :
Şimdi bu daha ilginç ... Yani. sonuçta beklenen olayın gelmeyeceğine dair bir durum yok muydu?
Olay kaybı olmadığını söylediğimde, bekleme listesine alınan görevlerin olaylarını (önemli olaylar zincirinden en az biri) beklediğini kastetmiştim. Mikhail'in bahsettiği olay kayıpları olabilir, olay günlüğü tutmuyorum ama olay modelimin genel işleyişini etkilemiyorlar.
 

için: Michael.

Genel olarak, durum herhangi bir yönde çözülene kadar ek bir kontrol yapmanız daha kolaydır:

 int dealsCount = 0;
///
/// С заданной периодичностью синхронизируем количество обработанных и поступивших трейдов.
///
void OnTimer ( void )
{
   if (dealsCount != HistoryDealsTotal ())
   {
       //Пришли новые трейды. их нужно обработать
       for ( int i = dealsCount; i < HistoryDealsTotal (); i++)
      {
           ulong ticket = HistoryDealGetTicket (i);
           DealChecking(ticket);
      } 
   }
}

///
/// Поступило новое событие о поступлении трейда.
///
void    OnTradeTransaction (
       const MqlTradeTransaction &    trans,
       const MqlTradeRequest &        request,
       const MqlTradeResult &         result
   )
{
   if (trans.type == TRADE_TRANSACTION_DEAL_ADD )
     DealChecking(trans.deal);
   ...
}

///
/// Обработчик трейдов.
/// \param ticket - Уникальный идентификатор трейда, который надо обработать.
void DealChecking( int ticket)
{
   
   // Далее идет нужная обработка.
   ...
   //Трейд обработан - увеличиваем количество обработанных трейдов.
   dealsCount++;
}

Bu uygulamada fazlalık yoktur, çünkü "Yeni ticaret geldi" olayının yalnızca bir gerçek işleyicisi var. Ancak çağrısı iki farklı şekilde gerçekleştirilir: bir zamanlayıcı aracılığıyla ve OnTradeTransaction olayı aracılığıyla. Herhangi bir nedenle yeni bir işlem OnTradeTransaction olayını tetiklemediyse, toplam sayı ile işlenen işlem sayısı arasında bir senkronizasyonsuzluk olacaktır. Bu durumda for döngüsü aracılığıyla işlenmemiş tüm işlemler, DealChecking işleyicisine ulaşmaya devam edecektir.

Düşünürseniz, sadece TRADE_TRANSACTION_DEAL_ADD için değil, herhangi bir etkinlik için böyle bir plan düzenlenebilir .
 
Mikalas :

...

P / S Ve "metni çıkarmanıza" ve şöyle başlayan tüm cümleyi yapmanıza gerek yok:

Alım satım işleminin türünü bilerek alım satım hesabındaki emirlerin, pozisyonların ve işlemlerin mevcut durumunun analizine karar verebilirsiniz.

Daha fazla ayrıntı her zaman Yardım'da bulunabilir.

Yurich ile diğer her şeye katılıyorum. Muhtemelen planınızı yeniden düşünmeniz gerekir.

 

Sevgili iş arkadaşlarım!

Görüşleriniz için hepinize çok teşekkür ederim!

Sadece solucan kemirir: Peki o zaman neden PLATFORM?

 

Mikalas :

O zaman neden PLATFORM?

Muhtemelen retorik bir soruydu :) Ve değilse, cevap bu başlıkta zaten verilmiştir:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

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

C-4 , 2013.12.10 12:08

tavsiye etmem. Bu hatayı MQ ile birlikte düzeltmek, tek başına plazanın altına yeni bir terminal kurmaktan çok daha kolay. Sonsuz düzeltme hatalarında ve "standart işlevsellik" yazmada boğulun. Kendi deneyimimden konuşuyorum. Belirli görevler için başka bir "bisikletin" sonucu olan Stok #'a dayalı bu kendi kendine yapılan komplekslerden birini kısmen geliştirdim. Destek servisi ile savaşmak daha iyidir ve daha kolay ve daha ucuz olacaktır.
Ayrıca terminaldeki her şeyden de memnun değilim, örneğin "son fiyat" konusundaki tutum. Ancak, kritik bir tüccar kitlesi olduğunda, MQ'nun ihtiyaçlarını dinlemeye başlayacağını umuyorum.
 
TAMAM. ve MT5'in gerçek alternatifi nedir?
 
Armen :
TAMAM. ve MT5'in gerçek alternatifi nedir?

Bu tür dalları oluşturmadan önce kendinize sormanız gereken soru tam olarak budur. MT5 gelmeden önce FORTS'ta işlem yapabilmek için en azından kendi ticaret terminalinizi yazmanız gerekiyordu. Algoritmik ticaret için pratik olarak geçerli olmayan Quick dışında bu segmentte hazır çözümler yoktur (QPile üzerinde en az bir kez 1000 satırdan fazla program yazanlar neden bahsettiğimi anlayacaktır). Yardımcı bir Stock# kitaplıkları seti vardır, ancak "kullanıma hazır" (başlatıldı ve işlem gördü) tam teşekküllü bir ticaret terminaline dönüşmedi. Aslında, ortalama ve yüksek nitelikli bir programcının Stock# kullanarak bir ticaret platformu oluşturması altı ay kadar sürecektir. Acemi bir programcı bu ürünü hiç kullanamaz. Kofite, TSLab, WealthLab gibi terminaller de var. Ancak bunların doğrudan komisyoncular tarafından desteklenmediğini açıkça anlamanız gerekir, yani. Bir sürü Quick + YourSuperTradingPlatform sizi bekliyor (DDE üzerinden veri aktarımının ardından gelen tüm sorunlarla birlikte). Ve PlazaII protokolü ile çalışmak istiyorsanız, ayda 3.000 ruble için komisyoncu size böyle bir fırsat sağlayacaktır.

Burjuva kesiminde işler daha iyi değil. Her Amerikan komisyoncusu, algoritmik ticaret imkanı olan bir ticaret platformu sağlamaz. Her Amerikalı komisyoncu Rusya'dan çalışamaz. Bir API vermeleri iyi olur. Ve yine bu API için bisikletimizi yazmaya geri dönüyoruz. Ayrıca, sağlanan platformlar çok farklı, farklı pazar segmentleri için keskinleştirilmiş. En azından aynı Wealth-Lab'ı ThinkOrSwim ile karşılaştırın. Standart yok, birleşik arayüz yok.

Genel olarak, sloganınız "sadece hayalini kurduğum barış" veya "Yeni yazılımı test etmek ve bir sonraki bisikleti yazmak uğruna ticaret yapıyorum" ise - o zaman gerçekten, MetaTrader5'ten başka bir platform arasanız iyi olur.