Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Kullanıcıya, gösterge kurulum penceresinin menü listesinden hem zaman dilimlerini hem de numaralarını seçme yeteneği sağlamaya çalışıyorum:
ve onun tarafından seçilen periyotların doğrudan PArray'e düşmesini istiyorum. Ancak yukarıdaki örnekten, kullanıcının girdiğini değil, programda önceden tanımlanmış değerleri diziye atadığım ortaya çıkıyor. Ek olarak, derleyici uyarılar verir:
Son satırı şununla değiştirmeye çalışırken:
derleyici genellikle bir hata verir:
Ayrıca NO_PERIOD=0, PERIOD_CURRENT anlamına gelir ve buna ihtiyacım yok, false veya EMPTY_VALUE gibi bir şeye ihtiyacım var ama hiç uymuyorlar.
Test cihazındaki sembol ayarları tutmuyor, perşembe ve cuma günleri işlem seansları kesiliyor, bundan dolayı sürekli piyasa kapanma hatası oluyor, pozisyonlar açılmıyor, optimizasyon imkansız, robot düzgün çalışmıyor, diğer brokerlerle her şey yolunda, ama bu özellikle gerekli, ne yapmalıyım? Sadece son zamanlarda, durum böyle değildi. Daha önce bu ayarlar tutuluyordu ve izinsiz değiştirilmiyordu, nedir? Kim ne yapacağını biliyor? Yeni bir hesap kaydettim, terminali geçici dosyalardan temizledim, başka bir terminalde denedim, yardımcı olmuyor. video sorunları https://radikal.ru/video/1HA3UfUNVZt
Bize söyleyin, "dizi menzil dışı" hatasını yakalamak ve düzeltmek için hangi mücadele yöntemleri var? İlk olarak, Print ile bellek sınırlarını aşmış bir dizinin bir elemanını yazdırmak, hatanın önüne geçtiği ve yazdırmaya ulaşmadığı için mümkün değildir. İkincisi, bu hata sistematik olarak ortaya çıkmaz, ancak istediği gibi: bir kez çıktı ve gösterge çalışmadı (ancak göstergeler listesindeki çizelgede asılı kaldı) ve bir dahaki sefere artık yok. , göstergeyi yeniden derlemeden, düzenlemesinden bahsetmiyorum bile.
x572intraday : Bize söyleyin, "dizi menzil dışı" hatasını yakalamak ve düzeltmek için hangi mücadele yöntemleri var?
ArrayResize(), bir dizi öğesi yazmadan önce yapın, dizide olması gereken öğelerin sayısını sayın ve sürün ya da kendi kendine artan dinamik bir dizi kullanın. Sadece dizinin sınırlarını aşıyorsunuz, örneğin boyut 100 eleman, ancak ilk eleman No. 0 olduğu için bazıları karışıyor, eğer arka arkaya sayılar yazarsanız, 0-99 sığacaktır. Ben profesyonel bir programcı değilim, eğer bir şey varsa (ama yapabilirim), akla gelen ilk şey işe yaraması)))
Объект динамического массива - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
ArrayResize(), bir dizi öğesi yazmadan önce yapın, dizide olması gereken öğelerin sayısını sayın ve sürün ya da kendi kendine artan dinamik bir dizi kullanın.
Aslında bende var ve çok dinamik. Referanstan: " İşlev yalnızca dinamik dizilere uygulanabilir. SetIndexBuffer() işlevi tarafından gösterge arabelleği olarak atanan dinamik dizilerin boyutunu değiştiremeyeceğiniz unutulmamalıdır. Gösterge arabellekleri için tüm yeniden boyutlandırma işlemleri gerçekleştirilir. "Ama bu bir gösterge tamponu değil, bu yüzden ellerinizle düşünmeli ve kafanızla hareket etmelisiniz...
Aslında bende var ve çok dinamik. Referanstan: " İşlev yalnızca dinamik dizilere uygulanabilir. SetIndexBuffer() işlevi tarafından gösterge arabelleği olarak atanan dinamik dizilerin boyutunu değiştiremeyeceğiniz unutulmamalıdır. Gösterge arabellekleri için tüm yeniden boyutlandırma işlemleri gerçekleştirilir. "Ama bu bir gösterge tamponu değil, bu yüzden ellerinizle düşünmeli ve kafanızla hareket etmelisiniz...
Today we're starting a patchy subject, which will combine many different things. This is why I decided to split it into parts. Out final goal is exception handling, but before we can address it, we
Açıkça her zaman ArraySize (Arr)=1 olmalıdır. Bu, başarılı kopyalama durumunda geçerlidir. Ancak hangi durumlarda bir çubuğun kopyalanması gerçekleşemez? Sonuçta , "aralık dışı dizi" hatası ortaya çıktığında, terminal Arr[0]'ı gösterir .
x572intraday : Açıkça her zaman ArraySize(Arr)=1 olmalıdır. Bu, başarılı kopyalama durumunda geçerlidir. Ancak hangi durumlarda bir çubuğun kopyalanması gerçekleşemez? Sonuçta , "aralık dışı dizi" hatası ortaya çıktığında, terminal Arr[0]'ı gösterir .
Şimdi onunla ne yapmalı, nereye gitmeli? Çarpık ellerim mi var?.. 0'dan 1'e sadece bir çubuk kopyalıyorum. (Tarih) nasıl var olamaz? Ayrıca, hata her zaman ortaya çıkmaz. Yoksa önce bir şekilde geçmişi zorla kontrol edip yüklemem mi gerekiyor?
Açıklamada hata:
Ticari işlem yapısı (MqlTradeTransaction)
Bu alanın adı: time_type
Kullanıcıya, gösterge kurulum penceresinin menü listesinden hem zaman dilimlerini hem de numaralarını seçme yeteneği sağlamaya çalışıyorum:
ve onun tarafından seçilen periyotların doğrudan PArray'e düşmesini istiyorum. Ancak yukarıdaki örnekten, kullanıcının girdiğini değil, programda önceden tanımlanmış değerleri diziye atadığım ortaya çıkıyor. Ek olarak, derleyici uyarılar verir:
Son satırı şununla değiştirmeye çalışırken:
derleyici genellikle bir hata verir:
Ayrıca NO_PERIOD=0, PERIOD_CURRENT anlamına gelir ve buna ihtiyacım yok, false veya EMPTY_VALUE gibi bir şeye ihtiyacım var ama hiç uymuyorlar.
Nasıl düzeltilir?
Neredeyse düzeltti.
Bize söyleyin, "dizi menzil dışı" hatasını yakalamak ve düzeltmek için hangi mücadele yöntemleri var?
ArrayResize(), bir dizi öğesi yazmadan önce yapın, dizide olması gereken öğelerin sayısını sayın ve sürün ya da kendi kendine artan dinamik bir dizi kullanın. Sadece dizinin sınırlarını aşıyorsunuz, örneğin boyut 100 eleman, ancak ilk eleman No. 0 olduğu için bazıları karışıyor, eğer arka arkaya sayılar yazarsanız, 0-99 sığacaktır. Ben profesyonel bir programcı değilim, eğer bir şey varsa (ama yapabilirim), akla gelen ilk şey işe yaraması)))
ArrayResize(), bir dizi öğesi yazmadan önce yapın, dizide olması gereken öğelerin sayısını sayın ve sürün ya da kendi kendine artan dinamik bir dizi kullanın.
Aslında bende var ve çok dinamik. Referanstan: " İşlev yalnızca dinamik dizilere uygulanabilir. SetIndexBuffer() işlevi tarafından gösterge arabelleği olarak atanan dinamik dizilerin boyutunu değiştiremeyeceğiniz unutulmamalıdır. Gösterge arabellekleri için tüm yeniden boyutlandırma işlemleri gerçekleştirilir. "Ama bu bir gösterge tamponu değil, bu yüzden ellerinizle düşünmeli ve kafanızla hareket etmelisiniz...
Aslında bende var ve çok dinamik. Referanstan: " İşlev yalnızca dinamik dizilere uygulanabilir. SetIndexBuffer() işlevi tarafından gösterge arabelleği olarak atanan dinamik dizilerin boyutunu değiştiremeyeceğiniz unutulmamalıdır. Gösterge arabellekleri için tüm yeniden boyutlandırma işlemleri gerçekleştirilir. "Ama bu bir gösterge tamponu değil, bu yüzden ellerinizle düşünmeli ve kafanızla hareket etmelisiniz...
Bu tür hataları yakalama sorunu, yalnızca adreslemeyi engelleyen özel bir dizi sınıfı gibi "katmanlar" kullanılarak çözülür.
Algoritmik ticaret devre dışı bırakıldığında danışmanı başlatırken ve ardından algoritmik ticareti etkinleştirirken:
Hata koduna göre, TERMINAL_TRADE_ALLOWED özelliği doğru olmasına rağmen ticaret yasağı devam ediyor
Sonuç şöyle olmalıdır:
Açıkça her zaman ArraySize(Arr)=1 olmalıdır. Bu, başarılı kopyalama durumunda geçerlidir. Ancak hangi durumlarda bir çubuğun kopyalanması gerçekleşemez? Sonuçta , "aralık dışı dizi" hatası ortaya çıktığında, terminal Arr[0]'ı gösterir .
Hatayı yakaladım, yardımdan alıntı yapın:
4401
İstenen geçmiş bulunamadı
Dergide basıldı - alınan:
Şimdi onunla ne yapmalı, nereye gitmeli? Çarpık ellerim mi var?.. 0'dan 1'e sadece bir çubuk kopyalıyorum. (Tarih) nasıl var olamaz? Ayrıca, hata her zaman ortaya çıkmaz. Yoksa önce bir şekilde geçmişi zorla kontrol edip yüklemem mi gerekiyor?