MetaTrader 5 Python User Group - メタトレーダーでPythonを使用する方法 - ページ 76

 
MrBrooklin:

マキシムさん、ありがとうございました。

すでに試しています。サイクルは開始されましたが、ファイルはまだ開かれていません。ループを作動させたまま、待つことにします。

ウラジミールさん、ありがとうございます。


P.S. Pardon!一刻を 争う事態になるとは思わなかった。EUR_USD_QUOTE.csvファイルを開いた瞬間に 変更しましたが、Pycharmの 実行タブにこの メッセージが表示されました。

その後、さらに1分ほどでファイルを閉じて開き直したが、Exelではスプレッドシートの左側に、前に開いたテキストを保存するかどうかを尋ねるタブが表示された。この先どうなるのかと少し待っていると、サイクルが止まり、こんなメッセージが表示されました。

������������������������������������������������������������������������ 16 ������������������������ 16 �������������������� 17
������������������������������������������������������������������� 164.5% ※1BE5:Excel.exe, 3168, ※1
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.Python'), 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] 権限拒否: 'EUR_USD_QUOTE.csv'.

今のところこのような結果ですが、すでに進歩はしています

敬具 ウラジミール

もしかしたら、Excelが閉じる暇もなく、すでにファイルにアクセスしようとしていたのかもしれません、その時は

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

ここで5-10秒の遅延を追加すると、プログラムはExcelが終了するのを待ちます

左側の窓をどうするかはまだ決めていません )

 
MrBrooklin:

Pythonを使って、インターネット上の引用文を ターミナルではなく、例えばcsvの ようなファイルに保存する方法を学びたいのです。最も基本的な作業だと思っていたのですが、そうではないことがわかりました。私は道を間違えているのかもしれないが、何も探さない者は何も見つけられない。

では、ご提案いただいたコードに移らせていただきます。コードを起動すると、 Pycharmの開発 環境にメッセージが表示されました。

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.Python_Project10.py", line 25, in <module> File "My_Python"(マイ・ピストン・プロジェクト、マイ・ピストン・プロジェクト・10.py、マイ・ピストン・プロジェクト・10.pypy", line 13, in main
eurusd_bid = soup.find('td', 'pid-1-bid').text.replace(',', '.')
AttributeError: 'NoneType' object has no attribute 'text'

Process finished with exit code 1

コードの動作を確認するには、何を変更する必要がありますか?

ウラジミールさん、謹んで申し上げます。

うまくいかないのは、このサイトがリクエスト送信をブロックしているためです。ユーザーエージェントを偽る必要があったということは、彼らが望まないことをやっているというヒントがあったのでしょう。ウェブスキャンはこのトピックの範囲をはるかに超えているので、この話はやめて、本題に戻りましょう。MetaTrader5パッケージの使用に関するご質問はございませんか?

 
Maxim Dmitrievsky:

Excelを閉じる暇もなく、ファイルにアクセスしようとしているのかもしれません。

5-10秒の遅延を追加すると、プログラムはExcelが終了するのを待ちます。

左の窓をどうするかはまだ決めていません )

Maximさん、コードの改良にご協力いただき、ありがとうございました。左側のパネルは、今のところあまり気になりません。私は今日仕事で完全に忙しく、休息が必要なため、おそらく週末に、あなたの新しいコードを追加する予定です。新しい結果が出ればすぐにお知らせします。

ウラジミールさん、ありがとうございます。

 

MT5ライブラリは、どのオフセットでオープン オーダーの時刻を 返すのですか?

def checkPositions(self):
        return mt5.positions_get(symbol=self.symbol)

pos = trade.checkPositions()
pos[0].time

>>> pos[0].time
1598035196

datetime.datetime.fromtimestamp(pos[0].time).strftime("%A, %B %d, %Y %I:%M:%S")

>>> datetime.datetime.fromtimestamp(pos[0].time).strftime("%A, %B %d, %Y %I:%M:%S")
'Saturday, August 22, 2020 01:39:56'

しかし、端末の中では別の時間が流れている

Pythonプログラムの時刻と注文(ポジション)の時刻を正しく同期させる方法を教えてください。

 
Maxim Dmitrievsky:

MT5ライブラリは、どのオフセットでオープン オーダーの時刻を 返すのですか?

しかし、端末の中では別の時間が流れている

Pythonプログラムの時刻と注文(ポジション)の時刻を正しく同期させる方法を教えてください。

まず、取引サーバーの正確なタイムゾーンを知る必要があります。次に、pytzを使用してタイムゾーンオブジェクトを作成します。最後に、タイムゾーンオブジェクトをメソッドに渡します。

import datetime as dt

import pytz
import pymt5adapter as mta


def main():
    broker_timezone = pytz.timezone('Etc/UTC')
    for position in mta.positions_get():
        time = dt.datetime.fromtimestamp(position.time, tz=broker_timezone)
        print(time)


if __name__ == '__main__':
    with mta.connected():
        main()
https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones
Is there a list of Pytz Timezones?
Is there a list of Pytz Timezones?
  • 2012.12.13
  • ipegasus
  • stackoverflow.com
I would like to know what are all the possible values for the timezone argument in the Python library pytz. How to do it?
 
nicholish en:

まず、取引サーバーの正確なタイムゾーンを知る必要があります。次に、pytzを使用してタイムゾーンオブジェクトを作成します。最後に、タイムゾーンオブジェクトをメソッドに渡します。

https://stackoverflow.com/questions/13866926/is-there-a-list-of-pytz-timezones

ありがとうございます、こんな感じでやってみます。

取引サーバーが変わる可能性があるので、自動的に時刻を同期させたい
 
Maxim Dmitrievsky:

ありがとう、これを試してみるよ

取引サーバーが変更になる可能性があるので、自動的に時刻を同期させたい。

UNIX のタイムスタンプはタイムゾーンに依存しないので、タイムスタンプにタイムゾーンを意識したコンテキストを与えるには、ブローカのタイムゾーンを知っている必要があります。そのためには、トレードサーバーのタイムゾーン設定を知るしかありません。プログラム的にその情報を取得する方法はないと思います。そこで、使用するトレードサーバーをタイムゾーンに対応させるための設定ファイルを作成することができます。例


コンフィグ.json

{
    "servers": {
        "MetaQuotes-Demo": {
            "timezone": "Europe/Moscow"
        },
        "AMPGlobalUSA-Demo": {
            "timezone": "Etc/UTC"
        }
    }
}
 
nicholish en:

UNIX のタイムスタンプはタイムゾーンに依存しないので、タイムスタンプにタイムゾーンを意識したコンテキストを与えるには、ブローカのタイムゾーンを知っている必要があります。そのためには、トレードサーバーのタイムゾーン設定を知るしかありません。プログラム的にその情報を取得する方法はないと思います。そこで、使用するトレードサーバーをタイムゾーンに対応させるための設定ファイルを作成することができます。例


コンフィグ.json

まあは

pytzを使用しない簡単な方法です。

pt = datetime.datetime.utcfromtimestamp(pos[0].time) // position open time by mt5 time
tt = datetime.datetime.utcnow() + datetime.timedelta(hours=3)   // current server time (from mt5 clock)

delta = tt-pt
>>> delta
datetime.timedelta(seconds=2139, microseconds=506786) // position lifetime
また、EAを起動する前に、価格から離れた場所で1つの保留注文を開くことができます。また、「PT」と「PT」の時間差を比較する。
datetime.utcnow()
をクリックすると、自動的に時刻がずれます。
 
Maxim Dmitrievsky :

あのは

pytzを使用しない簡単な方法です。

また、EAを起動する前に、価格から離れたところに1つだけ保留の注文を出すことができます。そして、'pt'と自動的に時間を相殺するための時間の違いを比較します。

私も同じことを考えましたが、注文時刻はタイムゾーンを持たないUNIXタイムスタンプで保存されていることを思い出しました。つまり、タイムスタンプはタイムゾーンに関係なく同じであるため、注文のタイムスタンプからブローカーのタイムゾーンを推定することはできないのです。GMTオフセットを知りたければ、現在のターミナル(ブローカー)の時刻を知る必要があり、現在のところpythonを使って現在のターミナルの時刻やGMTオフセットを得る方法は存在しません。

 
Maxim Dmitrievsky:

Excelを閉じる暇もなく、ファイルにアクセスしようとしているのかもしれません。

5-10秒の遅延を追加すると、プログラムはExcelが終了するのを待ちます。

左側の窓をどうするかはまだ決めていません )

マキシムさん、こんにちは。

先ほど、週末にディレイコードを追加したバリアントを確認すると約束しました。確認しましたが、遅延は何も影響していません。左のタブは、単に気にしないだけなので、特に問題はありません。

改めまして、大変お世話になりました。このスレッドではもう質問しないことにします。

ウラジミールさん、ありがとうございます。