Biblioteca di Roffild - pagina 10

 
Advanced Vector Extensions - Wikipedia
  • en.wikipedia.org
AVX2 expands most integer commands to 256 bits and introduces fused multiply-accumulate (FMA) operations. AVX-512 expands AVX to 512-bit support using a new EVEX prefix encoding proposed by Intel in July 2013 and first supported by Intel with the Knights Landing processor, which shipped in 2016.[3][4] AVX uses sixteen YMM registers. Each YMM...
 
Roffild:

Il messaggio"La tua CPU supporta istruzioni che questo binario di TensorFlow non è stato compilato per usare: AVX AVX2" appare anche su CPU più recenti. Questo è un bug noto in TensorFlow. Non ha niente a che fare con la versione di Python.

C'è un altro messaggio come "...not load dll..." da Python


Questo è vero... Ho i3 e GForce video, se non sbaglio il portatile ha 3-4 anni, anche i giocattoli volano bene, ma con AVE appena scoperto

 

@Roffild, buon pomeriggio.

Ho installato la vostra libreria e ho subito colto l'errore del primissimo controllo:

2019.07.09 21:56:43.540 PythonDLL_Example (USDRUB,D1)   ERROR: PythonHome == ""

Anche le variabili sono tutte al loro posto.


Cos'altro ho dimenticato di fare?

Grazie.

 
 

Sì, ho capito tutto.

Mi dispiace per la stupidità.

 

Buon pomeriggio.

Ha iniziato i primi passi sull'uso della tua biblioteca. Come esempio abbiamo preso PythonDLL_Example.mq5 e PythonDLL_Example.py. Ho appena deciso di testare il risultato della chiamata. preso, fatto un array di 11 numeri e passato alla funzione. Finora la funzione in PythonDLL_Example.py sembrava così:

    def getDouble(self, magic: int, value: float, array: tuple) -> tuple or list:
        x = array[2] + array[1]
        return [x]

(il mio primo cambiamento ))) )Tutto ha funzionato come dovrebbe. A causa del fatto che ho iniziato a scrivere quando lo scambio è chiuso, per testare la funzione ho spostato la chiamata a int OnInit() Nessun problema, funziona quando l'EA è in esecuzione.

Successivamente, ha iniziato semplicemente ad aggiungere le librerie importate nel file PythonDLL_Example.py

Il file ha cominciato ad assomigliare a questo:

# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# https://github.com/Roffild/RoffildLibrary
# ==============================================================================

import pandas as pd

import numpy as np

import tensorflow as tf
from tensorflow import keras

import sys
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

class PythonDLL_Example():
    def getLong(self, magic: int, value: int, array: tuple) -> tuple or list:
        raise NotImplementedError

    def getULong(self, magic: int, value: int, array: tuple) -> tuple or list:
        raise NotImplementedError

    def getDouble(self, magic: int, value: float, array: tuple) -> tuple or list:
        x = array[2] + array[1]
        return [x]

    def getString(self, magic: int, value: str, array: bytes) -> str:
        if magic == 1:
            return value + str(sys.version)
        if magic == 2:
            return str(array) + " " + str(sys.version_info)
        if magic == 3:
            return "sys.path:\n" + "\n".join(sys.path) + \
                   "os.environ[\"PATH\"]:\n" + os.environ["PATH"].replace(";", "\n")
        raise Exception("This is not a bug! This is a feature :D")


__mql__ = PythonDLL_Example()

Cominciò ad accadere quanto segue:

1. Appendo l'EA, il risultato è corretto. L'output qui sotto.


Corretto! Il risultato è 251920 - questo è corretto!

2. Ritiro l'Expert Advisor e lo riattacco. L'output è mostrato qui sotto:



Alla terza o quarta volta, l'Expert Advisor si blocca.

Qual è il problema e come può essere risolto? Cosa devo fare?

Grazie

 
  • Chiamare pyFinalize() per liberare la memoria ha senso, ma a causa di un bug nella popolare libreria NumPy, non dovresti farlo. issue8097,issue34309

I crash sono inevitabili quando si usano librerie popolari. I crash avvengono proprio nel momento in cui si finisce e se ne inizia uno nuovo, non durante l'esecuzione del codice. È più facile riavviare il terminale per una nuova esecuzione del codice. Il tester potrebbe bloccarsi se si uccide il terminale prima del completamento.

I crash dump possono accumularsi inc:\Users\AppData\Local\CrashDumps

Il problema è con Python stesso, o piuttosto la mancanza di un meccanismo per notificare alle librerie esterne il completamento.

Crash when importing numpy from the Python C-API after calling Py_Finilize() · Issue #8097 · numpy/numpy
Crash when importing numpy from the Python C-API after calling Py_Finilize() · Issue #8097 · numpy/numpy
  • numpy
  • github.com
New issue Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community. Already on GitHub? Sign in to your account
 

OK, grazie mille.

Lavorerò con quello che ho.

 

Sto piangendo lacrime di sangue!

Una riga alla volta cercando di scrivere il codice della funzione.

Cosa è successo:

    def getDouble(self, magic: int, value: float, array: tuple) -> tuple or list:
        x = array[2] + array[1]
        return [x]

Il valore di x viene restituito correttamente! Il risultato è 251920

Cosa è stato aggiunto:

    def getDouble(self, magic: int, value: float, array: tuple) -> tuple or list:
        x = array[2] + array[1]
        df = pd.read_csv("RTSSplice.csv", usecols=['Low', 'Open', 'Close', 'High', 'Volume', 'Indicator1', 'Indicator2', 'Indicator3', 'Indicator4', 'Indicator5', 'Indicator6', 'Indicator7'], encoding='utf-16')
        return [x]

Il valore di x ritorna in modo errato! Il risultato è 3.211426697968103e-322

Ho provato ad aggiungere-rimuovere una stringa diverse volte! Ho appena letto il file con la stringa aggiunta! Non influisce in alcun modo sul calcolo di x! La libreria pandas viene importata.

Perché il sistema si comporta così? Dove cercare il problema?

Grazie! )

 
È possibile eseguire il debug del codice anche in PyCharm. E potete anche mettere print() in posti problematici - è il modo più semplice per controllare i valori delle variabili. La console può essere attivata.