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

 
solnce600 :
ve hangi düğmeyle gülümsüyorsun ya da kalbini kaybediyorsun?

Urri bunu hiç farketmedi ve ben de bu düğmeyi bilmiyorum ama bazen kuyruğumuzu sallıyoruz efendim... :)))
 
lottamer :

Farklı koşulların daha fazla test edilmesi için 2 saattir bir test parçası yazmaya çalışıyorum.

Çalışmıyor!

bana hatayı söyle lütfen

siparişlerin 2 pp'den sonra kendi yönlerine açılması mantıklıdır.

sat açılır ve biter...



Her şey mantıksal olarak doğru görünüyor! Sadece dikkat - parantez içindekiler de dahil olmak üzere tüm değişkenler başlangıcın üzerinde bildirilmelidir.
 
hoz :


Merak ediyorum neden burada bir durum var?


Prensipte sonsuz olabilen bir süre döngüsü vardır, bu nedenle Expert Advisor'ın grafikten çıkarılmasını veya kapatılmasını kolaylaştırmak için önlemler alınmıştır.

Bir şeyler yanlışsa, döngüye girmektense baştan başlamak daha iyidir. Bir sonraki onay işaretinde tekrarlayın.

 
lottamer :

Kim'in işlevi, parametre saatine sahiptir = " 1970'den beri saniye cinsinden tarih ve saat "

2 seçenek denedim

ve her ikisi de o gün için değil, tüm tarihin tam kârını verir....

Geçerli gün, geçerli D1 çubuğunun başlangıcından başlar (iTime (NULL, PERIOD_D1 , 0)), AMA kolay yollar aramıyor musunuz?! :)))
 
hoz :

Ayrı bir işlev yazmanın arkasındaki mantığı tam olarak anlamıyorum. Sonuçta, RefreshRates() işlevinin kendisi önceden tanımlanmış değişkenlerin verilerini güncellemeye yarar. Ve Bid ve Ask sadece önceden tanımlanmış değişkenlerdir. RefreshRates() işlevi önceden tanımlanmış değişkenleri güncelliyorsa, neden herhangi bir ek işlev yazalım?Açıklayabilir misiniz?

Bir özellik var:

bool RefreshRates( )

Önceden tanımlanmış değişkenlerdeki ve zaman serisi dizilerindeki verileri güncelleme. Bu işlev, bir Uzman Danışman veya bir komut dosyası uzun süredir hesaplamalar yaptığında ve güncellenmiş verilere ihtiyaç duyduğunda kullanılır. Veriler güncellenirse DOĞRU, değilse YANLIŞ döndürür. Veriler yalnızca istemci terminalinin mevcut durumuna karşılık geldiği için güncellenemeyebilir. Uzman Danışmanlar ve komut dosyaları, geçmiş verilerin kendi kopyalarıyla çalışır. Mevcut simgeye ilişkin verilerin bir kopyası, bir Uzman Danışmanın veya bir komut dosyasının ilk başlatılması sırasında oluşturulur. Expert Advisor'ın sonraki her açılışında (komut dosyasının bir kez yürütüldüğünü ve gelen onaylara bağlı olmadığını hatırlayın), başlangıçta oluşturulan kopya güncellenir. Expert Advisor veya script çalışırken bir veya daha fazla yeni tik gelebilir ve bu nedenle veriler güncelliğini yitirebilir.

Veriler de hemen güncellenmez. Bu kontrol edilmelidir.

 
Zhunko :

Bir özellik var:

bool RefreshRates( )

Önceden tanımlanmış değişkenler ve zaman serisi dizilerindeki verileri güncelleme. Bu işlev, bir Uzman Danışman veya bir komut dosyası uzun süredir hesaplamalar yaptığında ve güncellenmiş verilere ihtiyaç duyduğunda kullanılır. Veriler güncellenirse DOĞRU, değilse YANLIŞ döndürür. Veriler, yalnızca istemci terminalinin mevcut durumuna karşılık geldiği için güncellenemeyebilir. Uzman Danışmanlar ve komut dosyaları, kendi geçmiş veri kopyalarıyla çalışır. Mevcut simgeye ilişkin verilerin bir kopyası, bir Uzman Danışmanın veya bir komut dosyasının ilk başlatılması sırasında oluşturulur. Expert Advisor'ın sonraki her açılışında (komut dosyasının bir kez yürütüldüğünü ve gelen onaylara bağlı olmadığını hatırlayın), başlangıçta oluşturulan kopya güncellenir. Expert Advisor veya script çalışırken bir veya daha fazla yeni tik gelebilir ve bu nedenle veriler güncelliğini yitirebilir.

Veriler de hemen güncellenmez. Bu kontrol edilmelidir.


Bu referanstan yola çıkarak ASK fiyatını alalım. RefreshRates() 'i çalıştırırsak, önceden tanımlanmış değişken dizilerindeki veriler güncellenir. Dolayısıyla, ASK fiyatı değiştiyse, RefreshRates() çalıştırıldıktan sonra ASK yeni bir değer alacaktır. Ve eğer böyle giderse:

Veriler, yalnızca istemci terminalinin mevcut durumuna karşılık geldiği için güncellenemeyebilir.  

o zaman ACK değeri değişmedi. Bu nedenle, hesaplama önceki ACK değerini kullanacaktır, çünkü. değişmedi.

Her neyse, RefreshRates() işlevi TRU değerini döndürürse, verileri başarıyla güncellemiştir, bu da onu kontrol etmenize gerek olmadığı anlamına gelir! katılmıyor musun?

 
hoz :


Bu referanstan yola çıkarak ASK fiyatını alalım. RefreshRates() 'i çalıştırırsak, önceden tanımlanmış değişken dizilerindeki veriler güncellenir. Dolayısıyla, ASK fiyatı değiştiyse, RefreshRates()'i çalıştırdıktan sonra ASK yeni bir değer alacaktır. Ve eğer böyle giderse:

o zaman ACK değeri değişmedi. Bu nedenle, hesaplama önceki ACK değerini kullanacaktır, çünkü. değişmedi.

Her neyse, RefreshRates() işlevi TRU değerini döndürürse, verileri başarıyla güncellemiştir, bu da onu kontrol etmenize gerek olmadığı anlamına gelir! katılmıyor musun?

Numara. YANLIŞ döndürebilir ve veriler taze olacaktır.

Veriler yalnızca istemci terminalinin mevcut durumuna karşılık geldiği için güncellenemeyebilir.

Kendiniz için verilerin taze olduğunu düşüneceğiniz bir işaret bulmanız gerekir. Farklı görevler için farklı olabilir.
 
Zhunko :

Numara. YANLIŞ döndürebilir ve veriler taze olacaktır.

Onlar. Belgelerde açık bir hata var mı? Ve belgelere güvenemez misin?

Zhunko :

Kendiniz için verilerin taze olduğunu düşüneceğiniz bir işaret bulmanız gerekir. Farklı görevler için farklı olabilir.

ASK fiyatından bahsettiğimizi varsayalım. 2 değişkenimiz var:

ASK - RefreshRates() işlevini yürüttükten sonra değeri sor

_ACK - Ask öğesinin bilinen son değeri.

________________________________________________________________________

Söylemesi zor. İşaret, ne olabileceğidir. 2 seçenek vardır:

1. Önceden tanımlanmış bir değişkenin değeri değişti. RefreshRates() , True değerini döndürür.

2. Önceden tanımlanmış değişkenin değeri değişmedi . RefreshRates() , False değerini döndürür.

Diğer taraftan bakarsanız, bir işaret bulmakla ilgili. 2 seçenek vardır:

1. Önceden tanımlanmış bir değişkenin değeri değişti. Onlar. bizim durumumuzda Sor = ASK

2. Önceden tanımlanmış değişkenin değeri değişmedi . Onlar. Sor = _ASK

Değişen bir değer vardır veya değişmemiştir, başka bir şey verilmez. O zaman nasıl yaparsın?

 
hoz :

Onlar. Belgelerde açık bir hata var mı? Ve belgelere güvenemez misin?

ASK fiyatından bahsettiğimizi varsayalım. 2 değişkenimiz var:

ASK - RefreshRates() işlevini yürüttükten sonra değeri sor

_ACK - Ask öğesinin bilinen son değeri.

________________________________________________________________________

Söylemesi zor. İşaret, ne olabileceğidir. 2 seçenek vardır:

1. Önceden tanımlanmış bir değişkenin değeri değişti. RefreshRates() , True değerini döndürür.

2. Önceden tanımlanmış değişkenin değeri değişmedi . RefreshRates() , False değerini döndürür.

Diğer taraftan bakarsanız, bir işaret bulmakla ilgili. 2 seçenek vardır:

1. Önceden tanımlanmış bir değişkenin değeri değişti. Onlar. bizim durumumuzda Sor = ASK

2. Önceden tanımlanmış değişkenin değeri değişmedi . Onlar. Sor = _ASK

Değişen bir değer vardır veya değişmemiştir, başka bir şey verilmez. O zaman nasıl yaparsın?

Belgelerde her şey yolunda. Bu az önce anlatıldı ve dikkatinizi çeken de bu oldu.

Veriler güncellenirse DOĞRU, değilse YANLIŞ döndürür. Veriler yalnızca istemci terminalinin mevcut durumuna karşılık geldiği için güncellenemeyebilir.

Onlar. bu işlev, yeni verilerin geldiğini ve başka bir şey olmadığını söylüyor.

Gerisini nasıl istediğini bilmiyorum. Sunucudan (MarketInfo()) gelen verileri sıfır çubuğu ile kontrol ediyorum. Aynı olmalarını bekliyorum. Bu arada, bu yakın tarihte bir "deliğin" olmadığını garanti etmez. 1, 2 veya 3 çubuk veya birkaç çubuk kolayca eksik olabilir, ancak sıfır olacaktır. Bazen daha sonra gelirler. Bazen - hayır.

 
Zhunko :

Onlar. bu işlev, yeni verilerin geldiğini ve başka bir şey olmadığını söylüyor.

Eh, yeni veriler geldiyse, ihtiyacımız olan bu, değil mi?
Zhunko :

Sunucudan (MarketInfo()) gelen verileri sıfır çubuğu ile kontrol ediyorum. Aynı olmalarını bekliyorum. Bu arada, bu yakın tarihte bir "deliğin" olmadığını garanti etmez. 1, 2 veya 3 çubuk veya birkaç çubuk kolayca eksik olabilir, ancak sıfır olacaktır. Bazen daha sonra gelirler. Bazen - hayır.

Evet, 0. çubuktaki verilere ihtiyacınız var, ess. MarketInfo(), verileri 0. çubuktan çeker, aksi halde değil. O zaman neden onları bir şeyle karşılaştıralım?
Zhunko :

Bu arada, bu yakın tarihte bir "deliğin" olmadığını garanti etmez. 1, 2 veya 3 çubuk veya birkaç çubuk kolayca eksik olabilir, ancak sıfır olacaktır. Bazen daha sonra gelirler. Bazen - hayır.

Eh, tarihte bir delik 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.

İş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?