A l'aide des fonctions décrites dans la bibliothèque, implémentez les fonctions d'initiation de connexion au terminal et de terminaison de connexion au terminal. Nous prévoyons de faire cela dans une boucle sans fin toutes les 5 minutes.
...
Programme en cours :
Tout ceci est mis en œuvre avec succès par mql5 signifie
Naturellement. Cependant, il y a une grande couche de personnes qui ne connaissent pas mql5, et ne voient aucun intérêt à apprendre un outil obsolète qui ne s'applique qu'à un domaine de travail extrêmement étroit avec un terminal particulier d'une société particulière.
Les questions seraient appréciées, je peux expliquer comment et quoi.
Écrivons une fonction qui enregistrera les citations dans des fichiers. En principe, il n'est pas du tout nécessaire d'enregistrer les citations dans des fichiers. C'est suffisant pour les garder en mémoire. J'ai historiquement cela vient du fait que le terminal est dans une machine virtuelle Windows et un programme Python enregistre les guillemets, et toute la logique est dans le système hôte, Debian GNU/Linux, et il y a son propre programme Python qui tourne, qui lit ces fichiers et écrit dans d'autres fichiers des instructions commerciales, que le programme Python dans le Windows virtuel lit, et exécute.
Cependant, l'écriture des citations dans les fichiers est utile en soi. C'est visuel. Permet de voir ce qui s'est passé, de sentir, de lire par d'autres moyens (le même Matcad), etc. Alors, faisons comme ça.
def pips_definer(instrument):
'''
Функция возвращает величину пипса для инструмента, например для EURUSD - 0.0001, для USDJPY - 0.01
'''
if instrument in ['EURUSD_i', 'GBPUSD_i', 'EURGBP_i', 'USDCHF_i', 'USDCAD_i']:
return0.0001
elif instrument in ['USDJPY_i']:
return0.01else:
return None
def save_prices_to_file(instrument, n=100):
'''
Функция принимает инструмент, количество отсчётов цены n в таймфрейме М5,
и сохраняет в файл (только сформировавшиеся полностью бары, время соответствует времени закрытия (!) бара)
'''
w = pips_definer(instrument)
tochn = int(abs(log10(w))+1)
path_file = os.path.join(work_catalog, instrument+'.txt')
bars = mt5.copy_rates_from_pos(instrument, mt5.TIMEFRAME_M5, 0, n+1) # в случае ошибки mt5.copy_rates_from_pos возвращает None
try:
f = open(path_file, 'w')
for i in range(0, n+1):
bar = bars[i]
dt_stamp = date_time.fromtimestamp(bar[0], dt.timezone.utc) + dt.timedelta(hours=1, minutes=5)
open_ = str(round(bar[1], tochn))
high_ = str(round(bar[2], tochn))
low_ = str(round(bar[3], tochn))
close_ = str(round(bar[4], tochn))
if i != n:
f.write(dt_stamp.M5_view + ' ' + open_ + ' ' + high_ + ' ' + low_ + ' ' + close_ + '\n')
f.close()
print(date_time.now().nice_view, ' - котировки {} успешно записаны в файл'.format(instrument))
except:
print(date_time.now().nice_view, ' - котировки {} записать в файл не удалось'.format(instrument))
Et ajoutons à la fonction principale un appel à la sauvegarde des devis :
def main(N):
'''
Главная функция, обеспечивающая в бесконечном цикле связь с терминалом,
сохранение котировок, и запуск функции, осуществляющей торговлю
'''
dt_start = date_time.now()
dt_write = dt_stamp_from_M5_view(dt_start.M5_view) + dt.timedelta(minutes=5, seconds=10)
print('\n' + dt_start.nice_view, ' - начал работу, бездействую до ' + dt_write.nice_view + '\n')
timedelta_sleep = dt_write - date_time.now()
time.sleep(timedelta_sleep.seconds)
while True:
# установка соединения с MetaTrader5
if terminal_init(os.path.join('C:\\', 'Program Files', 'Alpari MT5', 'terminal64.exe'), work_account):
# запись цен в файлы: для всех инструментов, N отсчётов
if (dt.datetime.now() - dt_write) < dt.timedelta(seconds=10):
print('\n' + date_time.now().nice_view + ' - начинаю запись котировок в файлы')
for instrument in instruments:
save_prices_to_file(instrument, N)
# пауза 10 секунд: временная заглушка, имитирующая анализ цен, принятие и выполнение решений
print('\nосуществляю торговлю: анализирую котировки, открываю и/или закрываю сделки')
time.sleep(10)
# завершение соединения с MetaTrader5
terminal_done()
# определение параметров ожидания до следующего выполнения тела цикла
dt_start = date_time.now()
dt_write = dt_stamp_from_M5_view(dt_start.M5_view) + dt.timedelta(minutes=5, seconds=10)
timedelta_sleep = dt_write - dt_start
print(date_time.now().nice_view + ' - засыпаю до {}\n\n\n\n\n'.format(dt_write.nice_view))
time.sleep(timedelta_sleep.seconds)
Résultat des travaux :
Le dossier /fx/ contient six fichiers :
Ils ont la structure suivante (en utilisant EURUSD_i.txt comme exemple) : compte à rebours date-temps comme M5_view, open, high, low, close, avec le compte à rebours temps correspondant au moment de la fermeture de la barre.
Notez que l'heure de mon serveur est inférieure d'une heure à l'heure actuelle sur mon ordinateur, et qu'il est pratique pour moi de penser à cette heure (heure de Moscou).
C'est pourquoi j'ai ajouté un timedelta de 1 heure et 5 minutes dans le code de la fonction pour sauvegarder les citations :
dt.timedelta(hours=1, minutes=5)
dans celle-ci, 1 heure est la différence de temps entre l'heure du serveur et la mienne, et 5 minutes proviennent du fait que je suis à l'aise avec l'heure de fermeture du bar, et que le terminal donne l'heure d'ouverture.
Toutes les 5 minutes, les fichiers de prix sont écrasés, réécrits, pas une ligne n'est ajoutée à la fin, mais le fichier entier est écrasé. Pour les SSD modernes, et seulement 1000 lignes, et seulement une fois toutes les 5 minutes, il n'y a rien à dire.
c.-à-d. donnez un exemple de sauvegarde des données d'un indicateur dans un fichier csv ou SQLite, puis de leur lecture dans python ? Ce serait drôle, non ?
C'est ridicule. Cela n'a rien à voir avec python. Avec ces données, le script peut être écrit dans n'importe quel langage de programmation.
C'est exactement ce qui est si drôle. Parce que cela n'a rien à voir avec python. La même chose peut être faite dans n'importe quel langage de programmation.
Bien sûr que vous pouvez. Mais le seuil d'entrée en Python est beaucoup plus bas qu'en C++ lequel. Les personnes qui ne sont pas du tout familiarisées avec la programmation peuvent facilement commencer à faire ce dont elles ont besoin en utilisant Python après 3 mois. Si on a besoin de quelque chose de simple.
C'est exactement ce qui est si drôle. Parce que cela n'a rien à voir avec python. La même chose peut être faite dans n'importe quel langage de programmation
Est-ce que c'est drôle d'utiliser python contre un autre langage ? Pas d'argument... si un autre langage a une intégration avec MT et vous permet d'obtenir des cotations - allez-y...
Je ne comprends pas ce que veut TC, d'après les messages il n'y a que des contradictions - il y a des gens qui ne veulent pas connaître MQL, mais ces gens vont visiter une ressource thématique, ces gens ont aussi besoin d'installer MT5, pour pouvoir enfin se plonger dans Python ...... c'est un peu dur
Si vous voulez vraiment créer quelque chose en Python au profit de la communauté, vous pouvez l'écrire en Python et reporter la tâche d'intégration ou d'échange à une date ultérieure ,
L'importation de citations dans Python à des fins éducatives ne pose pas non plus de problème.
Je l'ai trouvé moi-même, j'étais en train de le trier il y a quelques mois :
Ridicule d'utiliser python contre tout autre langage ? aucun argument... si un autre langage a une intégration avec MT et vous permet d'obtenir des cotations - allez-y...
Ce que je veux dire, c'est que l'intégration de python avec MT5 n'est pas complète. Vous ne pouvez pas obtenir les valeurs des indicateurs directement
Igor Makanu importation de citations en Python à des fins de formation n'est pas non plus un problème.
J'ai trouvé ça dans le mien, j'ai réglé le problème il y a quelques mois :
...
en général, les objectifs de ce sujet ne sont pas clairs du tout
Le problème d'intégration a été résolu par la bibliothèque metatrader5, il n'a pas besoin d'être résolu ou abandonné.
L'importation des cotations est nécessaire non pas à des fins éducatives, mais pour le trading réel, donc pas à partir de la mythique *finanse, mais directement à partir du terminal, dans lequel le trading est effectué.
Le but de ce fil de discussion est simple comme bonjour : permettre à tout le monde de commencer le trading algorithmique en Python, juste en copiant des morceaux de code comme l'initialisation de la connexion avec le terminal, la demande de cotations, la demande au serveur d'ouvrir ou de fermer une transaction, etc. etc. Concentrez-vous uniquement sur la logique, et ce dans un langage extrêmement convivial.
Ce que je veux dire, c'est que l'intégration de python avec MT5 n'est pas complète. Vous ne pouvez pas obtenir directement les valeurs des indicateurs
Pourquoi avez-vous besoin des valeurs des indicateurs si vous avez des prix à partir desquels ces indicateurs sont calculés ? Je vous présenterai plus tard quelques fonctions simples, comme le calcul des SMA, à titre d'exemple. Mais vous pouvez écrire ce que vous voulez, personne ne vous en empêche.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
A l'aide des fonctions décrites dans la bibliothèque, implémentez les fonctions d'initiation de connexion au terminal et de terminaison de connexion au terminal. Nous prévoyons de faire cela dans une boucle sans fin toutes les 5 minutes.
...
Programme en cours :
Tout ceci est mis en œuvre avec succès par mql5 signifie
Tout ceci est mis en œuvre avec succès avec mql5.
Les questions seraient appréciées, je peux expliquer comment et quoi.
Écrivons une fonction qui enregistrera les citations dans des fichiers. En principe, il n'est pas du tout nécessaire d'enregistrer les citations dans des fichiers. C'est suffisant pour les garder en mémoire. J'ai historiquement cela vient du fait que le terminal est dans une machine virtuelle Windows et un programme Python enregistre les guillemets, et toute la logique est dans le système hôte, Debian GNU/Linux, et il y a son propre programme Python qui tourne, qui lit ces fichiers et écrit dans d'autres fichiers des instructions commerciales, que le programme Python dans le Windows virtuel lit, et exécute.
Cependant, l'écriture des citations dans les fichiers est utile en soi. C'est visuel. Permet de voir ce qui s'est passé, de sentir, de lire par d'autres moyens (le même Matcad), etc. Alors, faisons comme ça.
Et ajoutons à la fonction principale un appel à la sauvegarde des devis :
Résultat des travaux :
Le dossier /fx/ contient six fichiers :
Ils ont la structure suivante (en utilisant EURUSD_i.txt comme exemple) : compte à rebours date-temps comme M5_view, open, high, low, close, avec le compte à rebours temps correspondant au moment de la fermeture de la barre.
202112071335 1,1269 1,12697 1,12659 1,1266
202112071340 1,12669 1,12636 1,12659
202112071345 1,12661 1,12664 1,12627 1,12627
202112071350 1,12628 1,12633 1,12595 1,12595
202112071355 1,12598 1,126 1,12564 1,12586
...
202112110040 1,13173 1,13181 1,13164 1,13167
202112110045 1,13167 1,1317 1,13157 1,13163
202112110050 1,13163 1,13167 1,13155 1,13157
Notez que l'heure de mon serveur est inférieure d'une heure à l'heure actuelle sur mon ordinateur, et qu'il est pratique pour moi de penser à cette heure (heure de Moscou).
C'est pourquoi j'ai ajouté un timedelta de 1 heure et 5 minutes dans le code de la fonction pour sauvegarder les citations :
dans celle-ci, 1 heure est la différence de temps entre l'heure du serveur et la mienne, et 5 minutes proviennent du fait que je suis à l'aise avec l'heure de fermeture du bar, et que le terminal donne l'heure d'ouverture.
Toutes les 5 minutes, les fichiers de prix sont écrasés, réécrits, pas une ligne n'est ajoutée à la fin, mais le fichier entier est écrasé. Pour les SSD modernes, et seulement 1000 lignes, et seulement une fois toutes les 5 minutes, il n'y a rien à dire.c.-à-d. donnez un exemple de sauvegarde des données d'un indicateur dans un fichier csv ou SQLite, puis de leur lecture dans python ? Ce serait drôle, non ?
C'est ridicule. Cela n'a rien à voir avec python. Avec ces données, le script peut être écrit dans n'importe quel langage de programmation.
C'est exactement ce qui est si drôle. Parce que cela n'a rien à voir avec python. La même chose peut être faite dans n'importe quel langage de programmation.
Bien sûr que vous pouvez. Mais le seuil d'entrée en Python est beaucoup plus bas qu'en C++ lequel. Les personnes qui ne sont pas du tout familiarisées avec la programmation peuvent facilement commencer à faire ce dont elles ont besoin en utilisant Python après 3 mois. Si on a besoin de quelque chose de simple.
C'est exactement ce qui est si drôle. Parce que cela n'a rien à voir avec python. La même chose peut être faite dans n'importe quel langage de programmation
Est-ce que c'est drôle d'utiliser python contre un autre langage ? Pas d'argument... si un autre langage a une intégration avec MT et vous permet d'obtenir des cotations - allez-y...
Je ne comprends pas ce que veut TC, d'après les messages il n'y a que des contradictions - il y a des gens qui ne veulent pas connaître MQL, mais ces gens vont visiter une ressource thématique, ces gens ont aussi besoin d'installer MT5, pour pouvoir enfin se plonger dans Python ...... c'est un peu dur
Si vous voulez vraiment créer quelque chose en Python au profit de la communauté, vous pouvez l'écrire en Python et reporter la tâche d'intégration ou d'échange à une date ultérieure ,
L'importation de citations dans Python à des fins éducatives ne pose pas non plus de problème.
Je l'ai trouvé moi-même, j'étais en train de le trier il y a quelques mois :
import finplot as fplt import yfinance df = yfinance.download('AAPL') fplt.candlestick_ochl(df[['Open', 'Close', 'High', 'Low']]) fplt.show()Je ne comprends pas du tout le but de ce sujet.
Ridicule d'utiliser python contre tout autre langage ? aucun argument... si un autre langage a une intégration avec MT et vous permet d'obtenir des cotations - allez-y...
Ce que je veux dire, c'est que l'intégration de python avec MT5 n'est pas complète. Vous ne pouvez pas obtenir les valeurs des indicateurs directement
Igor Makanu importation de citations en Python à des fins de formation n'est pas non plus un problème.
J'ai trouvé ça dans le mien, j'ai réglé le problème il y a quelques mois :
...
en général, les objectifs de ce sujet ne sont pas clairs du tout
Le problème d'intégration a été résolu par la bibliothèque metatrader5, il n'a pas besoin d'être résolu ou abandonné.
L'importation des cotations est nécessaire non pas à des fins éducatives, mais pour le trading réel, donc pas à partir de la mythique *finanse, mais directement à partir du terminal, dans lequel le trading est effectué.
Le but de ce fil de discussion est simple comme bonjour : permettre à tout le monde de commencer le trading algorithmique en Python, juste en copiant des morceaux de code comme l'initialisation de la connexion avec le terminal, la demande de cotations, la demande au serveur d'ouvrir ou de fermer une transaction, etc. etc. Concentrez-vous uniquement sur la logique, et ce dans un langage extrêmement convivial.
Ce que je veux dire, c'est que l'intégration de python avec MT5 n'est pas complète. Vous ne pouvez pas obtenir directement les valeurs des indicateurs