MetaTrader 5 Python User Group - Come usare Python in Metatrader - pagina 75

 
MrBrooklin:

Sì, lo sto aprendo in Excel. Finora non è possibile aggiornare la quotazione nel file EUR_USD_QUOTE.csv aperto in tempo reale.

L'idea era quella di guardare la tabella e vedere come cambia la quotazione.

Sinceramente, Vladimir.

Quindi, non ha niente a che vedere con Python o Exel. Il file è stato aperto e i dati sono stati importati in Exel. Il programma si deve scrivere in esso, utilizzando il VBA incorporato.

Non hai bisogno di un programma Python, è più facile usare VBA. Non ci ho lavorato molto, ma sono sicuro che può fare GET.

Самоучитель по Excel VBA
Самоучитель по Excel VBA
  • 2020.05.11
  • Антон Андронов
  • office-guru.ru
Данный учебник является введением в язык программирования Excel VBA (Visual Basic for Applications). Изучив VBA, Вы сможете создавать макросы и выполнять в Excel практически любые задачи. Вы очень...
 
Alexey Volchanskiy:

Quindi non ha niente a che vedere con Python o Exel. Avete aperto il file, i dati sono stati letti in Exel e questo è tutto. Poi devi scrivere un programma in esso usando VBA incorporato

Non hai bisogno di un programma Python, è più facile usare VBA. Non ci ho lavorato molto, ma sono sicuro che può fare GET.

Ciao Alexey!

È impossibile scrivere un codice di programma in PYTHON in modo che il file EUR_USD_QUOTE.csv venga chiuso e immediatamente riaperto con una nuova quotazione?

Non so ancora nulla di VBA, ma grazie per il suggerimento.

Saluti, Vladimir.

 
Maxim Dmitrievsky:

Apri il file con Excel? Quindi apre il file in modo monopolistico. Dovete permettere ad altre applicazioni/utenti di modificare il file da qualche parte nelle impostazioni.

Forse http://blog.depit.ru/odnovremennaya-rabota-v-excel/ aiuterà.

In generale, non potete modificare un file aperto in un'altra applicazione.

Maxim, quanto è difficile fare in modo che il file EUR_USD_QUOTE.csv si apra prima, come è stato implementato nel codice sorgente, e poi, dopo un certo intervallo, si chiuda per un secondo sotto l'influenza del codice del programma finalizzato e si riapra immediatamente, ma con una nuova quotazione? E così via all'infinito...

Saluti, Vladimir.

 
MrBrooklin:

Maxim, quanto è difficile fare in modo che il file EUR_USD_QUOTE.csv prima si apra come è stato implementato nel codice sorgente, e dopo un certo intervallo di tempo, sotto l'influenza del codice del programma finalizzato, si chiuda per un secondo e poi si riapra, ma con una nuova quotazione? E così via all'infinito...

Saluti, Vladimir.

Prova questo

import csv
import requests
from bs4 import BeautifulSoup
import os


def get_data(url_to_scrap='https://ru.investing.com/currencies/streaming-forex-rates-majors',
             file=None, save_file="Name.csv"):
    if url_to_scrap is not None:
        header = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                  'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0'}
        r = requests.get(url_to_scrap, headers=header)
        data = BeautifulSoup(r.content, 'html.parser')
    else:
        data = BeautifulSoup(open(file), 'html.parser')
    table = data.find('tr', id='pair_1')
    table = table.find_all(class_='pid-1-bid')
    row_data = []
    for row in table:
        row_data.append([row.get_text()])
    with open(save_file, 'w') as save:
        for row in row_data:
            writer = csv.writer(save, delimiter=';')
            writer.writerow(row)
    os.startfile(save_file)


from datetime import datetime
import time


t = datetime.now().hour
t2 = t

while True:
    t = datetime.now().hour
    if(t2 != t):
        os.system("TASKKILL /F /IM excel.exe")
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep(10)


 
Alexey Volchanskiy:

Quindi né Python né Exel hanno nulla a che fare con questo. Hai aperto il file, i dati in Exel sono stati contati e questo è tutto. È quindi necessario scrivere un programma in esso sul VBA incorporato

E se è così, il programma su Python non è necessario, è più facile fare tutto in una volta nel VBA. Non ho lavorato molto con lui, ma sono sicuro che può fare GET.

Non avete nemmeno bisogno di VBA. Tutto quello che dovete fare è usare excel inizialmente. Scriverò le istruzioni in inglese... Creare una nuova cartella di lavoro. Clicca sulla scheda Dati > Ottieni dati > Da altre fonti > Dal web, poi incolla l'indirizzo web nel campo url. Poi clicca su aggiorna tutte le altre opzioni > Proprietà di connessione e configura l'aggiornamento automatico ogni n minuti.

 
MrBrooklin:

Maxim, quanto è difficile rendere il file EUR_USD_QUOTE.csv aperto prima, come è stato implementato nel codice sorgente, e in qualche intervallo di tempo sotto l'influenza del codice modificato per un secondo chiuso e immediatamente riaperto, ma con una nuova citazione? E così all'infinito...

Con rispetto, Vladimir.

Il file sarà bloccato per la scrittura da excel se lasciate la finestra di excel aperta. Sarà necessario aggiungere la logica per tenere conto di un file bloccato. Inoltre, perché stai raschiando il web per le citazioni? Perché non usate MetaTrader per raccogliere le quotazioni? Non ha senso.

import itertools
import os
import pathlib

import bs4
import requests


def main():
    url = 'https://ru.investing.com/currencies/streaming-forex-rates-majors'
    r = requests.get(url, headers={'user-agent': 'Python Agent'})
    soup = bs4.BeautifulSoup(r.content, 'lxml')
    eurusd_bid = soup.find('td', 'pid-1-bid').text.replace(',', '.')
    for i in itertools.count():
        file = pathlib.Path() / f'eurusd_bid_{i}.csv'
        try:
            file.write_text(eurusd_bid)
            os.startfile(file)
            break
        except PermissionError:
            continue


if __name__ == '__main__':
    main()
 
Maxim Dmitrievsky:

prova questo.


Grazie, Maxim!

Lo sto già provando. Il ciclo è iniziato, ma il file non si sta ancora aprendo. Lascerò il ciclo in funzione e aspetterò.

Saluti, Vladimir.


P.S. Pardon! Non ha prestato subito attenzione a ciò che sta ora. L'ho cambiato al minuto EUR_USD_QUOTE.csv file è stato aperto ma ho ottenuto questo messaggio nella scheda Run di Pycharm:

�訡��: �� 㤠���� ���� ����� "excel.exe".

Poi, dopo un altro minuto circa, il file si è chiuso e riaperto, ma in Exel è apparsa una scheda sul lato sinistro del foglio di calcolo chiedendomi di salvare il testo precedentemente aperto. Ho aspettato ancora un po' per vedere cosa sarebbe successo dopo, ma poi il ciclo si è fermato ed è apparso un messaggio come questo:

�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 4208, � �����襭.
�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 3168, �� �����襭.
Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 37, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 23, in get_data
with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permesso negato: 'EUR_USD_QUOTE.csv'

Questo è il risultato finora, ma ho già fatto progressi!

Saluti, Vladimir.

 
nicholish en:

Il file sarà bloccato per la scrittura da excel se lasciate la finestra di excel aperta. Sarà necessario aggiungere la logica per tenere conto di un file bloccato. Inoltre, perché stai raschiando il web per le citazioni? Perché non usate MetaTrader per raccogliere le quotazioni? Non ha senso.

Il file sarà bloccato per la scrittura su Excel, se si lascia la finestra di Excel aperta. Sarà necessario aggiungere la logica per tenere conto del file bloccato. Inoltre, perché stai cercando delle citazioni su internet? Perché non usate MetaTrader per raccogliere le quotazioni? Questo non ha senso. (Da me personalmente: Scusa, nicholish en, non parlo inglese, quindi ho usato Google Translate)

Voglio imparare come prendere le citazioni da Internet usando il linguaggio Python, in modo da poterle guardare non nel terminale, ma in qualche file, per esempio csv . Pensavo fosse un compito elementare, ma si scopre che non lo è. Forse sono sulla strada sbagliata, ma chi non cerca nulla, non trova nulla.

Ora passiamo al codice che hai suggerito. Dopo aver lanciato il codice in Pycharm ho visto il seguente messaggio:

Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", line 25, in <module>
main()
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/10.py", linea 13, in main
eurusd_bid = soup.find('td', 'pid-1-bid').text.replace(',', '.')
AttributeError: l'oggetto 'NoneType' non ha attributo 'text'

Processo finito con codice di uscita 1

Cosa devo cambiare per vedere come funziona il codice?

Il mio rispetto, Vladimir.

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

MetaTrader 5 Python User Group - Come usare Python in Metatrader

MrBrooklin, 2020.08.19 22:05

Grazie, Maxim!

Lo sto già provando. Il ciclo è in esecuzione, ma il file non si sta ancora aprendo. Lascerò il ciclo in funzione e aspetterò.

Saluti, Vladimir.


P.S. Pardon! Non ha prestato subito attenzione, che valeva un'ora. L'ho cambiato al minuto EUR_USD_QUOTE.csv file è stato aperto ma ho ottenuto questo messaggio nella scheda Run di Pycharm:

�訡��: �� 㤠���� ���� ����� "excel.exe".

Poi, dopo un altro minuto circa, il file si è chiuso e riaperto, ma in Exel è apparsa una scheda sul lato sinistro del foglio di calcolo chiedendomi di salvare il testo precedentemente aperto. Ho aspettato ancora un po' per vedere cosa sarebbe successo dopo, ma poi il ciclo si è fermato ed è apparso un messaggio come questo:

�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 4208, � �����襭.
�ᯥ譮: ����� "EXCEL.EXE", � �����䨪��஬ 3168, �� �����襭.
Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 37, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/9.py", line 23, in get_data
with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permesso negato: 'EUR_USD_QUOTE.csv'

Questo è il risultato finora, ma ho già fatto progressi!

Sinceramente, Vladimir.

Maxim, non so cosa sia successo ma ho provato di nuovo il tuo codice e oh mio Dio! Il processo di looping è iniziato, ma con un avvertimento. Come prima, è apparsa una scheda in Excel sul lato sinistro che mi chiedeva di salvare il file, ma non è un grosso problema. In allegato c'è uno screenshot. Ho aspettato che passassero i sei cicli e sono uscito dal programma. Ora studierò ogni linea di codice e cercherò di capire cosa ho scritto e a cosa serve. Grazie mille!

Sinceramente, Vladimir.



P.S. Mi è venuta un'idea, perché appare una scheda a sinistra che suggerisce di salvare il file. Proprio il codice di programmazione chiude il file senza salvare, probabilmente è per questo che Exel offre e continuerà ad offrire di salvare il file.

 

Leggere il cercapersone cinese. Facendo un sacco di pensieri...

Questo è il mio punto sull'integrazione di Python e MQL. Entrambi i linguaggi sono vicini, ma MQL è semplice e Python è primitivo, come il BASIC. Chiunque programmi in MQL può facilmente creare qualcosa in Python e viceversa. Qual è l'interesse per questo argomento? In primo luogo, è per persone molto pigre. Bene, scrivi qualcosa in un linguaggio molto simile... L'interesse potrebbe essere in due componenti: le librerie, di cui ci sono molte in Python, e le interfacce, per le quali MQL è famoso. Allora perché non fare l'accesso da Python alle interfacce MQL e l'accesso da MQL alle librerie Python? Questo è tutto.