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

 
Vladimir Perervenko:

エンティティ(コネクション)の作成は原理的に可能なのか?そこまで必要とは思いませんが、今後の参考のために。

チャート上に別のスクリプト(Py)をインストールすると、最初のスクリプトはリセットされます。これがあるべき姿なのか?

別のエンティティを作ることは難しくないと思います。それは、リブの抽象化のレベルがもう一つ上がるだけです。

これはもはやターミナルから lib を使うのではなく、python 側のターミナルへの本格的なゲートウェイとして考えられています。

今はlib自体にもっとユーティリティを入れた方が良い :)。

 
Дмитрий Прокопьев:

別のエンティティを作ることは難しくないと思います。それは、リブの抽象化のレベルがもう一つ上がるだけです。

これはもはやターミナルから lib を使うのではなく、python 側のターミナルへの本格的なゲートウェイとして考えています。

今はlib自体にもっとユーティリティを入れた方が良い :)。

ターミナルの起動が定期的に失敗するのですが、原因がわかりません。pythonのインストールでどこかにバグがあるのでは...。libをターミナルへのゲートウェイとして(サービス経由で)使用することにします。月曜日にテストしてみます。

 
Дмитрий Прокопьев:

mt5.initialize(blabla, portable=True)- あまり役に立ちませんでした、まだシステムで最後に起動した ターミナルを要求してきます。

パラメータpathを 指定せずに、最初の無名パラメータとしてpathを渡して みる。

if mt5.initialize('/works/MT5-1', login=11111, ...):
        ...   
        mt5.shutdown()
else:
   print('error')

if mt5.initialize('/works/MT5-2', login=2222, ...):
        ...   
        mt5.shutdown()
else:
   print('error')
 
Almaz:

パラメータpathを 指定せずに試行し、最初の無名パラメータとしてpathを 渡します。

正しく動作しました。ありがとうございます。

バグ?

 
Дмитрий Прокопьев:

すべて正常に動作しました。ありがとうございます(苦笑)。

バグ?

バグではありません。

第1パラメータには名前を付けず、固定とする。しかし、念のため次のバージョンで名前を付ける予定です。

 
Renat Fatkhullin:

バグではありません。

第1パラメータは無記名で固定です。しかし、念のため、次のバージョンで名前が付く予定です。

嗚呼、だから私はドキュメントを具体的に理解していなかったんだ。

ありがとうございます。

 
ターミナルから「新しいバーの 始まり」を感じさせるものが本当に必要です。指標はそれほど重要ではありません。Pythonにも指標計算を行うライブラリがあることがわかった。
 

質問です。positions_get 関数があります。ドキュメントでは、その動作について3つのモードが説明されています。

position_get

シンボルまたはチケットでフィルタリングして、オープンポジションを 取得します。3種類の呼び方があります。


パラメータなしで呼び出される。すべてのシンボルのオープンポジションを返します。

positions_get()

オープンポジションを取得したいシンボルを指定して呼び出す。

position_get()

symbol="SYMBOL" // シンボル名

)

ポジションのチケットを指定するコール。

position_get()

ticket=TICKET // チケット

)

パラメータ

symbol="SYMBOL" [in] シンボルの名前です。オプションの名前付きパラメータ。シンボルが指定された場合、チケットパラメータは無視されます。

ticket=TICKET [in] ポジションチケット(POSITION_TICKET)です。オプションの名前付きパラメータ。


Variant positions_get() - 質問なし、問題なく動作します。

しかし、他の2つは何も返さない。

	 pos_info = mt5.positions_get(symbol = "GBPUSD")	
	 print(mt5.last_error())

2つ目のコールバックのバリアント。

        result = mt5.order_send(request)        
        if result.retcode == 0 or result.retcode == 10009:      
                pos_info = mt5.positions_get(ticket = result.order)
                print("mt5.last_error(): %s" % (mt5.last_error()))

last_error もまた、奇妙な構造を返します。

2020-03-09 22:25:41 [DEBUG][module: processing.py] add_position: Possition open - OK! MqlTradeResult: {
    "retcode": 10009,
    "deal": 134756209,
    "order": 161108536,
    "volume": 0.01,
    "price": 1.31089,
    "bid": 1.31066,
    "ask": 1.31089,
    "comment": "Request executed",
    "request_id": 98,
    "retcode_external": 0
}
mt5.last_error(): [1, '']

どこを見ればいいのか?どうしたんですか?

 
Дмитрий Прокопьев:

ポジションチケットのある電話。

position_get()

ticket=TICKET //チケット

)

パラメータ

symbol="SYMBOL" [in] シンボルの名前です。オプションの名前付きパラメータ。シンボルが指定された場合、チケットパラメータは無視されます。

ticket=TICKET [in] ポジションチケット(POSITION_TICKET)です。オプションの名前付きパラメータ。


Variant positions_get() - 質問なし、問題なく動作します。

しかし、他の2つは何も返さない。

2つ目の呼び出しバリアント。

last_error もまた、奇妙な構造を返します。

2020-03-09 22:25:41 [DEBUG][module: processing.py] add_position: Possition open - OK! MqlTradeResult: {
    "retcode": 10009,
    "deal": 134756209,
    "order": 161108536,
    "volume": 0.01,
    "price": 1.31089,
    "bid": 1.31066,
    "ask": 1.31089,
    "comment": "Request executed",
    "request_id": 98,
    "retcode_external": 0
}
mt5.last_error(): [1, '']

何を見るべきか?どうしたんですか?

口座の種類がネッティングかヘッジか確認してください。ネッティングの場合、既にあるポジションのチケットは変更されず、注文番号を使ってトッピング後のポジションを探しても意味がありません。

 

last_error тоже возвращает странную конструкцию:

error code 1, this is success mt5.RES_S_OK, next build will write [1, 'Success'].負の値を持つコードはエラー mt5.RES_E_xxx です。