MetaTrader 5 Python Kullanıcı Grubu - Metatrader'da Python nasıl kullanılır - sayfa 83

 

Bu doğru - uygun şekilde hazırlanmadı ....

Bununla ilgili nerede okumalı? Bana göre neyin önemli neyin önemsiz olduğu konusunda Meclis için veriler hazırlıyorum.

Bir şey benim için bir gizem: aynı türden verileri "bir grup halinde" toplamanız mı yoksa kullanılabilir hale geldikçe eklemeniz mi gerekiyor?

Hangi taraftan veri toplanacak: daha "eski" mi yoksa "yeni" mi?

 
Сергей Таболин :

Bu doğru - uygun şekilde hazırlanmadı ....

Bununla ilgili nerede okumalı? Bana göre neyin önemli neyin önemsiz olduğu konusunda Meclis için veriler hazırlıyorum.

Bir şey benim için bir gizem: aynı türden verileri "bir grup halinde" toplamanız mı yoksa kullanılabilir hale geldikçe eklemeniz mi gerekiyor?

Hangi taraftan veri toplanacak: daha "eski" mi yoksa "yeni" mi?

MO konusunda birinden cevap vermesini isteyin. Bu konu konektörle ilgili.

 
Сергей Таболин :

Sorun şu ki, normalleşme felaket bir şey!

Açıklamama izin ver. Bazı veriler var A, B, C...

Önem ve benzeri açılardan farklıdırlar. Herkes (Google'da) satırlarla değil, sütunlarla (A-A-A, B-B-B, B-B-B) normalleştirmenin gerekli olduğunu yazıyor. Bu mantıksal olarak anlaşılabilir.

Ancak "tahmin edilecek" yeni veriler olduğunda, yalnızca BİR satır ise NASIL normalleştirilir? Ve bu satırdaki herhangi bir terim, eğitim ve test verilerinde normalleştirmenin ötesine geçebilir mi?

Ve hatlarda normalleştirme herhangi bir etki yaratmaz!

Aslında, bu nüansları kontrol ettikten sonra, bu "ruhun çığlığı" içimde doğdu)))

normalizasyon katsayıları korur. Aralığın ötesine geçmekten kaçınmak için, büyük bir tarih parçası alıp normalleştirmeniz, ardından bu katsayıları uygulamanız gerekir. yeni verilere

normalleştirilmemiş verilerde, ızgara öğrenmeyecek veya zayıf öğrenecektir. Böyle özellikleri var
 
Maxim Dmitrievsky :

normalizasyon katsayıları korur. Aralığın ötesine geçmekten kaçınmak için, büyük bir tarih parçası alıp normalleştirmeniz, ardından bu katsayıları uygulamanız gerekir. yeni verilere

normalleştirilmemiş verilerde, ızgara öğrenmeyecek veya zayıf öğrenecektir. Böyle özellikleri var

Her şey mantıklı ve anlaşılır, ama! Ağ öğreniyor! Ek olarak, normalleştirilmemiş verileri kullanırken eğitimin daha zor olduğu, ancak bunun kritik olmadığı bilgisi vardır.

Ve aralıklardan nasıl atlamamalı? Örneğin bir fiyatı var. Eğitim ve test verileri için bir fiyat aralığı var - 123-324 alalım. Ama bugün fiyat 421'e yükseldi. Bu aralığa nasıl düşecek?

Ancak sorunun özünden uzaklaştık - neden normal eğitim ve testlerle tahmin hiç bir şey değil?

 

Canım kayaklarım yine gitmiyor... Yardım istiyorum.

Eğitilmiş ağın tahminini kontrol etmek için küçük bir test cihazı çizmeye karar verdim.

# Загрузка данных
df_full = pd.read_csv(flname_csv, header=None)
r, c = df_full.shape
border = c - row_signal
test_data = np.array(df_full.values[:, :border])
test_verification = np.array(df_full.values[:, border:])
print(test_data[2], 'len =', len(test_data[2]))
print(test_verification[2], 'len =', len(test_verification[2]))

Burada her şey iyi

[ 3.00000 e+ 00 7.00000 e+ 00 1.14656 e+ 00 1.14758 e+ 00 1.14656 e+ 00 1.14758 e+ 00
 3.00000 e+ 00 7.00000 e+ 00 1.27800 e+ 03 1.27800 e+ 03 3.00000 e+ 00 7.00000 e+ 00
 1.14758 e+ 00 1.14857 e+ 00 1.14758 e+ 00 1.14857 e+ 00 3.00000 e+ 00 8.00000 e+ 00
 2.93000 e+ 02 6.20000 e+ 02 3.00000 e+ 00 8.00000 e+ 00 1.14857 e+ 00 1.14960 e+ 00
 1.14821 e+ 00 1.14960 e+ 00 3.00000 e+ 00 8.00000 e+ 00 4.78000 e+ 02 7.23000 e+ 02
 3.00000 e+ 00 8.00000 e+ 00 1.14960 e+ 00 1.14966 e+ 00 1.14860 e+ 00 1.14860 e+ 00
 3.00000 e+ 00 8.00000 e+ 00 2.32100 e+ 03 2.41100 e+ 03 ] len =  40
[ 1 . 0 .] len =  2

Ve sonra tripler...

 if num_check_rows > r or num_check_rows == 0 :
    num_check_rows = r

model = tf.keras.models.Sequential()
model = tf.keras.models.load_model(flname)
model.summary()

for i in range(num_check_rows):
    b = model.predict(test_data[i])
    a = b[ 0 ]
    x = a[ 0 ]
    y = a[ 1 ]
    x = format(x, '.5f' )
    y = format(y, '.5f' )
    print(f 'ожидалось {test_verification[i]} >>> получили [{x} {y}]' )

küfür

Model: "sequential_16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 20 )                 820        
_________________________________________________________________
dropout (Dropout)            (None, 20 )                 0          
_________________________________________________________________
dense_1 (Dense)              (None, 10 )                 210        
_________________________________________________________________
dense_2 (Dense)              (None, 2 )                 22         
=================================================================
Total params : 1 , 052
Trainable params : 1 , 052
Non-trainable params : 0
_________________________________________________________________

Traceback (most recent call last):
  File "M:/PythonProgs/PycharmProjects/NNets/ТестерНС.py" , line 79 , in <module>
    b = model.predict(test_data[i])
.....
ValueError: Error when checking input: expected dense_input to have shape ( 40 ,) but got array with shape ( 1 ,)

Sorun nedir?

 

İnternette dolaştıktan sonra ve kodumu yazdığım makaleye baktıktan sonra, "yeni başlayanlar için" herhangi bir makalenin her yazarının kesinlikle önemli bir şey söylemeyi unutacağı hayal kırıklığı yaratan bir sonuca vardım ...

Burada ve burada – ağı eğitirken StandardScaler'ın kullanıldığı ortaya çıktı. Ve makalede, bunun ne için olduğu hakkında hiçbir gu-gu yok.

Ayrıca, StandardScaler standardizasyon ile ilgilidir. Ve tek bir girdi vektörü için aynı standardizasyonu nasıl çıkarabilirim - özellikle bir kelime değil.

Veri kümesindeki sütunlara göre "standartlaştırma" yapılması daha da kötü! Hayır, sadece istatistikler için - bu normaldir. Ve tahminler için - bu "***dolu"! Yeni veriler göründüğünde, ağı yalnızca yeni verilerin "standartlaştırma" aralığına girmesi için yeni bir şekilde eğitmem gerekiyor mu ???

Övün!

Bu "yeni ağ" öğrenirken, durum şimdiden kökten değişebilir. İyi de buna ne gerek var?

Burada bir sürü "keskin" kitaplığa sahip Python var ....

Beni ikna edebilirseniz çok minnettar olurum.


not Python'da boşuna zaman harcadığıma inanmak istiyorum.
 
Сергей Таболин :

İnternette dolaştıktan sonra ve kodumu yazdığım makaleye baktıktan sonra, "yeni başlayanlar için" herhangi bir makalenin her yazarının kesinlikle önemli bir şey söylemeyi unutacağı hayal kırıklığı yaratan bir sonuca vardım ...

Burada ve burada - ağı eğitirken StandardScaler'ın kullanıldığı ortaya çıktı. Ve makalede, bunun ne için olduğu hakkında hiçbir gu-gu yok.

Ayrıca, StandardScaler standardizasyon ile ilgilidir. Ve tek bir girdi vektörü için aynı standardizasyonu nasıl çıkarabilirim - özellikle bir kelime değil.

Veri setindeki sütunlara göre "standartlaştırma" yapılması daha da kötü! Hayır, sadece istatistikler için - bu normaldir. Ve tahminler için - bu "***dolu"! Yeni veriler göründüğünde, ağı yalnızca yeni verilerin "standartlaştırma" aralığına girmesi için yeni bir şekilde eğitmem gerekiyor mu ???

Övün!

Bu "yeni ağ" öğrenirken, durum şimdiden kökten değişebilir. İyi de buna ne gerek var?

Burada bir sürü "keskin" kitaplığa sahip Python var ....

Beni ikna edebilirseniz çok minnettar olurum.


not Python'da boşuna zaman harcadığıma inanmak istiyorum.
Belki de bu daha başlangıç olduğu için.
Ancak son zamanlarda mt için python olanaklarıyla ilgilenmeye başladım. Ve bunu yapmanın mümkün olup olmadığı hakkında kimse cevap vermedi. Buna ek olarak, mql4'te çalışmayacaktır. Zaman kaybetmemeye karar verdim (belki bir süre sonra durum daha iyiye doğru değişecektir.
 

Acıyla yarı yarıya uğraştım. )))

Ama şimdi başka bir soru ortaya çıktı (bunun uğruna tüm bunları başlattım):

Ağı eğitirken aşağıdaki sonuçları aldım

Score on train data     Score on test data      Test loss       Test acc
0.970960                  0.968266                  0.199544          0.981424

Başka bir deyişle - sonuç ustaca!

Test cihazınızı çalıştırın. Bu sonucu aldım

Model: "sequential_16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 15 )                 465        
_________________________________________________________________
dropout (Dropout)            (None, 15 )                 0          
_________________________________________________________________
dense_1 (Dense)              (None, 7 )                 112        
_________________________________________________________________
dense_2 (Dense)              (None, 2 )                 16         
=================================================================
Total params : 593
Trainable params : 593
Non-trainable params : 0
_________________________________________________________________
2021 - 01 - 18 17 : 59 : 04.495645 : I tensorflow/stream_executor/platform/ default /dso_loader.cc: 44 ] Successfully opened dynamic library cublas64_10.dll
ожидалось [ 0 . 1 .] >>> получили [ 0.08348 0.08859 ]
ожидалось [ 0 . 1 .] >>> получили [ 0.08324 0.08838 ]
ожидалось [ 0 . 0 .] >>> получили [ 0.08667 0.09141 ]
ожидалось [ 0 . 0 .] >>> получили [ 0.08263 0.08784 ]
ожидалось [ 0 . 0 .] >>> получили [ 0.09200 0.09218 ]
ожидалось [ 0 . 0 .] >>> получили [ 0.08351 0.08861 ]
ожидалось [ 0 . 0 .] >>> получили [ 0.08944 0.09384 ]
ожидалось [ 1 . 0 .] >>> получили [ 0.08313 0.08828 ]
ожидалось [ 1 . 0 .] >>> получили [ 0.08432 0.08933 ]

Process finished with exit code 0

Peki, söyle bana, ağ hangi yerde %98 doğru sonuçlara göre eğitiliyor????

 

Merhaba, tartışmadan birkaç sayfa okumak, aşağıdaki soru hakkında somut bir şey bulamadı:


- Şu anda MT ve R entegrasyonu için MetaTraderR veya MetaTrader5 paketleri gibi çalışan herhangi bir şey var mı?


Şerefe

 

Afedersiniz, destanıma devam edeceğim ...)))

Aynı Google'dan biraz daha bilgi topladıktan sonra şu sonuca vardım:

  1. Verilerin "dengelenmesi" gerekir. Örneğin, 1000 giriş verisinden yalnızca 100'ünde sinyaller görünüyorsa, en az 1000 - ((1000 - 100)/3) = 700 "boş" veri (sinyal oluşturmayan) kaldırılmalıdır.
  2. Gerisi "normalleştirmek" için arzu edilir. 0-1 aralığına getirin. Ancak burada normalleştirme "aralığını" seçmede bariz bir zorluk var. Minimum ve maksimum nedir? Henüz bilmiyorum. Her giriş dizisini yalnızca aralığına göre normalleştiririm ...

Bu iki koşulu yerine getirdikten sonra ağ öğrenmede gözle görülür bir azalma elde ettim. Üstelik şunu keşfettim

  1. Daha önce atılan bazı kayıp işlevleri daha iyi çalışır.
  2. Daha az gizli katmana sahip sonuçlar baskın olmaya başladı.
  3. Eğitim dönemlerinin sayısını kontrol etmek için kalır.

Artı, başka bir soru ortaya çıktı: ağın yanıtı ne olmalı?

  1. Bir nöron (0-1-2) (al-sat sinyali yok)
  2. İki nöron [0-0],[1-0],[0-1]
  3. Üç nöron [0-0-1],[1-0-0],[0-1-0]
???