그리고 현재 가격 (입찰 및 매도)은 얼마였습니까? 동결 수준(SYMBOL_TRADE_FREEZE_LEVEL)은 무엇이었습니까?
FREEZE 레벨이 확실하지 않습니까?
매도호가는 내 반바지에 대한 매수 및 입찰가에 사용됩니다.
나는 지금 내 sl과 tp를 하드 코딩하려고 시도했습니다.
몇 시간 동안 완벽하게 사고 팔고 멈추는 것이 이상합니다.
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
#########
MetaTrader5 5.0.31과 함께 새로운 MT5 터미널 베타는 스레드를 완전히 잠그기 전에 copy_rates_from_pos() 에 대한 약 7700번의 호출만 유지할 수 있습니다. 이 버그를 시연하기 위해 asyncio를 사용하여 타임아웃을 구현했습니다. 타임아웃은 컨트롤에서 작동하지만 버그로 인해 스레드가 완전히 정지되기 때문에 copy_rates_from_pos에서는 작동하지 않습니다.
import asyncio
import time
import MetaTrader5 as mt5
async def proof_timeout_works_on_blocking_call():
loop = asyncio.get_running_loop()
future = loop.run_in_executor(None, time.sleep, 5.0 )
try :
await asyncio.wait_for(future, timeout= 0.5 )
except asyncio.TimeoutError:
print( "Timeout works as expected for blocking calls!" )
async def async_copy_rates(*args, timeout):
loop = asyncio.get_running_loop()
future = loop.run_in_executor(None, mt5.copy_rates_from_pos, *args)
try :
return await asyncio.wait_for(future, timeout=timeout)
except asyncio.TimeoutError:
print(f "async_copy_rates timed out" )
print( 'mql errors =' , *mt5.last_error())
raise
async def async_last_error():
loop = asyncio.get_running_loop()
err = await loop.run_in_executor(None, mt5.last_error)
return err
async def main():
await proof_timeout_works_on_blocking_call()
maxbars = mt5.terminal_info().maxbars
for i in range( 1 , maxbars):
r = await async_copy_rates( 'EURUSD' , mt5.TIMEFRAME_M1, 0 , i, timeout= 0.5 )
if r is not None:
print(f '{i} -> {len(r)}' )
if __name__ == '__main__' :
mt5.initialize()
print(mt5.__version__)
asyncio.run(main())
mt5.shutdown()
maxbars를 "count" 매개변수로 요청하는 데 실패했기 때문에 함수 를 테스트하기 위한 단위 테스트로 각 반복에서 요청된 막대 수를 늘리는 간단한 루틴을 작성했습니다. 이것은 문제 없이 완료되어야 하지만 제한된 횟수만 호출할 수 있다는 점을 감안하면 신뢰할 수 없습니다.
maxbars를 "count" 매개변수로 요청하는 데 실패했기 때문에 함수 를 테스트하기 위한 단위 테스트로 각 반복에서 요청된 막대 수를 늘리는 간단한 루틴을 작성했습니다. 이것은 문제 없이 완료되어야 하지만 제한된 횟수만 호출할 수 있다는 점을 감안하면 신뢰할 수 없습니다.
이 문제는 5.0.33에서 수정되었으며 numpy 배열을 자동으로 해제하지 않는 것과 관련이 있습니다.
그리고 현재 가격 (입찰 및 매도)은 얼마였습니까? 동결 수준(SYMBOL_TRADE_FREEZE_LEVEL)은 무엇이었습니까?
FREEZE 레벨이 확실하지 않습니까?
매도호가는 내 반바지에 대한 매수 및 입찰가에 사용됩니다.
나는 지금 내 sl과 tp를 하드 코딩하려고 시도했습니다.
몇 시간 동안 완벽하게 사고 팔고 멈추는 것이 이상합니다.
여전히 다음과 같이 씁니다.
r.retcode != TRADE_RETCODE_REQUOTE 및 r.retcode != TRADE_RETCODE_PRICE_OFF인 경우:
AttributeError: 'NoneType' 개체에 'retcode' 속성이 없습니다.
https://www.mql5.com/ru/docs/integration/python_metatrader5/mt5ordersend_py 에 대한 도움말에서 예제를 실행합니다.
도움말 예제가 작동합니다.
내 기능에 예제를 적용하고 다음과 같이 씁니다.
result_buy.retcode != mt5.TRADE_RETCODE_DONE인 경우:
AttributeError: 'NoneType' 개체에 'retcode' 속성이 없습니다.
여전히 다음과 같이 씁니다.
도움말 예제가 작동합니다.내 기능에 예제를 적용하고 다음과 같이 씁니다.
만약 result_buy.retcode ! = mt5.TRADE_RETCODE_DONE:
AttributeError: 'NoneType' 개체에 'retcode' 속성이 없습니다.
그래서 result_buy==None을 얻었고 값을 확인하지 않았고 None에서 retcode를 얻으려고 했습니까?
MetaTrader5 5.0.31과 함께 새로운 MT5 터미널 베타는 스레드를 완전히 잠그기 전에 copy_rates_from_pos() 에 대한 약 7700번의 호출만 유지할 수 있습니다. 이 버그를 시연하기 위해 asyncio를 사용하여 타임아웃을 구현했습니다. 타임아웃은 컨트롤에서 작동하지만 버그로 인해 스레드가 완전히 정지되기 때문에 copy_rates_from_pos에서는 작동하지 않습니다.
연결을 종료하고 다시 초기화해도 도움이 되지 않습니다.
복사율에 버그가 있습니다. 나는 이것을 여러 번 올렸지만 아무도 그것을 인정하지 않았습니다.
질문: 왜 이 주기를 사용합니까?
질문: 왜 이 주기를 사용합니까?
maxbars를 "count" 매개변수로 요청하는 데 실패했기 때문에 함수 를 테스트하기 위한 단위 테스트로 각 반복에서 요청된 막대 수를 늘리는 간단한 루틴을 작성했습니다. 이것은 문제 없이 완료되어야 하지만 제한된 횟수만 호출할 수 있다는 점을 감안하면 신뢰할 수 없습니다.
maxbars를 "count" 매개변수로 요청하는 데 실패했기 때문에 함수 를 테스트하기 위한 단위 테스트로 각 반복에서 요청된 막대 수를 늘리는 간단한 루틴을 작성했습니다. 이것은 문제 없이 완료되어야 하지만 제한된 횟수만 호출할 수 있다는 점을 감안하면 신뢰할 수 없습니다.
여전히 다음과 같이 씁니다.
r.retcode != TRADE_RETCODE_REQUOTE 및 r.retcode != TRADE_RETCODE_PRICE_OFF인 경우:
AttributeError: 'NoneType' 개체에 'retcode' 속성이 없습니다.
도움말 예제가 작동합니다.
내 기능에 예제를 적용하고 다음과 같이 씁니다.
result_buy.retcode != mt5.TRADE_RETCODE_DONE인 경우:
AttributeError: 'NoneType' 개체에 'retcode' 속성이 없습니다.
ckeiderling :
...
mt5.copy_ticks_range() 및 mt5.copy_rates_range()를 사용하여 동일한 문제가 발생합니다. 메모리를 지우려면 커널을 재설정해야 합니다.
...