MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 178

 
Andrey Dik :

Evet teşekkür ederim!

Hayır, ama yine de teşekkürler!
Bu kadar sıkışabileceğini düşünmemiştim... :-)))
 

İyi akşamlar.

iOpen kullanılırken shift belirtilir. Belirtilen kaydırma için yeterli geçmiş yoksa, en eski çubuğun iOpen'i döndürülür.

Soru: Belirtilen vardiya ile bir çubuğun varlığı nasıl kontrol edilir? Ve eğer yeterli geçmiş yoksa, iOpen'i iade etmiyor musunuz?

 
Sergey :

İyi akşamlar.

iOpen kullanılırken shift belirtilir. Belirtilen kaydırma için yeterli geçmiş yoksa, en eski çubuğun iOpen'i döndürülür.

Soru: Belirtilen vardiya ile bir çubuğun varlığı nasıl kontrol edilir? Ve eğer yeterli geçmiş yoksa, iOpen'i iade etmiyor musunuz?


Kopyala Açık

İşlev, belirtilen sembol-dönem çifti için belirtilen miktarda çubuk açılış fiyatlarının geçmiş verilerini open_array dizisine alır. Unutulmamalıdır ki, elemanlar başlangıç konumundan şimdiki zamandan geçmişe kadar sayılır, yani 0'a eşit başlangıç konumu mevcut çubuk anlamına gelir.


Bilinmeyen miktarda veri kopyalanırken, alıcı dizi olarak dinamik bir dizi kullanılması önerilir, çünkü dizinin tutabileceğinden daha az (veya daha fazla) veri varsa, istenen diziyi sağlayacak şekilde dizi yeniden dağıtılmaya çalışılır. veriler tamamen uyuyor.

Bilinen miktarda veri kopyalamanız gerekiyorsa, gereksiz bellek yeniden tahsisini önlemek için bunu statik olarak ayrılmış bir arabellekte yapmak daha iyidir.

Alıcı dizinin hangi özelliğe sahip olduğu önemli değildir - as_series=true veya as_series=false, veriler, zaman içindeki en eski öğe dizi için ayrılan fiziksel belleğin başlangıcında olacak şekilde kopyalanacaktır. İşlev için 3 seçenek vardır.

Başlangıç pozisyonuna ve gerekli eleman sayısına göre referans verme

int CopyOpen (
    sicim             sembol_adı , // sembol adı
    ENUM_TIMEFRAMES    zaman çerçevesi , // dönem
    int                start_pos , // nereden başlamalı
    int                say , // ne kadar kopyalanacak
    çift             open_array[]       // açık fiyatları kopyalamak için dizi
);

Başlangıç Tarihine ve Gerekli Öğe Sayısına Göre Referans Verme

int CopyOpen (
    sicim             sembol_adı , // sembol adı
    ENUM_TIMEFRAMES    zaman çerçevesi , // dönem
    tarih saat           start_time , // hangi tarihten itibaren
    int                say , // ne kadar kopyalanacak
    çift             open_array[]       // açık fiyatları kopyalamak için dizi
);

Gerekli zaman aralığının başlangıç ve bitiş tarihlerine göre arama

int CopyOpen (
    sicim             sembol_adı , // sembol adı
    ENUM_TIMEFRAMES    zaman çerçevesi , // dönem
    tarih saat           start_time , // hangi tarihten itibaren
    tarih saat           stop_time , // hangi tarih
    çift             open_array[]       // açık fiyatları kopyalamak için dizi
);

Seçenekler

sembol_adı

[karakterde.

zaman aralığı

[Dönem içinde.

start_pos

[içinde] Kopyalanacak ilk öğenin numarası.

saymak

[içinde] Kopyalanacak öğe sayısı.

Başlangıç saati

[içinde] İlk öğeye karşılık gelen çubuk süresi.

durma zamanı

[içinde] Son öğeye karşılık gelen çubuk süresi.

open_array[]

[out] Double türünde dizi.

Geri dönüş değeri

Kopyalanan dizi öğelerinin sayısı veya hata durumunda -1.

Not

İstenen veri aralığı, sunucudaki mevcut verilerin tamamen dışındaysa, işlev -1 değerini döndürür. TERMINAL_MAXBARS (grafikteki maksimum çubuk sayısı) dışında veri istenirse, işlev ayrıca -1 döndürür.

İstenen zaman serileri henüz oluşturulmamışsa veya sunucudan indirilmeleri gerekiyorsa, işlev hemen -1 döndürür.

Bir Uzman Danışmandan veya bir komut dosyasından veri istenirken, terminal bu verilere yerel olarak sahip değilse sunucudan indirme başlatılacak veya veriler yerel geçmişten oluşturulabiliyorsa gerekli zaman serilerinin yapımı başlayacak, ancak henüz hazır değil. İşlev, zaman aşımı sona erdiğinde hazır olacak veri miktarını döndürür, ancak geçmiş yüklemesi devam eder ve bir sonraki benzer istek daha fazla veri döndürür.

Başlangıç tarihine ve gerekli öğe sayısına göre veri sorgulanırken, yalnızca tarihi belirtilen tarihten küçük (önceki) veya buna eşit olan veriler döndürülür. Bu durumda, aralık bir saniyeye kadar bir doğrulukla ayarlanır ve dikkate alınır. Diğer bir deyişle, bir değer döndürülen herhangi bir çubuğun açılış tarihi (hacim, yayılma, gösterge arabelleğindeki değer, Açık, Yüksek, Düşük, Kapanış fiyatı veya Zaman) her zaman belirtilene eşit veya bundan daha azdır.

Belirli bir tarih aralığında veri talep edilirken, aralık ayarlanır ve bir saniyeye kadar doğrulukla dikkate alınırken, yalnızca istenen aralıkta kalan veriler döndürülür. Yani, bir değer döndürülen herhangi bir çubuğun açılış zamanı (hacim, yayılma, gösterge arabelleğindeki değer, Açık, Yüksek, Düşük, Kapanış fiyatı veya Zaman) her zaman istenen aralık içindedir.

Bu nedenle, haftanın geçerli günü Cumartesi ise, o zaman start_time= Last_Tuesday ve stop_time=Last_Friday ile haftalık zaman çerçevesindeki verileri kopyalamaya çalışırken, haftalık zaman dilimindeki açılış saati her zaman Pazar gününe denk geldiğinden, işlev 0 döndürür, ancak tek bir haftalık çubuk belirtilen aralığa düşmez.

Mevcut tamamlanmamış çubuğa karşılık gelen değeri almanız gerekiyorsa, çağrının ilk formunu start_pos =0 ve count =1 ile kullanabilirsiniz.

 

Selamlar.

Beyler, fiyatın sonunda 1-2-3 sıfır ile seviyeleri geçme koşulunu nasıl yazacağımı söyler misiniz?

 
Andrey Sokolov :

Selamlar.

Beyler, fiyatın sonunda 1-2-3 sıfır ile seviyeleri geçme koşulunu nasıl yazacağımı söyler misiniz?


Bu seviye ile geçmiş ve güncel fiyat değerleri karşılaştırılarak eğer seviye bu değerler arasında ise kesişim oluşmuştur.
 
Sergey Gritsay :

Bu seviye ile geçmiş ve güncel fiyat değerleri karşılaştırılarak eğer seviye bu değerler arasında ise kesişim oluşmuştur.


Ve karşılaştırma için bu seviyeleri nasıl kaydedebilirim?

Veya - sayının gerekli ondalık basamak sayısına sahip olması için nasıl yazılır? Yuvarlama değil, silme.

 
Andrey Sokolov :


Ve karşılaştırma için bu seviyeleri nasıl kaydedebilirim?

Veya - sayının gerekli ondalık basamak sayısına sahip olması için nasıl yazılır? Yuvarlama değil, silme.

İşte bulma işlevi

 //===============================================================================================
//---------------------------- Возвращает ближайший круглый уровень ----------------------------+
//===============================================================================================
double GetUniversalLevel( int ne= 100 , string symb= "0" ) {
 if (symb== "0" ) symb= Symbol ();
 static double LastBid;
 double _Level= 0 , PriceStep= 0 , bid= 0 , point= 0 ;
 bid=dBid(symb);
 point=dPoint(symb);
   if (LastBid<point) {LastBid=bid;} // Инициализация прошлой цены
   PriceStep=ne*point; // Шаг цены N пунктов.
   _Level= MathRound (bid/PriceStep)*PriceStep; // Круглый уровень
  LastBid=bid;
   return (_Level);
 }
 Comment ( GetUniversalLevel( 50 ) );
 

Teşekkürler Sergey Gritsay, Vitaly Muzichenko

Ayrıca MathFloor () işlevi tarafından istendi - En alta en yakın tamsayı sayısal değerini döndürür.

 
Vitalie Postolache :

MySQL'i kazın.
Kazıyorum...ilginç...belki birkaç ay sonra şu anki sorularıma gülerim ama daha yolun başında...

Sergey Gritsay :
Bunu yapmak için, yerel bilgisayarın dışında bir sunucu oluşturmanız ve bu sunucu üzerinden sırasıyla MT için veri aktarmanız, bu verileri işleyen bir gösterge veya danışman yazmanız veya bazı VPS sunucularına terminaller koymanız ve bir fotokopi makinesi kurmanız gerekir. hesabınızdan arkadaşlarınızın hesaplarına yapılan işlemler. Diğer bir seçenek de bu seviyelere göre yapılan işlemlerinizi kopyalamak için sinyal servisini kullanmaktır. Genel olarak, burada uygun yazılımı sipariş etmek için finansal yeteneklerinizden yaklaşmanız gerekir.


Moşe Dayan :

Size geçmişi hatırlatmama izin verin. Günlük olarak csv'den veri alan ve bunları (yatay seviyeler) grafikte gösteren bir gösterge vardır. Bir ev dizüstü bilgisayarından bir sunucu oluşturuldu (zayıf, ancak hesaplamalara gerek yok ve csv verecek ve çok küçükler). Bağlantı testi için sunucuda normal bir forumun motorunu sular altında bıraktım - her şey dışarıdan görülebilir gibi görünüyor. Yardım tavsiyesi. Ondan csv dosyalarını okumak için sunucuda ne olmalı? Onlar. Gösterge csv veritabanına nasıl bağlanır? Belki sunucunun FTP motorunu veya başka bir şeyi doldurun ve belki MT için bazı özel bağlantı noktaları açmanız gerekiyor? Yoksa hiç yanlış yöne mi gittim? teşekkürler


Arkadaşlar bir soru daha. Bir ev dizüstü bilgisayarı yüklemek değil, göstergeyi csv dosyalarıyla, örneğin Yandex.Disk veya Cloud@mail.ru veya Box.net gibi ücretsiz bulut dosya depolarıyla bağlamak için kullanmak mümkün mü? teşekkürler
 
Vitaly Muzichenko :

İşte bulma işlevi

dBid ve dPoint'i ayrı ayrı kaydetmeniz mi gerekiyor?