Делаем торговую систему на Python для МТ. - страница 3

 
Yuriy Asaulenko:

Это другая тема.)

Я не собираю команду. Гуляю сам по себе, занимаюсь тем, что считаю нужным и интересным, и никаких обязательств не принимаю.

Если кто хочет гулять со мной, - тоже никаких возражений, и никаких обязательств.

Я не о команде, а о движке в виде EXE приложения, для связи Python и R с MQL, которое предлагал в той теме.
 
Ivan Negreshniy:
Я не о команде, а о движке в виде EXE приложения, для связи Python и R с MQL, которое предлагал в той теме.

Будет вам ЕХЕ - в Python не проблема. R, извините, не пользую - имхо, большая свалка всего и вся. Если в этой свалке и есть бриллианты, то их поиск проблематичен. Если только СанСаныч не подскажет.)

Я занимаюсь в основном нейросетями, а их и без R хватает.

Но, вообще-то, методика взаимодействия планируется универсальной, и наверное вы сможете ее употребить и для R.

 
Теперь, когда у нас есть заготовка приложения, пора заняться обменом данными терминала с Python.
Для начала выберем простейший вид обмена - обмен данными через файлы.
Сейчас многие хмыкнут в чернильницы, а напрасно. Ну и пусть их.)
1. На период построения и отладки приложения, файловый обмен наиболее эффективен, т.к. не требует никаких усилий для модернизации. А после построения приложения он может быть заменен на что-то другое.
2. В большинстве готовых ТС скорости файлового обмена хватает с лихвой. 50-100 мс. Вам не хватает?
3. При обмене файлами через RAM-Disk скорость обмена достигает 1.5 ГБайт/с. Задержки измерить вообще не представляется возможным.
В общем, наплевать и забыть на противников.))
Ну, вообще-то, на последнем этапе планируется другой обмен, если мы или тема доживем до этого.)

Обмениваться с терминалом будем через CSV файлы. Пока в одну сторону - от терминала к приложению.
Чтобы не возникало конфликта интересов, будем использовать семафорные файлы.
Итак, пусть DataTS.csv - файл с данными, и STS.s - семафорный файл.
Терминал пишет данные в DataTS.csv, и, после записи, создает пустой семафорный файл STS.s.
Приложение проверяет наличие семафорного файла STS.s, после этого читает файл  DataTS.csv, после чего удаляет семафорный файл STS.s.
Далее, терминал обнаруживает исчезновение семафорного файла STS.s, и только после этого пишет новые данные в файл  DataTS.csv.
Возможны варианты, в зависимости от файловых функций Phyton и МТ - пока не смотрел.
Однако, не все сразу, для начала надо с Python поработать, и определится с его возможностями.
Этим и займемся.
 
 
Со времени моего последнего визита произошли некоторые изменения. Приложение стало полностью функциональным - реализовано все о чем написано в предыдущем посте. Теперь работают все кнопки и реализован файловый обмен.
- кнопка Clear очищает окно вывода,
- кнопка Send направляет строку окна ввода в окно вывода,
- кнопка Start включает файловый обмен,
- кнопка Stop останавливает файловый обмен.
Это легко проверить. Создаем папку C:\PyTS, помещаем в нее файл с данными - DFile.csv, в нее-же помещаем семафорный файл - SFile.tx. Наша программа  Python обнаруживает семафорный файл, читает файл с данными, выводя его содержание в окно вывода, и удаляет семафорный файл.
Теперь вы можете изменить данные в файле DFile.csv, и создать новый семафорный файл, после чего программа прочитает и выведет новые данные.
Если вы пожелаете, то можете написать простую программу на MQL, изменить в нашей программе папку чтения на папку, в кот пишет МТ, и уже можете самостоятельно оценить и скорость обмена, и возможные пропуски данных, и многое другое.
За файловый обмен отвечает единственная функция - FileExchange(). Она реализована в дополнительном потоке - потоке таймера. Подобных потоков и функций можно плодить десятками, и они не будут как-либо влиять на работу приложения - т.е., в нашем распоряжении могут быть десятки параллельно и независимо работающих каналов обмена данными. 
Сейчас таймер установлен на 10.0 с - вы можете его переустановить хоть на 0.001с - см. документацию.
Ну, и если вы действительно захотите измерить скорость и др. характеристики - удалите отладочные функции print() на пути обмена - они существенно снижают скорость работы.
Код программы Python в аттачменте. Как обычно, переименовать в .py
Файлы:
PyTS_1.0.txt  3 kb
 

Мы говорили об обмене файлами CSV, однако в версии 1.0 (см. пред-й пост) просто открывали и читали файлы. След. версия - 1.01, после небольших доработок читает CSV и запоминает их в переменной InData.

Собственно, вся доработка:

def FileExchange():
    global Change
    if Change==True:
        if os.path.exists(SFile):
            print("SFile.txt is")
            if os.path.exists(DFile):
                print("DFile.csv is")
                InData = csv.reader(open(DFile, 'r'))
                data_read = [row for row in InData]
                print(data_read)
                os.remove(SFile)
            else:
                print("DFile.csv no")
        else:
            print("SFile.txt no")
        print('Вывод таймера')
        timer =threading.Timer(10.0,FileExchange)
        timer.start()

Изменено всего 3 строчки + подключение библиотеки csv.

Ну, и контрольный вывод содержимого CSV из переменной InData:

In [18]: [['04.08.2018 14:00', ' 1300', ' 1295', '1310', '1305', '100'], ['04.08.2018 14:10', ' 1307', ' 1297', '1320', '1315', '150']]

Теперь значения строк доступны по индексам, типа - строка, столбец.

Ну, и сам код - см. аттачмент.

Файлы:
PyTS_1.01.txt  3 kb
 
Yuriy Asaulenko:

Мы говорили об обмене файлами CSV, однако в версии 1.0 (см. пред-й пост) просто открывали и читали файлы. След. версия - 1.01, после небольших доработок читает CSV и запоминает их в переменной InData.

Собственно, вся доработка:

Изменено всего 3 строчки + подключение библиотеки csv.

Ну, и контрольный вывод содержимого CSV из переменной InData:

Теперь значения строк доступны по индексам, типа - строка, столбец.

Ну, и сам код - см. аттачмент.

Пользоваться файлами для обмена не лучшее решение. Файловые операции очень медленны. Для такого обмена надо подключать RAM диск.
 
Grigoriy Chaunin:
Пользоваться файлами для обмена не лучшее решение. Файловые операции очень медленны. Для такого обмена надо подключать RAM диск.
Можете привести характеристики быстродействия файлового обмена (что есть), а также требуемые задачей (что надо)?


А я, например, скажу, что они чрезвычайно быстрые, а не медленные. Без числовых характеристик и Ваше, и мое утверждения ни на чем не основаны, и поэтому не имеют смысла в решаемой задаче. Нужны характеристики и файлового обмена, и потребностей задачи, и только после их сравнения можно прийти к обоснованным выводам. Раз Юрий Асауленко решил, что файлы подходят, думаю, ему виднее планируемые объемы передачи данных и времени их обработки.

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

 
Grigoriy Chaunin:
Пользоваться файлами для обмена не лучшее решение. Файловые операции очень медленны. Для такого обмена надо подключать RAM диск.

Это вопрос уже обсуждался в этой теме, в предыдущих постах, в т.ч. и возможное использование RAM-Disk, при необходимости:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Делаем торговую систему на Python для МТ.

Yuriy Asaulenko, 2018.08.01 19:33

Теперь, когда у нас есть заготовка приложения, пора заняться обменом данными терминала с Python.
Для начала выберем простейший вид обмена - обмен данными через файлы.
Сейчас многие хмыкнут в чернильницы, а напрасно. Ну и пусть их.)
1. На период построения и отладки приложения, файловый обмен наиболее эффективен, т.к. не требует никаких усилий для модернизации. А после построения приложения он может быть заменен на что-то другое.
2. В большинстве готовых ТС скорости файлового обмена хватает с лихвой. 50-100 мс. Вам не хватает?
3. При обмене файлами через RAM-Disk скорость обмена достигает 1.5 ГБайт/с. Задержки измерить вообще не представляется возможным.
В общем, наплевать и забыть на противников.))
Ну, вообще-то, на последнем этапе планируется другой обмен, если мы или тема доживем до этого.)
А также в одном из первых постов темы.
 

Представляю новую версию PyTS 1.02. Эта версия функционально эквивалентна версии 1.01, однако из кода удалены уже ненужные контрольные print() и начал реализовываться классовый подход (еще Ленин писал - подход должен быть классовый) - обработка файлов CSV полностью поручена классу - cCSVJob.

Zip-файл в аттачменте, где вы найдете также все предыдущие версии программы, а также, в папке PyTS, необходимые файлы с исходными данными для тестирования.

Файлы:
PyTS.zip  6 kb
Причина обращения: