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

MQL4 Experts

Trabalho concluído

Tempo de execução 4 dias
Comentário do desenvolvedor
ТЗ составлено грамотно, было приятно работать над нетривиальной для советника задачей. Удачи в торговле!
Comentário do cliente
Мои пожелания в части реализации технических характеристик скрипта удовлетворены в полном объёме. Попутно разработчик решил и пару вопросов, не относящихся к mql. Доволен.

Termos de Referência

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

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

Есть одно принципиальное "но": никогда не пытался вникать в язык 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, и т.д.) могут одновременно и независимо работать несколько экземпляров советника.  

Respondido

1
Desenvolvedor 1
Classificação
(635)
Projetos
1005
47%
Arbitragem
33
36% / 36%
Expirado
99
10%
Trabalhando
Publicou: 6 códigos
2
Desenvolvedor 2
Classificação
(885)
Projetos
1410
67%
Arbitragem
123
32% / 41%
Expirado
217
15%
Livre
Publicou: 1 código
3
Desenvolvedor 3
Classificação
(1)
Projetos
16
81%
Arbitragem
1
100% / 0%
Expirado
2
13%
Livre
Publicou: 1 artigo
4
Desenvolvedor 4
Classificação
(2)
Projetos
5
60%
Arbitragem
1
0% / 100%
Expirado
2
40%
Livre
5
Desenvolvedor 5
Classificação
(252)
Projetos
462
26%
Arbitragem
139
20% / 60%
Expirado
100
22%
Livre
6
Desenvolvedor 6
Classificação
(40)
Projetos
106
52%
Arbitragem
17
12% / 65%
Expirado
25
24%
Livre
7
Desenvolvedor 7
Classificação
(80)
Projetos
117
67%
Arbitragem
16
25% / 13%
Expirado
12
10%
Livre
Publicou: 2 códigos
8
Desenvolvedor 8
Classificação
Projetos
0
0%
Arbitragem
0
Expirado
0
Livre
9
Desenvolvedor 9
Classificação
(45)
Projetos
76
20%
Arbitragem
7
0% / 86%
Expirado
14
18%
Livre
10
Desenvolvedor 10
Classificação
Projetos
0
0%
Arbitragem
0
Expirado
0
Livre
11
Desenvolvedor 11
Classificação
(57)
Projetos
150
47%
Arbitragem
9
11% / 78%
Expirado
17
11%
Livre
Publicou: 2 códigos
12
Desenvolvedor 12
Classificação
Projetos
1
0%
Arbitragem
0
Expirado
0
Livre
13
Desenvolvedor 13
Classificação
Projetos
0
0%
Arbitragem
0
Expirado
0
Livre

Informações sobre o projeto

Orçamento
20 - 60 USD
Prazo
de 1 para 5 dias