Группа пользователей MetaTrader 5 Python - краткое содержание - страница 19

 
nicholi shen:

Где журнал изменений?

1. Исправлена проблема с автоматическим удалением объектов numpy

2. Исправлена обработка ошибок скриптов покупки/продажи/закрытия (__init__.py)
 
Almaz:

1. Исправлена проблема автоматического удаления объектов numpy

2. Исправлена обработка ошибок скриптов покупки/продажи/закрытия (__init__.py)

Спасибо!

 

Один вопрос по выводу copy_ticks_range:

#copy_ticks_range
utc_from = datetime(2020, 1, 1, tzinfo=timezone)
utc_to = datetime(2021, 1, 1, tzinfo=timezone)
init_mql5()
ticks = mt5.copy_ticks_range(symbol, utc_from, utc_to, mt5.COPY_TICKS_ALL)
mt5.shutdown()
ticks_frame = pd.DataFrame(ticks)
ticks_frame['time']=pd.to_datetime(ticks_frame['time'], unit='s')
ticks_frame['time_msc']=pd.to_datetime(ticks_frame['time_msc'], unit='ms')
ticks_frame.set_index('time_msc')[['ask', 'bid']].plot(title='EURUSD ticks', figsize=(18,4))
print('Range: {}-{}'.format(ticks_frame.time_msc.min(), ticks_frame.time_msc.max()))
print('{} ticks loaded'.format(len(ticks_frame)))
print('Total volume: {}'.format(ticks_frame.volume.sum()))
print('Total volume_real: {}'.format(ticks_frame.volume_real.sum()))
print('Flags frequency:')
print(ticks_frame.flags.value_counts())
display(ticks_frame.head(2))
display(ticks_frame.tail(2))

Поля volume и volume_real равны 0 для всех тиков (я выбрал COPY_TICKS_ALL). Это связано с историей моего брокера (объем, полученный из copy_rates_range, соответствует объему на графике Metatrader)? Также, в чем разница между этими двумя полями?

С другой стороны, я безуспешно искал значение четырех различных флагов, которые появляются в истории. Есть ли место, где я могу найти такое значение?

Спасибо!

 
Manuel Sanchon:

Один вопрос по выводу copy_ticks_range:

Поля volume и volume_real равны 0 для всех тиков (я выбрал COPY_TICKS_ALL). Это связано с историей моего брокера (объем, полученный из copy_rates_range, соответствует объему на графике Metatrader)?

Почитайте, пожалуйста, справочник по MqlTick . Эти поля не являются тиковым объемом

Структура для возврата текущих цен (MqlTick)

Это структура для хранения последних цен на символ. Она предназначена для быстрого получения наиболее востребованной информации о текущих ценах.

struct MqlTick
{
datetime time; // Времяпоследнего обновления цен
doublebid; // Текущая цена покупкицена
doubleask; // Текущая цена Ask
doublelast; // Цена последней сделки (Last)
ulongvolume; // Объем для текущей цены Last
longtime_msc; // Время последнего обновления цены вмиллисекундах
uint flags; // Флаги тика
doublevolume_real; // Объем для текущей цены Last с большей точностью
};

Переменная типа MqlTick позволяет получить значения Ask, Bid, Last и Volume в рамках одного вызова функции SymbolInfoTick().

Параметры каждого тика заполняются независимо от того, есть ли изменения по сравнению с предыдущим тиком. Таким образом, можно узнать корректную цену для любого момента в прошлом без необходимости искать предыдущие значения в истории тиков. Например, даже если во время прихода тика меняется только цена Bid, в структуре остаются и другие параметры, включая предыдущую цену Ask, объем и т. д.

Вы можете проанализировать флаги тиков, чтобы выяснить, какие именно данные были изменены:

  • TICK_FLAG_BID - тик изменил цену Bid
  • TICK_FLAG_ASK - тик изменил цену Ask
  • TICK_FLAG_LAST - тик изменил цену последней сделки
  • TICK_FLAG_VOLUME - тик изменил объем
  • TICK_FLAG_BUY - тик является результатом сделки на покупку
  • TICK_FLAG_SELL - тик является результатом сделки на продажу


См. также перечисление TICK_FLAG.
Documentation on MQL5: Constants, Enumerations and Structures / Data Structures / Price Data Structure
Documentation on MQL5: Constants, Enumerations and Structures / Data Structures / Price Data Structure
  • www.mql5.com
This is a structure for storing the latest prices of the symbol. It is designed for fast retrieval of the most requested information about current prices. The parameters of each tick are filled in regardless of whether there are changes compared to the previous tick. Thus, it is possible to find out a...
 
Rashid Umarov:

Прочитайте, пожалуйста, справочник по MqlTick . Эти поля не являются тиками.

См. также перечисление TICK_FLAG.

Спасибо, Рашид, я посмотрю.

Я заканчиваю изучать metatrader python doc. Это действительно полезно!

Я могу исполнять рыночные ордера и управлять ими (изменять sl/tp и закрывать их).

Также я могу выставлять отложенные ордера (buy/sell limit и buy/sell stop). Однако я не знаю, как их найти (ни одна из доступных в документации функций: positions_get, history_deals_get или history_order_get, не содержит таких ордеров).

Возможно ли получить их с помощью функции mt5? Или это пока невозможно?

Это было бы полезно, например, для того, чтобы быстро удалить все отложенные ордера...


По номеру ордера я могу его изменить/удалить:

#Modify  pending order
request = {
    "action": mt5.TRADE_ACTION_MODIFY,
    "order": position_id,
    "price": 1.09000,
    "sl": 1.08000,
    "tp": 1.10000
    }
result = mt5.order_send(request)
if result.retcode != mt5.TRADE_RETCODE_DONE:
    print("Position {} close failed, retcode={}".format(position_id, result.retcode))
else:
    print(result)  

#Delete  pending order
request = {
        "action": mt5.TRADE_ACTION_REMOVE,
        "order": position_id,
    }
result = mt5.order_send(request)
if result.retcode != mt5.TRADE_RETCODE_DONE:
    print("Position {} close failed, retcode={}".format(position_id, result.retcode))
else:
    print(result)  

Спасибо!

 
Manuel Sanchon:

Спасибо, Рашид, я посмотрю.

Я заканчиваю изучать metatrader python doc. Это действительно полезно!

Я могу исполнять рыночные ордера и управлять ими (изменять sl/tp и закрывать их).

Также я могу выставлять отложенные ордера (buy/sell limit и buy/sell stop). Однако я не знаю, как их найти (ни одна из доступных в документации функций: positions_get, history_deals_get или history_order_get, не содержит таких ордеров).

Возможно ли получить их с помощью функции mt5? Или это пока невозможно?

Это было бы полезно, например, для того, чтобы быстро удалить все отложенные ордера...


С помощью номера ордера я могу изменить/удалить его:

Спасибо!

Вы должны использовать получение заказов. Вот пример с использованием pymt5adapter

import pymt5adapter as mta
from pymt5adapter.order import Order
from pymt5adapter.symbol import Symbol


def main():
    symbol = Symbol('EPM20')
    r = Order.as_buy_limit(symbol=symbol, price=symbol.ask - 1.0, volume=1.0).send()
    print(r)
    for order in mta.orders_get(symbol=symbol):
        print(order)
        r = Order.as_delete_pending(order).send()
        print(r)


if __name__ == '__main__':
    with mta.connected():
        main()
 

Спасибо, Николи Шен!

 

привет

В python я хочу проверять рыночные часы на основе одного индикатора и в этом отношении я использовал ' copyrates_range ', но иногда получение данных от одного символа занимает больше времени, и я не хочу ждать и хочу игнорировать этот символ, что я могу сделать?

спасибо

Documentation on MQL5: Integration / MetaTrader for Python / copy_rates_range
Documentation on MQL5: Integration / MetaTrader for Python / copy_rates_range
  • www.mql5.com
# create 'datetime' objects in UTC time zone to avoid the implementation of a local time zone offset # get bars from USDJPY M5 within the interval of 2020.01.10 00:00 - 2020.01.11 13:00 in UTC time zone                  time     open     high      low    close  tick_volume  spread  real_volume...
 
Behrooz Basaeri:

привет

В python я хочу проверять рыночные часы на основе одного индикатора и в этом отношении я использовал ' copyrates_range ', но иногда получение данных от одного символа занимает больше времени, и я не хочу ждать и хочу игнорировать этот символ, что я могу сделать?

спасибо

Вы не можете сделать многого, потому что терминал блокируется, когда он загружает данные о курсе с торгового сервера. Даже если вы используете async, многопоточность, многопроцессорность, вы все равно столкнетесь с проблемой заблокированного терминала при последующих вызовах. Можно породить несколько процессов, подключенных к нескольким терминалам, и использовать один рабочий для обработки приоритетных быстрых задач, а другой - для обработки очереди долго выполняющихся блокирующих запросов.

 

Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий

MetaTrader 5 Python User Group - как использовать Python в Metatrader

Ренат Фатхуллин, 07/20/2014 01:19

Программу на питоне можно запускать на графиках как обычные скрипты. Они могут получать данные и торговать.

Но не в тестере.


Причина обращения: