引用符をファイルに保存する関数を書いてみましょう。原則的に、引用符をファイルに保存する必要は全くありません。記憶に残るだけで十分です。私は歴史的に、端末がWindowsの仮想マシンに あり、Pythonプログラムが引用符を保存し、すべてのロジックはホストシステム、Debian GNU / Linuxにあり、これらのファイルを読み、他のファイルに貿易の命令を書き込み、仮想WindowsでPythonプログラムが読み、実行されている独自のPythonプログラムが回っていることから来ています。
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))
そして、main関数に引用符を保存するための呼び出しを追加してみましょう。
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)
ライブラリに記載されている関数を用いて、端末との接続を開始する関数、端末との接続を終了する関数を実装する。これを5分おきに無限ループで行う予定です。
...
プログラム実行中。
これは、すべてmql5が正常に実装されていることを意味します。
これはすべてmql5で正常に実装されています
質問があれば、どのように、何を説明するか、お願いします。
引用符をファイルに保存する関数を書いてみましょう。原則的に、引用符をファイルに保存する必要は全くありません。記憶に残るだけで十分です。私は歴史的に、端末がWindowsの仮想マシンに あり、Pythonプログラムが引用符を保存し、すべてのロジックはホストシステム、Debian GNU / Linuxにあり、これらのファイルを読み、他のファイルに貿易の命令を書き込み、仮想WindowsでPythonプログラムが読み、実行されている独自のPythonプログラムが回っていることから来ています。
しかし、引用符をファイルに書き込むこと自体は、それだけで便利です。それはビジュアルです。何が起こったかを見る、感じる、他の手段(同じMatcad)で読み取る、などを可能にします。では、このようにしましょう。
そして、main関数に引用符を保存するための呼び出しを追加してみましょう。
作品の結果
fx/ フォルダには6つのファイルが含まれています。
M5_viewとして日付-時間カウントダウン、オープン、ハイ、ロー、クローズ、時間カウントダウンはバーのクローズの瞬間に対応する、という構造です。
202112071335 1.1269 1.12697 1.12659 1.1266
202112071340 1.12669 1.12636 1.12659
202112071345 1.12661 1.12664 1.12627
202112071350 1.12628 1.1263 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
なお、私のサーバーの時間は、私のパソコンの現在時刻より1時間短いので、その時間(モスクワ時間)で考えるのが便利です。
そのため、引用符を保存する関数のコードに1時間5分のタイムデルタを追加したのです。
1時間はサーバーとの時間差で、5分はバーの閉店時間から考えても違和感がなく、端末は開店時間から考えています。
5分ごとに価格ファイルが上書きされ、書き換えられ、末尾に一行が追加されるのではなく、ファイル全体が上書きされるのです。最近のSSDで、しかも1000回線、5分に1回程度しかないのでは話にならない。例えば、インジケータのデータをcsvファイルやSQLiteに保存して、それをpythonに読み込む例を教えてください。おかしいと思いませんか?
ばかげている。Pythonとは関係ありません。このようなデータがあれば、どんなプログラミング言語でもスクリプトを書くことができます
まさに、それが面白いんです。pythonとは関係ないから。同じことは、どのプログラミング言語でも可能です
もちろん、できますよ。しかし、Pythonの入り口のしきい値は、どのC++よりはるかに低いです。プログラミングに全く馴染みのない人でも、3ヶ月後にはPythonを使って必要なことを簡単に始められるようになります。複雑でないものが必要な場合。
まさに、それが面白いんです。pythonとは関係ないから。どのようなプログラミング言語でも同じことができる
他の言語に対してpythonを使うのはおかしいですか? 議論の余地はありません。もし他の言語がMTと統合されていて、見積もりを取ることができるなら、それを使ってください。
メッセージによると、MQLについて知りたくない人がいて、その人たちはテーマ別のリソースを訪問し、その人たちはMT5をインストールする必要があり、最終的にPythonに飛び込むことができる......という矛盾があるだけで、TCが何をしたいのか理解できないんです。
もし、本当にコミュニティの ためにPythonで 何かを作りたいのであれば、 Pythonで書いて、 統合や交換作業を 後日に延期してもよいでしょう。
教育 目的でPythonに 引用文を取り込む ことも問題ない。
私自身、数カ月前に整理していたところ、発見しました。
トピックの趣旨が全く理解できない。
他の言語に対してpythonを使用するのは馬鹿げているか?
私が言いたいのは、MT5とpythonの連携は完全ではないということです。インジケータ値を直接取得することはできません
Igor Makanu インポートする ことも問題ない。
を発見し、数ヶ月前に解決しました。
...
一般的に、このトピックの目標はまったく明確ではありません。
統合の問題はmetatrader5ライブラリによって解決されたので、解決したり放棄したりする必要はないのです。
引用符のインポートは教育目的ではなく、実際の取引に必要なので、神話上の*finanseからではなく、取引が行われるターミナルから直接インポートされます。
このスレッドの目的は5円玉のようにシンプルです。ターミナルへの接続の初期化、相場の要求、取引を開始または終了するためのサーバへの要求などのコードの一部をコピーするだけで、誰もがPythonでアルゴリズム取引を開始できるようにすることです。ロジックだけに特化し、しかも非常に使いやすい言語で。
私が言いたいのは、pythonとMT5の統合は完全ではないということです。インジケータ値を直接取得することはできません