Pythonでトレーディング - ページ 3

 
Mikhael1983 #:

ライブラリに記載されている関数を用いて、端末との接続を開始する関数、端末との接続を終了する関数を実装する。これを5分おきに無限ループで行う予定です。

...

プログラム実行中。

これは、すべてmql5が正常に実装されていることを意味します。

 
Vitaly Muzichenko #:

これはすべてmql5で正常に実装されています

当然です。しかし、mql5を知らない層は多く、特定の会社の特定の端末で、極めて狭い範囲の仕事にしか使えない時代遅れのツールを学ぶことに意味はないと考えているのです。
 

質問があれば、どのように、何を説明するか、お願いします。

引用符をファイルに保存する関数を書いてみましょう。原則的に、引用符をファイルに保存する必要は全くありません。記憶に残るだけで十分です。私は歴史的に、端末がWindowsの仮想マシンに あり、Pythonプログラムが引用符を保存し、すべてのロジックはホストシステム、Debian GNU / Linuxにあり、これらのファイルを読み、他のファイルに貿易の命令を書き込み、仮想WindowsでPythonプログラムが読み、実行されている独自のPythonプログラムが回っていることから来ています。

しかし、引用符をファイルに書き込むこと自体は、それだけで便利です。それはビジュアルです。何が起こったかを見る、感じる、他の手段(同じMatcad)で読み取る、などを可能にします。では、このようにしましょう。

def pips_definer(instrument): 
    '''
    Функция возвращает величину пипса для инструмента, например для EURUSD - 0.0001, для USDJPY - 0.01 
    '''
    if instrument in ['EURUSD_i', 'GBPUSD_i', 'EURGBP_i', 'USDCHF_i', 'USDCAD_i']: 
        return 0.0001 
    elif instrument in ['USDJPY_i']: 
        return 0.01 
    else: 
        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) 
        


作品の結果


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分のタイムデルタを追加したのです。

dt.timedelta(hours=1, minutes=5)

1時間はサーバーとの時間差で、5分はバーの閉店時間から考えても違和感がなく、端末は開店時間から考えています。

5分ごとに価格ファイルが上書きされ、書き換えられ、末尾に一行が追加されるのではなく、ファイル全体が上書きされるのです。最近のSSDで、しかも1000回線、5分に1回程度しかないのでは話にならない。
 
Sergey Deev #:

例えば、インジケータのデータをcsvファイルやSQLiteに保存して、それをpythonに読み込む例を教えてください。おかしいと思いませんか?

ばかげている。Pythonとは関係ありません。このようなデータがあれば、どんなプログラミング言語でもスクリプトを書くことができます

 
Malik Arykov #:

まさに、それが面白いんです。pythonとは関係ないから。同じことは、どのプログラミング言語でも可能です

もちろん、できますよ。しかし、Pythonの入り口のしきい値は、どのC++よりはるかに低いです。プログラミングに全く馴染みのない人でも、3ヶ月後にはPythonを使って必要なことを簡単に始められるようになります。複雑でないものが必要な場合。

 
Malik Arykov #:

まさに、それが面白いんです。pythonとは関係ないから。どのようなプログラミング言語でも同じことができる

他の言語に対してpythonを使うのはおかしいですか? 議論の余地はありません。もし他の言語がMTと統合されていて、見積もりを取ることができるなら、それを使ってください。

 

メッセージによると、MQLについて知りたくない人がいて、その人たちはテーマ別のリソースを訪問し、その人たちはMT5をインストールする必要があり、最終的にPythonに飛び込むことができる......という矛盾があるだけで、TCが何をしたいのか理解できないんです。


もし、本当にコミュニティの ためにPythonで 何かを作りたいのであれば、 Pythonで書いて 統合や交換作業を 後日に延期してもよいでしょう。

教育 目的でPythonに 引用文を取り込む ことも問題ない。

私自身、数カ月前に整理していたところ、発見しました。

import finplot as fplt
import yfinance
df = yfinance.download('AAPL')
fplt.candlestick_ochl(df[['Open', 'Close', 'High', 'Low']])
fplt.show()



トピックの趣旨が全く理解できない。

 
Sergey Deev #:

他の言語に対してpythonを使用するのは馬鹿げているか?

私が言いたいのは、MT5とpythonの連携は完全ではないということです。インジケータ値を直接取得することはできません

 

Igor Makanu インポートする ことも問題ない。

を発見し、数ヶ月前に解決しました。

...


一般的に、このトピックの目標はまったく明確ではありません。

統合の問題はmetatrader5ライブラリによって解決されたので、解決したり放棄したりする必要はないのです。

引用符のインポートは教育目的ではなく、実際の取引に必要なので、神話上の*finanseからではなく、取引が行われるターミナルから直接インポートされます。

このスレッドの目的は5円玉のようにシンプルです。ターミナルへの接続の初期化、相場の要求、取引を開始または終了するためのサーバへの要求などのコードの一部をコピーするだけで、誰もがPythonでアルゴリズム取引を開始できるようにすることです。ロジックだけに特化し、しかも非常に使いやすい言語で。

 
Malik Arykov #:

私が言いたいのは、pythonとMT5の統合は完全ではないということです。インジケータ値を直接取得することはできません

指標を算出するための価格があるのに、なぜ指標値が必要なのですか?SMAの計算など、簡単な機能は後ほど例としてあげますね。でも、何を書いてもいいんです、誰も止めませんよ。
理由: