price_ask = mt5.symbol_info_tick(symbol).ask # Buying
####################
##cONDITION FOR buy
if close_past < close_current and position_type(symbol) != 0 or position_type(symbol) == None:
mt5.Close(symbol)
buy(symbol, lot, price_ask, point, digits)
print('{} LONG Postition bought!'.format(symbol))
####################
##### Function to BUY
def buy(symbol, lot, price, point, digits):
request_buy = {
"action": mt5.TRADE_ACTION_DEAL,
"symbol": symbol,
"volume": lot,
"type": mt5.ORDER_TYPE_BUY,
"price": round(price, digits),
"sl": round((price - 100 * point),digits),
"tp": round((price + 300 * point),digits),
"magic": 234000,
"comment": "{} Buy.".format(symbol),
"type_time": mt5.ORDER_TIME_GTC,
}
# send a trading request
result_buy = mt5.order_send(request_buy)
# check the execution result
print("1.BUY order send(): by {} {} lots at {}".format(symbol,lot,price));
if result_buy.retcode != mt5.TRADE_RETCODE_DONE:
print("2. order_send failed, retcode={}".format(result_buy.retcode))
# request the result as a dictionary and display it element by element
result_dict=result_buy._asdict()
for field in result_dict.keys():
print(" {}={}".format(field,result_dict[field]))
# ifthis is a trading request structure, display it element by element as well
if field=="request":
traderequest_dict=result_dict[field]._asdict()
for tradereq_filed in traderequest_dict:
print(" traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed]))
else:
return result_buy
#########
for count in range(maxbars):
rates = mt5.copy_rates_from_pos('EURUSD', mt5.TIMEFRAME_M1, 0, count)
errno, strerror = mt5.last_error()
if errno != mt5.RES_S_OK:
print(f"Failed on count={count} with strerror={strerror}")
break
現在の価格(BidとAsk)はどうなっていますか?フリーズレベル(SYMBOL_TRADE_FREEZE_LEVEL)は何でしたか?
FREEZEレベルについてよくわからない?
買いはアスクプライス、ショートはビッドプライスで行っています。
今、slとtpをハードコーディングしてみました。
ただ、何時間も完璧にBuy and Sellして、その後止まるのが不思議です。
スティルは書いている。
if r.retcode != TRADE_RETCODE_REQUOTE and r.retcode != TRADE_RETCODE_PRICE_OFF:
AttributeError: 'NoneType' object has no attribute 'retcode'.
の実行ヘルプの例https://www.mql5.com/ru/docs/integration/python_metatrader5/mt5ordersend_py
help worksの例です。
自分の関数で例を使って書いてみました。
if result_buy.retcode != mt5.TRADE_RETCODE_DONE:
AttributeError: 'NoneType' オブジェクトには 'retcode' という属性がない。
やはり書いてある。
ヘルプにある例で動作します。私の関数の例を適用すると、こうなります。
ifresult_buy.retcode != mt5.TRADE_RETCODE_DONE:
AttributeError: 'NoneType' オブジェクトに 'retcode' 属性がない。
result_buy==Noneとなり、値を確認せず、Noneからretcodeを取得しようとしたのですね。
MetaTrader5 5.0.31を搭載した新しいMT5-terminalベータ版は、スレッドが完全にロックされるまで、copy_rates_from_pos() の約7700回の呼び出しにしか耐えられない。このバグを実証するために、私はasyncioを使ってタイムアウトを実装しました。タイムアウトはコントロールでは機能しますが、copy_rates_from_posではバグによりスレッドが完全にフリーズしてしまうため、機能しません。
接続をシャットダウンして再初期化しても解決しない。
コピー率にバグがあります。何度か投稿したのですが、誰も認めてくれません。
質問:このサイクルは何のためにあるのですか?
質問:なぜこのサイクルなのですか?
count "パラメータとしてmaxbarsを要求すると失敗するので、関数を テストするためのユニットテストとして、各反復で要求されたバーの数を増加させる簡単なルーチンを書きました。これは問題なく完了するはずですが、呼べる回数に限りがあることを考えると、信頼性に欠けることになります。
count "パラメータとしてmaxbarsを要求すると失敗するので、関数を テストするためのユニットテストとして、繰り返しごとに要求されるバーの数を増やす簡単なルーチンを書きました。 これは問題なく完了しますが、有限の回数だけ呼び出せることを考えると、信頼性が低くなります。
スティルは書いている。
if r.retcode != TRADE_RETCODE_REQUOTE and r.retcode != TRADE_RETCODE_PRICE_OFF:
AttributeError: 'NoneType' object has no attribute 'retcode'.
ヘルプの例
私の関数の例を適用すると、次のようになります。
if result_buy.retcode != mt5.TRADE_RETCODE_DONE:
AttributeError: 'NoneType' オブジェクトには 'retcode' という属性がない。
ckeiderling:
...
mt5.copy_ticks_range () と mt5.copy_rates_range () を使用しても同じ問題が発生します。メモリをクリアするためにカーネルをリセットする必要があるんだ。
...