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

 
Sivoraksha-ia:
不思議なことに、空のテーブルも届く。Quicksilverのようにターミナル自体で何かを開いてアンロードを行う必要はないのですね。

任意のペアのチャート(ティックの場合)。

 
皆さん、こんにちは。


Python API を使用して order_send() リクエストの後に返されるOrderSendResult 構造体について問題があります。返されるフィールドの1つは「コメント」であり、取引に関するブローカーのコメントが含まれている必要があります。しかし、このフィールドは、本来であればブローカーが返すべきものではなく、リクエストに渡されたものと同じコメントを返します。


このエラーを再現するには、次のようにします。

1.コメントが得られるクエリを作成します。comment "クエリにダミーのコメントを記入する。

2.Python API の order_send() コマンドを使用して、リクエストを送信します。

3.返されたorderSendResultオブジェクトで、"comment "フィールドを確認してください。


コメント」欄には、ブローカーから返されたコメントがあるはずですが、同じコメントが渡されます。このコメントは、MT5ターミナルの「ログ」タブで確認することができます。

どなたかご確認ください。ブローカーからコメントをもらう方法はないのでしょうか?



Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
OrderSend - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Perervenko:

ドキュメンテーションに説明を追加してもらえますか?

追加

  • マーケット_ブック_アド
  • market_book_get
  • マーケット_ブックリリース
  • Документация по MQL5: Интеграция / MetaTrader для Python / market_book_add
    Документация по MQL5: Интеграция / MetaTrader для Python / market_book_add
    • www.mql5.com
    market_book_add - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    pythonで仮想貿易会計を開催したい。異なる取引戦略の特徴を識別するために必要なのです。使用するブローカーは、オトクリティです。網目はありません。楽器の位置、Stop、Takeの位置が共通である。私はこうすることに決めました。どんな戦略でも、どんな数量でも、どんな市場でも、ストップもテイクもなしで、取引を開始します。その代わり、同じ大きさのストップとリミットオーダーを出した。表の中の順番は別に記憶しています。一定期間ごとに、orders = mt5.orders_get(symbol=symb) を置き、既知のチケットorders.ticket.tolist()のリストを取得します。

    そして、自分のトレードテーブルを調べ、受け取ったオープンオーダーのリストにストップオーダーやリミットオーダーのチケットがまだ存在するかどうかをチェックします。ストップロスがない場合は、ストップロスが仮想的に発動したことを意味し、指値がない場合は、テイクプロフィットを意味します。それから、この取引のエントリーをテーブルから削除し、この取引の残りの保留中の注文を削除します。そして、1つを除いてすべてがうまくいきました。この取引の仮想利益をどのように計算すればいいのかわかりません。画像では141430に売りのストップが設定されていますが、実際にはスリッページが発生し、建値は141350となっています。私はトリガーされた位置の要求を要求する:取引= mt5.history_orders_get(ticket=246525084) (このチケットは配置時にシステムによって記憶されている)、しかし返信で私はその配置についての情報のみ、注文場所に関する情報を見ることはありません。履歴を見ると、チケット15215696で本当に売りのストップが実行されており、このチケットで正しい価格を求めることができます。でも、その前にトレードのチケットを探さないといけないんです。このチケットと保留中の注文チケット(売りストップ)を一致させるにはどうすればよいですか?

     
    質問を進めさせていただきました。クローズしたポジションの履歴 mt5.history_deals_get をリクエストすることで、注文の中からクローズしたポジションのチケットとその約定価格を見つけることができるんだ。パラメータで時間範囲を指定するとうまくいくのですが。また、注文のチケットを渡して同じ関数を呼び出します -mt5. history_deals_get(ticket=TICKET) - しかし、応答は (-2, 'Terminal: Invalid params') です。このパラメータを指定した関数は動作するのでしょうか?
     
    開発者の皆様、前回の質問についてコメントをお願いします。history_deals_get(ticket=TICKET) 関数が動作しない。応答は常に(-2, 'Terminal: Invalid params') です。同じ関数でパラメータが異なるhistory_deals_get(position=POSITION) は動作しますが、チケットオーダーでトレードを見つける必要があります。
     
    履歴にアクセスできるpython apiのニュースカレンダーを作って、調べ物をすることは可能でしょうか?
     
    拝啓、MOEXで お取引されている方いらっしゃいますか?端末への接続を初期化すると、サーバーに再接続され、証明書のパスワードを要求されるのと同じ問題を持つ人はいますか?
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    Документация по MQL5: Интеграция / MetaTrader для Python / initialize
    • www.mql5.com
    initialize - MetaTrader для Python - Интеграция - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     

    order_send とorder_check は None を返す。どこを見ればいいのかわからない。何が問題なのか、教えてください。お願いします。

    コード

    import MetaTrader5 as mt
    
    if not mt.initialize(login=12345):#
        print("initialize() failed")
        mt.shutdown()
    
    terminal_info=mt.terminal_info()
    if terminal_info!=None:
        print(f"terminal {'''connected''' if terminal_info.connected else '''disconnected'''}")
    print("version: ",mt.version())
    
    info = mt.symbol_info("Si-6.21")
    print(f"Si-6.21  {info.bid=}  {info.ask=}")
    
    request = {
        "action": mt.TRADE_ACTION_PENDING,
        "symbol": "Si-6.21",
        "volume": 1,
        "type": mt.ORDER_TYPE_BUY_LIMIT,
        "price": 77300,
        "sl": 0,
        "tp": 0,
        "deviation": 0,
        "magic": 123,
        "comment": "test",
        "type_time": mt.ORDER_TIME_DAY,
        "type_filling": mt.ORDER_FILLING_RETURN,
    }
    
    check = mt.order_check(request)
    print("order check: ",check)
    
    ret = mt.order_send(request)
    print("order send: ", ret)
    if not ret is None:
        print(f" retcode:{ret.retcode}")
    

    出力

    terminal connected
    version:  (500, 2875, '02 Apr 2021')
    Si-6.21  info.bid=77770.0  info.ask=77773.0
    order check:  None
    order send:  None
    
    Process finished with exit code 0


    なんとか問題を解決することができました。リクエストのvolume, price, sl, tpフィールドはfloat型でなければならない。次のような仕組みになっています。

    request = {
        "action": mt.TRADE_ACTION_PENDING,
        "symbol": "Si-6.21",
        "volume": 1.,
        "type": mt.ORDER_TYPE_BUY_LIMIT,
        "price": 77300.,
        "sl": 0.,
        "tp": 0.,
        "deviation": 0,
        "magic": 123,
        "comment": "test",
        "type_time": mt.ORDER_TIME_DAY,
        "type_filling": mt.ORDER_FILLING_RETURN,
    }
     

    同僚の方、アドバイスお願いします。

    1.Pythonでmt5から計測器ごとに利用可能な取引セッション間隔を引き出し、定期的に更新するにはどうすればよいですか?

    2.オープンポジションの トレーリングストップを要求し、変更するためのメソッドがライブラリにあることを期待しますか?