[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 404

 
hoz :
1. Eh, yeni veriler geldiyse, ihtiyacımız olan şey bu, değil mi?
2. Evet, 0. çubuktan veriye ihtiyacınız var, evet. MarketInfo(), verileri 0. çubuktan çeker, aksi halde değil. O zaman neden onları bir şeyle karşılaştıralım?

3. Tarihte bir boşluk olsa bile, bu mevcut hesaplamaları hiçbir şekilde etkilemeyecektir. Ve bir delik olduğu anda yansıyacaktır. Onlar. mevcut Ask'ı alırsak, o zaman birkaç bar önce fiyatların ne olduğunu derinden morarırız (resmi olarak değil, belirli bir piyasa değişkeniyle ilgili şu an için demek istiyorum, çünkü RefreshRates() mevcut ile ilgili olarak kendi kendine işlev görür. 0'da, bar tamamen haklı çıkacak!

Tabii ki derine indim, ama en iyi nasıl davranacağımı anlamak istiyorum.

4. İşte siz Vadim, yukarıda işlevi yanlış yazdığımı söylediniz, eklenen satırlarla tekrar çoğaltacağım:

 double fGet_TradePrice( int fi_price,       // Цена: 0 - Bid; 1 - Ask
                       string fs_symbol)   // валютная пара
{
 double ld_price = 0.0 ;
   
switch (fi_price)
 {
   case 0 :
   {
     if (fs_symbol == Symbol ())
     {
       RefreshRates(); // Зачем этот тормоз без обработки возвращаемого значения?
      ld_price = Bid;
     }
     else ld_price = MarketInfo(fs_symbol, MODE_BID); // <-- Этого достаточно.
   } 
   case 1 :
   {
     if (fs_symbol == Symbol ())
     {
       RefreshRates(); // Зачем этот тормоз без обработки возвращаемого значения?
      ld_price = Ask;
     }
     else ld_price = MarketInfo(fs_symbol, MODE_ASK); // <-- Этого достаточно.
   }
 }
if (ld_price != 0 ) return (ld_price); // Некорректно! Что функция будет возвращать, если цена равна нулю?
}

Size göre yanlış olan ne?

1. Veri alınmadıysa ve aynı zamanda tüm veriler oradaysa, ancak bu konuda hiçbir şey bilmiyor muyuz? YANLIŞ döndürür. Nasıl değerlendirilir? Veri eksikliği veya bir hata veya veri var mı?
2. 1. nokta sorununu çözmek için kontrol etmek gerekir.
3. Sürecin dinamiklerini dikkate almayın. Bilgisayarı, terminali açtı. Geldi, göründüğü gibi, tüm veriler. Her şey sıfır çubuğunda birleşti. Sinyaller bulundu. Anlaşma yapılır. Tüm verilerin gelmediği ortaya çıktı. 5 dakika sonra eksik çubuklar 1,2,3,4,5 sayılarıyla geldi. Sinyal gitti. Ne yapalım?

4. Kırmızı işaretli. Radyo düğmesinde geçersiz bir tanımlayıcı seçmenin olası hatası henüz ele alınmadı. Yukarıda olması gerektiği gibi yazdım.

Sonucu beklemeden RefreshRates()'i çağırmak işe yaramaz. Uzun bir süre gerçekleşmeyebilir.

 
Herkese merhaba. Bir sorum var. Birkaç hesapta işlem yaptığım için (ikisi bir DC'de ve biri diğerinde), çok uygun olan En İyi fotokopi makinesini kullanıyorum. Herhangi bir çizelgede bir hesaba (ihracatçı) kurulur ve diğer hesaplara (ithalatçılara) kopyalanır, burada bu danışman da bir çizelgeye kurulur (ithalatçıda birkaç çizelgeye koyarsanız, aynı sayıda siparişi açar. ). Bir keresinde, DC'lerden birinde onunla çalışmayı kontrol etmek ve bir demo hesabı oluşturmak istediğimde), güzel bir anda, kendiliğinden birkaç çizelgeye yüklendi ve doğal olarak aynı sayıda sipariş açtı. Sonra bunun bu DC'nin terminalinin bir arızası olduğunu düşünerek buna hiç önem vermedim. Ondan sonra yukarıdaki hesaplarda uzun süre işlem yaptım ve böyle bir şey olmadı. Ancak dün, sadece haber bülteni döneminde, hesaplardan birinde (ihracatçının kurulu olduğu değil, başka bir DC'nin hesabı) benzer bir durum kendini tekrarladı - danışmanlar kendiliğinden 6 çizelgeye kuruldu, ancak en ilginç olanı şey şu ki, bir çift için 16 sipariş açıldı. Bu neden oluyor ve nedeni nedir? Bu, EA'nın kendisinde bir eksiklik mi yoksa başka bir neden mi? Bunu düzeltmenin bir yolu var mı? Erken için teşekkürler.
 
// Зачем этот тормоз без обработки возвращаемого значения?

Kim böyle bir soru sorar?
 
hoz :

Size göre yanlış olan ne?


Yanlış değil, sadece belirsiz.

Bitirme:

 if (ld_price != 0 )
return (ld_price); 

ld_price = 0 ise, fonksiyon kendi başına 0 döndürür. Bu nedenle doğrulamaya gerek yoktur.

İşte dağılım:

 if (fs_symbol == Symbol ())
         {
             RefreshRates();
             ld_price = Bid;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_BID);

Ayrıca gerekli değil. Her durumda MraketInfo() kullanabilirsiniz.

Sonunda fonksiyon en saf haliyle MarketInfo() fonksiyonuna dönüşür (gereksiz olan her şeyi kaldırırsanız).

 

Prensip olarak, teorik olarak, bu yerler doğrudur:

RefreshRates();
ld_price = Bid;
RefreshRates();
ld_price = Ask;

RefreshRates() fonksiyonlarının ne döndüreceği bizim için önemli değil, Ask ve Bid değişkenlerinin terminal tarafından bilinen son değerleri içermesi önemlidir.

 

Merhaba!

Test cihazı tarafından bir Uzman Danışman için verilen farklı sonuçların nedeninin ne olduğunu söyleyin?

Test edilen dönem, döviz çifti ve zaman çerçevesi aynı, ancak bugün elde edilen sonuçlar öncekilerden çok farklı, danışman uzun pozisyon açmayı durdurdu.

Terminalin alıntıları suçlanacak mı yoksa izin günü mü, bilmiyorum. Belki bilenler bariz nedene gözlerimi açar?

 
skyjet :

Merhaba!

Test cihazı tarafından bir Uzman Danışman için verilen farklı sonuçların nedeninin ne olduğunu söyleyin?

Test edilen dönem, döviz çifti ve zaman çerçevesi aynı, ancak bugün elde edilen sonuçlar öncekilerden çok farklı, danışman uzun pozisyon açmayı durdurdu.

Terminalin alıntıları suçlanacak mı yoksa izin günü mü, bilmiyorum. Belki bilenler bariz nedene gözlerimi açar?


Birbiri ardına gerçekleştirilen iki test bile farklılık gösterebilir ve çok fark edilebilir. Aracı, spread'i değiştirir ve test farklı bir spread ile devam eder. Bir puanlık değişiklik yeterlidir.

Önceki test uzun zaman önce yapılmışsa, ayarlar gevşetilmiş olabilir.

 
Zhunko :

1. Veri alınmadıysa ve aynı zamanda tüm veriler oradaysa, ancak bu konuda hiçbir şey bilmiyor muyuz? YANLIŞ döndürür. Nasıl değerlendirilir? Veri eksikliği veya bir hata veya veri var mı?

Seni anlamıyorum. Sırayla gidelim... RefreshRates() diyoruz , veriler gelmedi.. Ama veriler orada. Sapık çıkıyor. Veri alınmadıysa, veri olmayacaktır veya veriler güncellenmemiştir. piyasa değişkeni değişmedi... Sadece 2 seçenek var.

RefreshRates()'i çağırdıktan sonra TRU'yu döndürdüyse, veriler güncellenmiştir. Ve FELS geri dönerse, ya güncellenmemişlerdir. bir tür hata veya güncellenmemiş. Veriler tazedir ve güncellenmesi gerekmez.

Dolayısıyla anladığım kadarıyla şu şekilde sayılabilir: RefreshRates() datayı kontrol eder, eğer data yeni değilse o zaman yeni olmayan datayı güncellemez yani. değişmedi ve yeniyse güncellemeler. Bu, yalnızca RefreshRates() işlevi tarafından döndürülen bayrağa güvenebileceğiniz anlamına gelir. Başka seçenekleriniz var mı?

Zhunko :

2. 1. nokta sorununu çözmek için kontrol etmek gerekir.

Dedin ki:

Sunucudan (MarketInfo()) gelen verileri sıfır çubuğu ile kontrol ediyorum. Aynı olmalarını bekliyorum.

Peki, MarketInfo() zaten sıfır çubuğundan çekiyor... Yukarıdaki kelimelerle ne demek istiyorsun?

Zhunko :

3. Sürecin dinamiklerini dikkate almayın. Bilgisayarı, terminali açtı. Geldi, göründüğü gibi, tüm veriler. Her şey sıfır çubuğunda birleşti. Sinyaller bulundu. Anlaşma yapılır. Tüm verilerin gelmediği ortaya çıktı. 5 dakika sonra eksik çubuklar 1,2,3,4,5 sayılarıyla geldi. Sinyal gitti. Ne yapalım?

Tekrar yenileyin. Ama sonra o an gelir, ya RefreshRates() öğesini çağırırsak ve verileri yavaş yavaş güncellerse? Onlar. hesaplamaların bir kısmı bazı piyasa verileri ile, bir kısmı - diğerleri ile yapılacaktır.. Peki o zaman?

Zhunko :

4. Kırmızı işaretli. Radyo düğmesinde geçersiz bir tanımlayıcı seçmenin olası hatası henüz ele alınmadı. Yukarıda olması gerektiği gibi yazdım.

Sonucu beklemeden RefreshRates()'i çağırmak işe yaramaz. Uzun bir süre gerçekleşmeyebilir.

hm. Peki, beklentisiyle, alıntı değişebilir.. Her iki tarafta da çubuk var mı?

Yeniler(); // Dönüş değerini işlemeden bu fren neden?

Bundan birkaç kez bahsediyorsunuz, ancak hiçbir ayrıntı yok. Onlar. Bu fonksiyonun genellikle nasıl kullanıldığını görebildiğim kadarıyla, piyasa verisi değişkenlerinin kullanıldığı kod öncesi çok basit ve bu kadar. Özellikle bununla uğraşmazlar. AMA düşündüm ve aklıma nasıl getireceğimi bulmaya karar verdim. Şu veya bu yaklaşımın gerçekten doğru olduğundan ve tüm normal koşullar altında çalışacağından emin olarak bilinmesi gerekenler.

Öyleyse Vadim , bu ifadeyle ne demek istiyorsun:

"

Dönüş değerini işlemeden bu fren neden?"

Nasıl işlenebilirler? Yukarıda mantığımı yazdım ama cevap alamadım. Oldukça doğru ve seçeneksiz olarak tanımlandı.

 
Integer :


Yanlış değil, sadece belirsiz.

Bitirme:

 if (ld_price != 0 )
     return (ld_price); 

ld_price = 0 ise, fonksiyon kendi başına 0 döndürür. Bu nedenle doğrulamaya gerek yoktur.

Neden aniden olsun ki? Burada sadece, else aracılığıyla, işlevin başka bir değer döndürdüğünü eklemeniz gerekir; bu, "Fiyat yok" dedikleri anlamına gelir. Yol boyunca mantıklı. Fonksiyonu attığımda önceki mantığı daha çok düşündüm, sonra sonuna dikkat etmedim. Ve neden 0 işlevi kendi başına bir şey döndürecek, anlamadım ...
tamsayı :


İşte dağılım:

 if (fs_symbol == Symbol ())
{
    RefreshRates();
    ld_price = Bid;
}
else
    ld_price = MarketInfo(fs_symbol, MODE_BID);

Ayrıca gerekli değil. Her durumda MraketInfo() kullanabilirsiniz.

Sonunda fonksiyon en saf haliyle MarketInfo() fonksiyonuna dönüşür (gereksiz olan her şeyi kaldırırsanız).


MarketInfo(fs_symbol, MODE_ASK) her zaman kullanabiliyorsanız, neden hiç sorun (özellikle satın alma fiyatı hakkında konuşuyorsak)? Sonuçta, Sor'a dönerek böyle görünüyorsanız, belirli bir zamanda doğru olduğundan emin olamaz mısınız?
 
Integer :

RefreshRates() fonksiyonlarının ne döndüreceği bizim için önemli değil, Ask ve Bid değişkenlerinin terminal tarafından bilinen son değerleri içermesi önemlidir.


Pratik olarak, anladığım kadarıyla başka bir şeye ihtiyacımız var. Ve yerel terminale değil, en son Ask and Bid sunucusuna ihtiyacımız var. Böyle?

İşte bu yüzden, onu düzenlemenin nasıl daha mantıklı ve doğru olduğunu bir kez ve herkes için anlamak için burada bir tartışma başlattım. Teoride bu doğru, ama pratikte...