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

 

Buon pomeriggio a tutti!

Non so se sto scrivendo nel thread giusto, ma spero che tu possa correggermi. E un'altra cosa da chiarire: sono uno zero assoluto nella programmazione!

Allora, ho trovato un codice di un piccolo programma scritto in PYTHON che prende una quotazione della coppia EUR/USD da un sito noto e la scrive nella cella A1 del file EUR_USD_QUOTE.csv.

Se a qualcuno non dispiace, si prega di migliorare questo codice in modo che una citazione sia automaticamente aggiornata nella stessa cella A1 del file EUR_USD_QUOTE.csv ogni ora.

Sinceramente, Vladimir.

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)


get_data(save_file='EUR_USD_QUOTE.csv')
Пара EUR/USD: технический анализ, новости Forex, фундаментальный анализ - Блоги трейдеров и аналитика финансовых рынков
Пара EUR/USD: технический анализ, новости Forex, фундаментальный анализ - Блоги трейдеров и аналитика финансовых рынков
  • www.mql5.com
Валютная пара EUR/USD — самая ликвидная, поскольку в ней участвуют первая и вторая по значимости мировые резервные валюты. Это подтверждается и статистически: доллар и евро самые крупные по объему
 
MrBrooklin:

Buon pomeriggio a tutti!

Non so se sto scrivendo nel thread giusto, ma spero che tu possa correggermi. E un'altra cosa da chiarire: sono uno zero assoluto nella programmazione!

Allora, ho trovato un codice di un piccolo programma scritto in PYTHON che prende una quotazione della coppia EUR/USD da un sito noto e la scrive nella cella A1 del file EUR_USD_QUOTE.csv.

Se a qualcuno non dispiace, si prega di migliorare questo codice in modo che una citazione sia automaticamente aggiornata nella stessa cella A1 del file EUR_USD_QUOTE.csv ogni ora.

Sinceramente, Vladimir.

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):
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep(10)

 
Maxim Dmitrievsky:

Grazie, Maxim!

Ho lanciato il codice finalizzato nell'ambiente di sviluppo PyCharm, ma non succede ancora nulla, solo il pulsante "Rerun" è attivato. Non riesco ancora a capire - il codice funziona o no?

Ci sono alcune informazioni aggiuntive visualizzate nella scheda "Problemi":

  1. PEP 8: E402 importazione a livello di modulo non all'inizio del file: 28 - questo riguarda la linea con il codice from datetime import datetime
  2. PEP 8: E402 importazione a livello di modulo non all'inizio del file: 29 - questo si riferisce al tempo diimportazione della linea
  3. Rimuovere le parentesi ridondanti - quando ho rimosso queste parentesi dal codice, il messaggio è scomparso.

Maxim, puoi fare temporaneamente la citazione nel file di aggiornamento ora almeno in 1 minuto per capire se il codice funziona o no, altrimenti devo aspettare un'ora intera...?

Un'altra cosa. Dopo aver lanciato il codice iniziale che avevo pubblicato in precedenza, il file EUR_USD_QUOTE.csv è stato immediatamente aperto con la quotazione attuale, mentre il codice modificato non può aprire questo file.

Forse sto facendo qualcosa di sbagliato o non capisco qualcosa? Per favore, consigliatemi.

Saluti, Vladimir.
 
MrBrooklin:
Grazie, Maxim!

Ho eseguito il codice finalizzato nell'ambiente di sviluppo PyCharm, ma non succede ancora nulla, solo il pulsante "Rerun" è attivato. Non riesco ancora a capire - il codice funziona o no?

Ci sono alcune informazioni aggiuntive visualizzate nella scheda "Problemi":

  1. PEP 8: E402 importazione a livello di modulo non all'inizio del file: 28 - questo riguarda la linea con il codice from datetime import datetime
  2. PEP 8: E402 importazione a livello di modulo non all'inizio del file: 29 - questo si riferisce al tempo diimportazione della linea
  3. Rimuovere le parentesi ridondanti - quando ho rimosso queste parentesi dal codice, il messaggio è scomparso.

Maxim, puoi fare temporaneamente la citazione nel file di aggiornamento ora almeno in 1 minuto per capire se il codice funziona o no, altrimenti devo aspettare un'ora intera...?

Un'altra cosa. Dopo aver lanciato il codice iniziale che avevo pubblicato in precedenza, il file EUR_USD_QUOTE.csv è stato immediatamente aperto con la quotazione attuale, mentre il codice modificato non può aprire questo file.

Forse sto facendo qualcosa di sbagliato o non capisco qualcosa? Per favore, consigliatemi.

Saluti, Vladimir.

I primi 2 errori - basta spostare questo all'inizio del file

from datetime import datetime
import time

Questo è solo un avvertimento in stile programmazione, non un errore

Per un controllo veloce, sostituisci entrambi i campi

hour

a

secondo

il file dovrebbe essere scritto ogni 10 secondi perché il timer di controllo è impostato su 10 secondi.

P.S. Basta che non vi facciate prendere troppo la mano o sarete bannati per richieste troppo frequenti.

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

while True:
    t = datetime.now().hour
    if(t2 != t):
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    time.sleep(10)

sulle parentesi non ho nessun errore

Questo codice aspetta fino alla prossima ora e poi salva solo

 

Non ho questi moduli installati

import requests
from bs4 import BeautifulSoup

quindi non ho controllato

 
Maxim Dmitrievsky:

Maxim, ho cambiato un po' il tuo codice con il metodo dell'"esperimento scientifico" (scusami in anticipo) e ha funzionato per aprire il file EUR_USD_QUOTE.csv con la quotazione attuale in 1 minuto dopo il lancio.

from datetime import datetime
import time
t = datetime.now().minute  # здесь поставил минуту
t2 = t

while True:
    t = datetime.now().minute  # здесь поставил минуту
    if t2 != t:
        get_data(save_file='EUR_USD_QUOTE.csv')
        t2 = t
    # Code executed here
    time.sleep(1)  # и здесь 10 изменил на 1.

Ma se non chiudo il file EUR_USD_QUOTE.csv durante il prossimo minuto, ricevo questo messaggio:

Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", line 36, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", line 21, in get_data
with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permesso negato: 'EUR_USD_QUOTE.csv'

Processo finito con codice di uscita 1

Come posso far continuare il processo senza intervento umano dopo che il codice del programma è stato eseguito?

Saluti, Vladimir.

 
MrBrooklin:

Maxim, ho cambiato un po' il tuo codice con il metodo dell'"esperimento scientifico" (scusami in anticipo) ed è stato possibile aprire il file EUR_USD_QUOTE.csv con la quotazione attuale in 1 minuto dopo il lancio.


Ma se non chiudo il file EUR_USD_QUOTE.csv durante il prossimo minuto, ricevo questo messaggio:

Traceback (most recent call last):
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", line 36, in <module>
get_data(save_file='EUR_USD_QUOTE.csv')
File "C:/Users/Vladimir/PycharmProjects/My_Python_Project/8.py", line 21, in get_data
with open(save_file, 'w') as save:
PermissionError: [Errno 13] Permesso negato: 'EUR_USD_QUOTE.csv'

Processo finito con codice di uscita 1

Come posso far continuare il processo senza intervento umano dopo che il codice del programma è stato eseguito?

Saluti, Vladimir.

ah sì, perché il processo è occupato os.startfile() per qualche motivo, cancellate questa linea

os.startfile(save_file)

и

import os

può essere rimosso

Controllato, funziona.

 
Maxim Dmitrievsky:

e sì, perché il processo è occupato os.startfile() per qualche motivo, cancellate quella linea

и

può essere rimosso.

Controllato, funziona.

Maxim, ha fatto tutto come mi hai consigliato. Non sono stati segnalati altri problemi. Il programma è partito ma ora come posso visualizzare la quotazione se il file EUR_USD_QUOTE.csv è chiuso e quando lo apro e lo lascio aperto appare lo stesso messaggio che PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv' e la quotazione nel file aperto non è più aggiornata?

Vi prego di scusarmi ancora una volta, non ho mai nascosto di essere uno zero totale nella programmazione.

Saluti, Vladimir.

 
MrBrooklin:

Maxim, ho fatto tutto come mi hai consigliato. Non ci sono più messaggi di problemi. Ora come posso visualizzare la quota se il file EUR_USD_QUOTE.csv è chiuso e quando lo apro e lo lascio aperto, ottengo lo stesso messaggio che PermissionError: [Errno 13] Permission denied: 'EUR_USD_QUOTE.csv' e la quota nel file aperto non è più aggiornata?

Vi prego di scusarmi ancora una volta, non ho mai nascosto di essere uno zero totale nella programmazione.

Saluti, Vladimir.

Apri il file con Excel? Significa che apre il file in modo monopolistico. Dovete permettere ad altre applicazioni/utenti di modificare il file.

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

In generale, non si può modificare un file aperto in un altro programma.

Одновременная работа нескольких пользователей с таблицами Excel
Одновременная работа нескольких пользователей с таблицами Excel
  • blog.depit.ru
Возможности системы Microsoft Excel позволяют работать по наполнению одного файла электронных таблиц одновременно нескольким пользователям. Для того, чтобы начать совместную работу с документом, достаточно в документе Microsoft Excel перейти в меню « Рецензирование » — « Доступ к книге » и выбрать « Разрешить изменять файл нескольким...
 
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à.

Non si può modificare un file aperto in un altro programma.

Sì, lo sto aprendo in Excel. Non riesco ancora ad aggiornare la quotazione nel file EUR_USD_QUOTE.csv aperto in tempo reale.

L'idea era quella di guardare la tabella e vedere i cambiamenti nella citazione.

Saluti, Vladimir.