MT için Python'da bir ticaret sistemi yapmak. - sayfa 3

 
Yuriy Asaulenko :

O başka bir konu.)

Takım kurmuyorum. Kendi başıma yürüyorum, gerekli ve ilginç bulduğum şeyleri yapıyorum ve hiçbir yükümlülük kabul etmiyorum.

Benimle yürümek isteyen olursa - ayrıca itiraz yok ve yükümlülük yok.

Bir komuttan bahsetmiyorum, Python ve R'yi MQL ile bağlamak için EXE uygulaması şeklinde bir motordan bahsediyorum, o konuda önermiştim.
 
Ivan Negreshniy :
Bir komuttan bahsetmiyorum, Python ve R'yi MQL ile bağlamak için EXE uygulaması şeklinde bir motordan bahsediyorum, o konuda önermiştim.

Sizin için EXE olacak - Python'da sorun değil. R, üzgünüm, kullanmıyorum - IMHO, her şeyin ve her şeyin büyük bir dökümü. Bu çöplükte elmas varsa, onları bulmak sorunludur. SanSanych bana söylemediği sürece.)

Ben esas olarak sinir ağlarıyla ilgileniyorum ve bunlardan R olmadan bile yeterince var.

Ancak genel olarak, etkileşim tekniği evrensel olarak planlanmıştır ve muhtemelen bunu R için de kullanabilirsiniz.

 
Artık uygulamamız hazır olduğuna göre, Python ile uçbirim verisi alışverişine başlamanın zamanı geldi.
Başlamak için, en basit değişim türünü seçelim - dosyalar aracılığıyla veri alışverişi.
Şimdi çoğu homurdanıyor, ama boşuna. Eh, bırakın onları.)
1. Bir uygulama oluşturma ve hata ayıklama dönemi için dosya paylaşımı en etkilidir, çünkü yükseltmek için herhangi bir çaba gerektirmez. Ve uygulamayı oluşturduktan sonra başka bir şeyle değiştirilebilir.
2. Çoğu hazır TS'de dosya değişim hızı fazlasıyla yeterli. 50-100ms. sen yoksun?
3. RAM-Disk üzerinden dosya alışverişi yaparken, döviz kuru 1,5 GB / s'ye ulaşır. Gecikmeler hiçbir şekilde ölçülemez.
Genel olarak, umrumda değil ve rakipleri unutma.))
Eh, aslında, biz veya konu onu görmek için yaşarsa, son aşamada başka bir değişim planlanıyor.)

CSV dosyaları aracılığıyla terminalle değiş tokuş yapacağız. Tek yöndeyken - terminalden uygulamaya.
Çıkar çatışmasını önlemek için semafor dosyaları kullanacağız.
Öyleyse DataTS.csv veri dosyası olsun ve STS.s semafor dosyası olsun.
Terminal, DataTS.csv'ye veri yazar ve yazdıktan sonra boş bir semafor dosyası STS.s oluşturur.
Uygulama, STS.s semafor dosyasının varlığını kontrol eder, ardından DataTS.csv dosyasını okur ve ardından STS.s semafor dosyasını siler.
Ardından terminal, STS.s semafor dosyasının kaybolduğunu algılar ve ancak bundan sonra DataTS.csv dosyasına yeni veriler yazar.
Phyton ve MT'nin dosya işlevlerine bağlı olarak seçenekler mümkündür - Henüz bakmadım.
Ancak, hepsi bir anda değil, önce Python ile çalışmanız ve yeteneklerini belirlemeniz gerekir.
Yapacağımız şey bu.
 
Son ziyaretimden bu yana bazı değişiklikler oldu. Uygulama tamamen işlevsel hale geldi - önceki gönderide yazılan her şey uygulandı. Artık tüm düğmeler çalışıyor ve dosya değişimi uygulanıyor.
- Temizle düğmesi çıktı penceresini temizler,
- Gönder düğmesi, giriş penceresinin satırını çıkış penceresine yönlendirir,
- Başlat düğmesi dosya paylaşımını sağlar,
- Durdur düğmesi dosya paylaşımını durdurur.
Bunu kontrol etmek kolaydır. C:\PyTS klasörünü oluşturuyoruz, veri dosyasını içine koyuyoruz - DFile.csv ve semafor dosyasını içine koyuyoruz - SFile.tx. Python programımız semafor dosyasını algılar, veri dosyasını okur, içeriğini çıktı penceresine yazdırır ve semafor dosyasını siler.
Artık DFile.csv dosyasındaki verileri değiştirebilir ve yeni bir semafor dosyası oluşturabilirsiniz, ardından program yeni verileri okuyacak ve çıkaracaktır.
Dilerseniz MQL'de basit bir program yazabilir, programımızdaki okuma klasörünü MT'nin yazdığı klasöre değiştirebilir ve zaten döviz kurunu, olası veri eksikliklerini ve çok daha fazlasını bağımsız olarak değerlendirebilirsiniz.
Dosya alışverişinden sorumlu tek işlev FileExchange()'dir. Ek bir iş parçacığında uygulanır - zamanlayıcı iş parçacığı. Bu tür düzinelerce iş parçacığı ve işlev üretilebilir ve uygulamanın çalışmasını hiçbir şekilde etkilemez - yani, emrimizde düzinelerce paralel ve bağımsız çalışan veri alışverişi kanalımız olabilir.
Şimdi zamanlayıcı 10.0s'ye ayarlanmıştır - en az 0.001s'ye sıfırlayabilirsiniz - belgelere bakın.
Peki, hızı ve diğer özellikleri gerçekten ölçmek istiyorsanız - değişim yolundaki print () hata ayıklama işlevlerini kaldırın - işin hızını önemli ölçüde azaltırlar.
Python program kodu ekte. Her zamanki gibi, .py olarak yeniden adlandırın
Dosyalar:
PyTS_1.0.txt  3 kb
 

CSV dosyalarını değiş tokuş etmekten bahsettik, ancak sürüm 1.0'da (önceki gönderiye bakın) sadece dosyaları açıp okuyordu. Izlemek. sürüm - 1.01, küçük iyileştirmelerden sonra CSV'yi okur ve bunları InData değişkeninde saklar.

Aslında, tüm revizyon:

def FileExchange():
    global Change
     if Change==True:
         if os.path.exists(SFile):
            print( "SFile.txt is" )
             if os.path.exists(DFile):
                print( "DFile.csv is" )
                InData = csv.reader(open(DFile, 'r' ))
                data_read = [row for row in InData]
                print(data_read)
                os.remove(SFile)
             else :
                print( "DFile.csv no" )
         else :
            print( "SFile.txt no" )
        print( 'Вывод таймера' )
        timer =threading.Timer( 10.0 ,FileExchange)
        timer.start()

Sadece 3 satır + csv kitaplığının bağlantısı değiştirildi.

Peki, ve CSV içeriğinin InData değişkeninden kontrol çıktısı:

In [18]: [['04.08.2018 14:00', ' 1300', ' 1295', '1310', '1305', '100'], ['04.08.2018 14:10', ' 1307', ' 1297', '1320', '1315', '150']]

Artık satır değerleri satır, sütun gibi dizinlere göre kullanılabilir.

Eh, kodun kendisi - eke bakın.

Dosyalar:
PyTS_1.01.txt  3 kb
 
Yuriy Asaulenko :

CSV dosyalarını değiş tokuş etmekten bahsettik, ancak sürüm 1.0'da (önceki gönderiye bakın) sadece dosyaları açıp okuyordu. Izlemek. sürüm - 1.01, küçük iyileştirmelerden sonra CSV'yi okur ve bunları InData değişkeninde saklar.

Aslında, tüm revizyon:

Sadece 3 satır + csv kitaplığının bağlantısı değiştirildi.

Peki, ve CSV içeriğinin InData değişkeninden kontrol çıktısı:

Artık satır değerleri satır, sütun gibi dizinlere göre kullanılabilir.

Eh, kodun kendisi - eke bakın.

Dosyaları paylaşmak için kullanmak en iyi çözüm değildir. Dosya işlemleri çok yavaş. Böyle bir değişim için bir RAM diski bağlamanız gerekir.
 
Grigoriy Chaunin :
Dosyaları paylaşım için kullanmak en iyi çözüm değildir. Dosya işlemleri çok yavaş. Böyle bir değişim için bir RAM diski bağlamanız gerekir.
Dosya değişiminin performans özelliklerini (nedir) ve gerekli görevi (ne gerekli) verebilir misiniz?


Ve örneğin, çok hızlı olduklarını söyleyeceğim, yavaş değil. Sayısal özellikler olmadan, hem sizin hem de benim ifadelerim hiçbir şeye dayanmaz ve bu nedenle çözülmekte olan problemde bir anlam ifade etmez. Hem dosya alışverişinin özelliklerine hem de görevin gereksinimlerine ihtiyacımız var ve ancak bunları karşılaştırdıktan sonra makul sonuçlara varabiliriz. Yuri Asaulenko dosyaların uygun olduğuna karar verdiğinden, planlanan veri aktarım hacimlerini ve bunların işlenme zamanını daha iyi bildiğini düşünüyorum.

Genel olarak, disk dosyalarının geçici belleğe göre yadsınamaz bir avantajı vardır - bunlar kapalı bir bilgisayarın diskinde saklanır ve bir hafta veya bir yıl içinde görüntülenebilir. Kontrol, analiz, doğrulama için, sadece gözlem için.

 
Grigoriy Chaunin :
Dosyaları paylaşım için kullanmak en iyi çözüm değildir. Dosya işlemleri çok yavaş. Böyle bir değişim için bir RAM diski bağlamanız gerekir.

Bu konu, bu başlıkta, önceki gönderilerde, dahil olmak üzere zaten tartışıldı. ve gerekirse RAM-Disk'in olası kullanımı:

Bir uygulama oluşturma ve hata ayıklama dönemi için dosya paylaşımı en etkilidir, çünkü yükseltmek için herhangi bir çaba gerektirmez. Ve uygulamayı oluşturduktan sonra başka bir şeyle değiştirilebilir.

2. Çoğu hazır TS'de dosya değişim hızı fazlasıyla yeterli. 50-100ms. sen yoksun?
3. RAM-Disk üzerinden dosya alışverişi yaparken, döviz kuru 1,5 GB / s'ye ulaşır. Gecikmeler hiçbir şekilde ölçülemez.
Genel olarak, umrumda değil ve rakipleri unutma.))
Eh, aslında, biz veya konu onu görmek için yaşarsa, son aşamada başka bir değişim planlanıyor.)
Ve ayrıca konunun ilk mesajlarından birinde.
 

PyTS 1.02'nin yeni sürümü ile tanışın. Bu sürüm işlevsel olarak 1.01 sürümüne eşdeğerdir, ancak zaten gereksiz print() kontrolleri koddan kaldırılmıştır ve bir sınıf yaklaşımı uygulanmaya başlanmıştır (Lenin ayrıca yaklaşımın sınıf tabanlı olması gerektiğini de yazmıştır) - CSV'nin işlenmesi dosyalar tamamen cCSVJob sınıfına emanet edilmiştir.

Ekte, programın tüm önceki sürümlerini ve ayrıca PyTS klasöründe test için kaynak verilerle gerekli dosyaları bulacağınız zip dosyası.

Dosyalar:
PyTS.zip  6 kb