FORTS Lütfen yardım edin - sayfa 9

 
komposter :

Ve bir program (ve bir programcı) için "hayır" ve "hazır değil" arasındaki fark nedir?

Veriler hazır değilse, bir hata olacaktır.

Ya da belki bu bilgi de anında mevcut değildir, bu nedenle gösterilmez.

Ve sunucuya "tırmanmamak" için.

Ve siz bizim "okuyucumuzsunuz" ... Soru:

Veriler hazırsa zaman serisi ne için oluşturulur ( CopyTime (symbol,period,first_date+PeriodSeconds(period),1,times) )?

Если мы успешно прошли все проверки, то сделаем последнюю попытку обойтись без обращения к торговому серверу. Сначала узнаем начальную дату, для которой доступны минутные данные в формате HCC.
Запросим это значение функцией SeriesInfoInteger () с модификатором SERIES_TERMINAL_FIRSTDATE и опять сравним со значением параметра start_date.

   if ( SeriesInfoInteger (symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE ,first_date))
     {
       //--- there is loaded data to build timeseries
       if (first_date> 0 )
        {
         //--- force timeseries build                                            
         CopyTime (symbol,period,first_date+ PeriodSeconds (period), 1 ,times);
         //--- check date
         if ( SeriesInfoInteger (symbol,period, SERIES_FIRSTDATE ,first_date))
             if (first_date> 0 && first_date<=start_date) return ( 2 );
        }
     }
 
 
MigVRN :
Bu doğru - olanı yükler ve hazırlar. Ancak, göstergedeki herhangi bir gecikmenin, üzerinde asılı olan her şeyle sohbeti yavaşlatması nedeniyle - yaptıkları göstergelerde, çağrı yapıldığında seri hazır değilse, işlev bir hata döndürür ve INITIALIZE veri hazırlığı. Bir süre sonra, artık bir hata döndürmez. Bu, günlüklerinizde oluyor.

MigVRN!

Chukchi sertifikayı yeniden okudu ve sizinle aynı fikirde OLMAMALIDIR.

"Doğru - olanı yükler ve hazırlar."

Bunlar senin düşüncelerin....

Ve yardım, SeriesInfoInteger işlevinin SERIES_TERMINAL_FIRSTDATE tanımlayıcısıyla çalıştığını söylüyor.

Geri dönmeli:

SERIES_TERMINAL_FIRSTDATE

Dönemden bağımsız olarak, istemci terminalinde sembolle tarihteki ilk tarih

Hiçbir şey yapmasına gerek yok!

Terminal geçmişinde veri var - tarihi alın.

Hayır - "0" döndürülür.

 
Yeni gün ve tekrar bir daire içinde.
 
barabashkakvn :
Yeni gün ve tekrar bir daire içinde.
Yardımda göster, DİĞER bir şey
 
papaklass :
Verileri hazırlayın ve onunla çalışın. Bir şeyin yanlış olduğunu 150 defa daha söyleyebilir ve nasıl yapılacağına dair 150 cevap alabilirsiniz. Bu sana kalmış, kendine iyi bak!

Teşekkürler, ama çok iyi biliyorsunuz ki HER ŞEY kanıtlanmalıdır.

SD, veri varken 0 döndürmenin işlevlerinde bir hata olmadığını düşünür.

Eğer öyleyse, o zaman belgelerde yazılmalıdır!

 

Mikalas :

Olmalı, olmamalı - bunların hepsi bizim konuşmalarımız. Nasıl çalıştığını kendin görebilirsin :)

Kabul edebileceğim tek şey, yardımda hangi verilerin HEMEN hazır olduğunun (herhangi bir zamanda kullanılabilir) ve terminalin erişildiğinde hangi verileri hazırladığının tamamen net olmadığıdır.

Herhangi bir zaman serisi verisine (zaman ve fiyat, çubuk sayısı, ENUM_SERIES_INFO_INTEGER numaralandırması, belki başka bir şeyi unuttum) erişirken, verinin hemen hazır olmadığını anlıyorum(!).

Bu gibi durumlardan kaçınmak için - yardımda şöyle yazılmıştır:

mql5 programı herhangi bir sembol ve zaman çerçevesi için verilere erişebildiğinden, gerekli zaman serilerinin verilerinin henüz terminalde oluşturulmamış olması veya gerekli fiyat verilerinin ticaret sunucusu ile senkronize edilmemiş olması muhtemeldir. Bu durumda, verilerin hazır olması için bekleme süresinin tahmin edilmesi zordur.

Veriye hazır bekleme döngülerini kullanan algoritmalar en iyi çözüm değildir . Bu durumda tek istisna komut dosyalarıdır, çünkü olay işleme eksikliğinden dolayı başka bir algoritma seçenekleri yoktur. Özel göstergeler için, bu tür algoritmalar, diğer bekleme döngüleri gibi, kategorik olarak tavsiye edilmez , çünkü bu sembol için tüm göstergelerin hesaplanmasında ve diğer fiyat verilerinin işlenmesinde bir durmaya yol açarlar.

Uzman Danışmanlar ve özel göstergeler için olay işleme modelini kullanmak daha iyidir. OnTick() veya OnCalculate() olayını işlerken, gerekli zaman serisinin tüm gerekli verilerini elde etmek mümkün değilse, işleyicinin bir sonraki çağrısında verilere erişimi hesaba katarak olay işleyicisinden çıkmalısınız . .

 
MigVRN :

Olmalı, olmamalı - bunların hepsi bizim konuşmalarımız. Nasıl çalıştığını kendin görebilirsin :)

Kabul edebileceğim tek şey, yardımda hangi verilerin HEMEN hazır olduğunun (herhangi bir zamanda kullanılabilir) ve terminalin erişildiğinde hangi verileri hazırladığının tamamen net olmadığıdır.

Herhangi bir zaman serisi verisine (zaman ve fiyat, çubuk sayısı, ENUM_SERIES_INFO_INTEGER numaralandırması, belki başka bir şeyi unuttum) erişirken, verinin hemen hazır olmadığını anlıyorum(!).

Bu gibi durumlardan kaçınmak için - yardımda şöyle yazılmıştır:

mql5 programı herhangi bir sembol ve zaman çerçevesi için verilere erişebildiğinden, gerekli zaman serilerinin verilerinin henüz terminalde oluşturulmamış olması veya gerekli fiyat verilerinin ticaret sunucusu ile senkronize edilmemiş olması muhtemeldir. Bu durumda, verilerin hazır olması için bekleme süresinin tahmin edilmesi zordur.

Veriye hazır bekleme döngülerini kullanan algoritmalar en iyi çözüm değildir . Bu durumda tek istisna komut dosyalarıdır, çünkü olay işleme eksikliğinden dolayı başka bir algoritma seçenekleri yoktur. Özel göstergeler için, bu tür algoritmalar, diğer bekleme döngüleri gibi, kategorik olarak tavsiye edilmez , çünkü bu sembol için tüm göstergelerin hesaplanmasında ve diğer fiyat verilerinin işlenmesinde bir durmaya yol açarlar.

Uzman Danışmanlar ve özel göstergeler için olay işleme modelini kullanmak daha iyidir. OnTick() veya OnCalculate() olayını işlerken, gerekli zaman serisinin tüm gerekli verilerini elde etmek mümkün değilse, işleyicinin bir sonraki çağrısında verilere erişimi hesaba katarak olay işleyicisinden çıkmalısınız . .

Andrey!

Sizi bilmem ama ben uzun yıllardır belgelerle çalışıyorum.

Bakın, anladığım kadarıyla (!) belgelerden geliyor.

1. Terminalde sembole göre geçmiş verileri olup olmadığına bakın ( SERIES_TERMINAL_FIRSTDATE tanımlayıcılı SeriesInfoInteger)

Belki de bunun hakkında tartışmıyorum, hem bir şeyler inşa ediyor hem de başlatıyor.

2. Veri yok (boş bir geçmiş başlangıç tarihi döndürür) - veri için sunucuya gidin.

3. Bir tarih var - Belirtilen zaman çerçevesini CopyTime işlevini kullanarak oluşturuyoruz ( symbol , period ,first_date+ PeriodSeconds ( period ),1,times);

4. Verilen tarih ile zaman serisinin başlangıcını kontrol edin ( SeriesInfoInteger ( sembol , nokta , SERIES_FIRSTDATE ,first_date)

Belgelerde böyle yazıyor.

AMA, terminalde (!) geçmiş verilerini sembolle ( zaman serilerine göre değil !!!!) talep ettiğimde, ki bunlar TAM OLARAK oradadır

işlev "0" döndürür

Sizce bu DOĞRU mu?

 
Mikalas :

AMA, terminalde (!) geçmiş verilerini sembolle ( zaman serilerine göre değil !!!!) talep ettiğimde, ki bunlar TAM OLARAK oradadır

işlev "0" döndürür

Sizce bu DOĞRU mu?

Veriler (hazırlanmadı) diskte. Veriler (hazırlanmış) yakındaki bir sohbette olabilir. Ama türkiye'nin koştuğu sohbette hazırlanmış bir veri yok. Bu nedenle, hata. Bu doğru. Ama uygun değil :)

Bu tür soruları kendimden hoşlanmamama rağmen - bitişik sembollerdeki göstergeden veri talep etmeniz sizin için kritik mi ??? (yardımda yazılanları ve örneğimi dikkate alarak - bir hindi bir uzmanın ve sohbetin yürütülmesini nasıl yavaşlatabilir). Tüm bu zorlukları aşmak mümkün...

 
papaklass :

Veri değil, "FIRSDDATE" istiyorsunuz. Tarih muhtemelen oradadır, ancak tasarruf nedeniyle veriler eksik olabilir. Şu anda kullanımda değillerse neden tüm karakterler için veri indirelim. Geliştiriciler, yalnızca kullanıcı bu verilere eriştiğinde verileri yüklemek için rasyonel bir yol seçti. Bu normal yaklaşımdır. Terminal ile çalışan sizler, bunu BİLMEK ve bu duruma göre hareket etmek zorundasınız.

Ticarette zaman kaybetmek yerine, temel şeylere takıntılısınız ve boşta zamanınızı boşa harcıyorsunuz. Zamanına yazık. :)

Robotlar benim için ticaret yapıyor, şu an evde değilim...

Ve sadece ticaretimi geliştirmek için göstergeye ihtiyacım var :)

 
Mikalas :

Andrey!

Sizi bilmem ama ben uzun yıllardır belgelerle çalışıyorum.

Bakın, anladığım kadarıyla (!) belgelerden geliyor.

1. Terminalde sembole göre geçmiş verileri olup olmadığına bakın ( SERIES_TERMINAL_FIRSTDATE tanımlayıcılı SeriesInfoInteger)

Belki de bunun hakkında tartışmıyorum, hem bir şeyler inşa ediyor hem de başlatıyor.

2. Veri yok (boş bir geçmiş başlangıç tarihi döndürür) - veri için sunucuya gidin.

3. Bir tarih var - Belirtilen zaman çerçevesini CopyTime işlevini kullanarak oluşturuyoruz ( symbol , period ,first_date+ PeriodSeconds ( period ),1,times);

4. Verilen tarih ile zaman serisinin başlangıcını kontrol edin ( SeriesInfoInteger ( sembol , nokta , SERIES_FIRSTDATE ,first_date)

Belgelerde böyle yazıyor.

AMA, terminalde (!) geçmiş verilerini sembolle ( zaman serilerine göre değil !!!!) talep ettiğimde, ki bunlar TAM OLARAK oradadır

işlev "0" döndürür

Sizce bu DOĞRU mu?

Belgeleri seçici olarak değil, dikkatlice okuyun. Diskte geçmiş verilerinin bulunması, terminal için "TAM OLARAK" anlamına gelmez. Bu durumda (göstergeden erişildiğinde), işlevler yalnızca bellekteki zaman serisi önbelleği ile çalışır. Onlar. anlık senkron hafıza erişimi vardır ve hazırlanmış bir zaman serisi yoksa SERIES_FIRSTDATE tarihi (dizinin ilk elemanı) size döndürülmeyecektir. Ancak istek, elbette, zaman serilerinin belleğe hazırlanmasını-yüklenmesini başlatır.

SERIES_TERMINAL_FIRSTDATE isteği, veritabanının başlatılması ve sunucu ile senkronizasyonu ile ilgilidir, yani. Her durumda ilk temyiz hemen çalışmayacaktır.

Gerekli geçmişi elde etmenin temel olasılığı SERIES_SERVER_FIRSTDATE aracılığıyla kontrol edilir. Onlar. Elbette, geçmiş talebinin X yinelemelerine güvenmek mümkündür, ancak terminal, SERIES_SERVER_FIRSTDATE tarafından geçmişin varlığını onaylarsa, o zaman karşılık gelen zaman serisi verilerinin mevcudiyeti yalnızca bir zaman meselesidir (m1 veritabanının sunucu ve zaman serilerinin oluşturulması).