Создание универсального торгового робота

MQL4 エキスパート

仕事が完了した

実行時間4 日
開発者からのフィードバック
ТЗ составлено грамотно, было приятно работать над нетривиальной для советника задачей. Удачи в торговле!
依頼者からのフィードバック
Мои пожелания в части реализации технических характеристик скрипта удовлетворены в полном объёме. Попутно разработчик решил и пару вопросов, не относящихся к mql. Доволен.

指定

Здравствуйте, коллеги. 

Есть желание осуществить тестирование ряда стратегий в реальных условиях в режиме автоматической торговли.

Есть одно принципиальное "но": никогда не пытался вникать в язык mql, и принципиально не хочу, - предпочитаю сосредотачиваться на разработке алгоритмов.  

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

Примечание: не нужно советовать реализацию через dll, и различные другие подходы - я осознаю их возможности, но хочу иметь именно то, что опишу ниже. 

 

Состав и принцип работы необходимого мне робота:

1. Робот содержит две совершенно независимые части: советник на mql, являющийся исполнительской частью, и "алгоритмическое ядро", в виде файла .exe; 

2. Исполнительская часть и алгоритмическое ядро обмениваются данными через обычный текстовый файл; 

3. При необходимости изменить торговую стратегию, я тупо заменяю файл .exe (которые создаю самостоятельно), и всё. 


От разработчика требуется создать только "исполнительскую" часть, которая должна быть устроена следующим образом: 

 

1. Должна быть способной "навеситься" на график любой валютной пары, на любой таймфрейм графика цены.

Примечание 1.1: предполагаю использование в основном на графике М5. 

 

2. Рабочая директория советника должна указываться в его коде. 

Примечание 2.1: из возможных для осуществления файловых операций средствами mql.  

 

3. После указания директории, советник должен создать в ней текстовый файл историю за последние 288 баров.

Примечание 3.1: 288 баров М5 - это сутки, особого смысла тут нет, просто единожды описанная в самом коде советника переменная, которая должна быть известно где, чтобы её можно было менять;

Примечание 3.2: текстовый файл истории должен иметь понятное название, например "EURUSD5.txt";

Примечание 3.3: текстовый файл должен быть устроен аналогично файлам, которые создаёт сам метатрейдер при экспорте котировок в файл, следующим образом:

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

только из всех столбцов <DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL> реально нужны только <DTYYYYMMDD>,<TIME>,<CLOSE>. 

 

4. После создания начального файла котировок советник должен запустить алгоритмическое ядро - исполняемый файл, который так пусть и будет называться kernel.exe;

Примечание 4.1: файл kernel.exe располагается в той же самой, ранее выбранной для работы, директории, для запуска в мт будет разрешено использование библиотеки Kernel32.dll. 

 

5. Далее - магия. Файл .exe сообразно своему устройству обращается к файлу котировок, считывает их, проводит анализ, и выдаёт результат анализа в файл trade.txt (расположенный там же);

Примечание 5.1: Файл trade.txt будет устроен так: одна строка, в которой через запятую, пробел, или как надо будут значения <DTYYYYMMDD>,<TIME>,<Result>,<Volume>  

где  <DTYYYYMMDD>,<TIME> взяты из файла котировок, и соответствуют последнему записанному там значению (последнему сформировавшемуся бару), Result - либо -1, либо 0, либо 1,

а Volume - объём в лотах.

Примечание 5.1: возможно, тут возникнет проблема при использовании на долларовом или центовом счёте? Если нет, замечательно. По умолчанию предполагаем, что счёт не центовый,

(а точнее даже рублёвый), и под лотом понимается стандартный лот в 100 тысяч единиц базовой валюты;

 

6. Советник должен подождать небольшое время, чтобы не мешать работе с файлом алгоритмического ядра. Например, 10 секунд, чтобы уж заведомо с запасом.

Примечание 6.1: переменная, задающая эту задержку должна быть показана, где она написана и как называется, чтобы можно было её менять при необходимости.

 

7. Подождав согласно п.6, советник должен обратиться к файлу trade.txt и прочитать его. Если указанные в нём значения <DTYYYYMMDD>,<TIME> актуальны (соответствуют последнему

сформировавшемуся бару, и новее бара нет), то смотрится значение Result: если оно 0 - ничего не делать, если -1 или 1 - продать или купить соответственно, лотом,

указанным в следующем элементе строки (Volume);

 

8. При формировании очередного бара советник должен дописать строчку в файл котировок;

Примечание 8.1. Советник должен отслеживать количество строк в файле котировок. При достижении величины в 2-3 раза больше начального количества строк,

файл должен не дополняться, а переписываться заново, как на шаге п. 3;

 

9. Далее всё то же: запускает алгоритмическое ядро, и прочее по п.п. 4 - 8;

Примечание 9.1: код советника должен быть открытым - я должен понимать (кодер должен мне пояснить) что там написано, чтобы при необходимости поменять его немного.

 

10. Советник должен отслеживать количество сделок по "своему" инструменту. При достижении задаваемого в коде советника количества (например, 10),

он должен автоматически закрывать ордера;

Примечание 10.1: Поскольку будут возможны и наверное нередки ситуации, когда будут открыты ордера в разных направлениях, закрытие должно происходить как закрытие

перекрытых ордеров (то есть спред в конечном итоге с одной из сделок не берется, а возвращается на счёт).


11. При отсутствии в файле команд указаний что делать, то есть в ситуации, когда очередной бар сформировался, советник залез в файл trade.txt, а там строка 

соответствует устаревшему значению <DTYYYYMMDD>,<TIME>, от прошлого, или более старого бара - советник должен закрыть все сделки по своей паре. 

 

P.S. Возможны незначительные уточнения технического задания в процессе обсуждения.  

P.P.S. Предполагается, что при указании различных директорий (например, папок EURUSD, GBPUSD, и т.д.) могут одновременно и независимо работать несколько экземпляров советника.  

応答済み

1
開発者 1
評価
(635)
プロジェクト
1005
47%
仲裁
33
36% / 36%
期限切れ
99
10%
仕事中
パブリッシュした人: 6 codes
2
開発者 2
評価
(885)
プロジェクト
1410
67%
仲裁
123
32% / 41%
期限切れ
217
15%
パブリッシュした人: 1 code
3
開発者 3
評価
(1)
プロジェクト
16
81%
仲裁
1
100% / 0%
期限切れ
2
13%
パブリッシュした人: 1 article
4
開発者 4
評価
(2)
プロジェクト
5
60%
仲裁
1
0% / 100%
期限切れ
2
40%
5
開発者 5
評価
(252)
プロジェクト
462
26%
仲裁
139
20% / 60%
期限切れ
100
22%
6
開発者 6
評価
(40)
プロジェクト
106
52%
仲裁
17
12% / 65%
期限切れ
25
24%
7
開発者 7
評価
(80)
プロジェクト
117
67%
仲裁
16
25% / 13%
期限切れ
12
10%
パブリッシュした人: 2 codes
8
開発者 8
評価
プロジェクト
0
0%
仲裁
0
期限切れ
0
9
開発者 9
評価
(45)
プロジェクト
76
20%
仲裁
7
0% / 86%
期限切れ
14
18%
10
開発者 10
評価
プロジェクト
0
0%
仲裁
0
期限切れ
0
11
開発者 11
評価
(57)
プロジェクト
150
47%
仲裁
9
11% / 78%
期限切れ
17
11%
パブリッシュした人: 2 codes
12
開発者 12
評価
プロジェクト
1
0%
仲裁
0
期限切れ
0
13
開発者 13
評価
プロジェクト
0
0%
仲裁
0
期限切れ
0

プロジェクト情報

予算
20 - 60 USD
締め切り
最低 1 最高 5 日