Самообучение языку MQL5 с полного нуля - страница 53

 
SanAlex:

3 часть 


Твои портянки тут это моветон. Заворачивай все во вложение 
 
MrBrooklin:

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

С уважением, Владимир.


Отвечу вечером по мск. С библиотекой тралов и их видов от Ю.Дзюбана, которая на боевых роботах работает без вопросов и которой пользуюсь по настоящее время на МТ4.
Там подходы одни и те же что на МТ5.
 
Aleksey Masterov:

Твои портянки тут это моветон. Заворачивай все во вложение 

новое слово для себя узнал - моветон

( Дурной тон; поведение, манеры и поступки, считающиеся неподобающими, неприличными, не принятые в данном обществе; плохой, дурно воспитанный )



 
SanAlex:

новое слово для себя узнал - моветон

( Дурной тон; поведение, манеры и поступки, считающиеся неподобающими, неприличными, не принятые в данном обществе; плохой, дурно воспитанный )




Такие ваши портянки тут никому не интересны. Размещать принято во вложнении, если таким образом это не значит что их вкурит больше желающих их вкуривать...

Мешает чтению темы и ответу по сабжу.
 
Aleksey Masterov:

Такие ваши портянки тут никому не интересны. Размещать принято во вложнении, если таким образом это не значит что их вкурит больше желающих их вкуривать...

Мешает чтению темы и ответу по сабжу.

не буду мешать - общайтесь!

------------------------------------

хотя в тех портянках - можно было что не будь подобрать 

 
Fast235:

i равно кол-ву открытых позиций, столько и циклов будет с печатью 

нужно убрать знак "=" в  зачем вам проходить цикл когда кол-во открытых позиций равно 0. на этот нулевой вызов и выходила вторая печать

Здравствуйте! Спасибо Вам огромное! Сейчас и сам не пойму почему подумал, что цикл начинается с "0", а не с "1". Короче говоря, нужно завязывать учиться по ночам, как это было раньше в молодости.

С уважением, Владимир.

 
Aleksey Masterov:

Отвечу вечером по мск. С библиотекой тралов и их видов от Ю.Дзюбана, которая на боевых роботах работает без вопросов и которой пользуюсь по настоящее время на МТ4.
Там подходы одни и те же что на МТ5.

Здравствуйте, Алексей! Буду весьма признателен за любую оказанную помощь.

С уважением, Владимир.

 
MrBrooklin:

Итак, на основании прочитанной литературы, написал небольшой алгоритм по созданию советника с функцией трейлинг стоп:

  1. Создаем советник для автоматизации работы по трейлингу (сопровождению) уровня Stop Loss открытой позиции с уже заданными уровнями Take Profit и Stop Loss. А какая разница, заданы предварительные уровни тейк-профита  и стоп лосса у позиции или нет? Если уровень стопа не задан, он будет задан экспертом тралировщиком, если уровень стоит, он будет изменен на новый согласно алгоритму. К тейк профиту позиции эксперт будет и вовсе индифферентный.
  2. В советнике создаем блок входных параметров с двумя параметрами: задать «уровень трейлинга безубытка» и задать «шаг трейлинга». На самом деле речь о двух алгоритмах в одном: первый переставляет стоп в безубыток, второй тралит его дальше по ходу движения. В отрицательной зоне, стоп не тралится.
  3. При поступлении новых котировок обрабатываем их функцией OnTick( ). Трейлинг работает только при поступлении нового тика по текущему символу.
  4. Создадим и запустим в работу цикл перебора всех позиций. 
  5. Если вдруг не обнаруживаем ни одной открытой позиции, то возвращаемся к циклу
  6. Обновим котировки. Не надо ничего обновлять. Торговое окружение обновляется автоматически. Нужно просто запросить данные на момент события OnTick.
  7. Если есть открытая позиция, то продолжаем. Зачем все эти подробности с пункта 4 по пункт 7? Вместо этого пишем проще: Для каждой позиции Buy определяем... и далее из 9 пункта
  8. Определяем тип открытой позиции: Buy или Sell.
  9. Если открыта позиция Buy, то определяем, где находится текущая цена относительно цены открытой позиции.
  10. Если текущая цена выше цены открытия позиции, то проверяем на какой уровень она поднялась.
  11. Если текущая цена достигла «уровня трейлинга» заданного во входных параметрах, то переносим Stop Loss на уровень без убытка равного цене открытия позиции Buy. В противном случае ничего не делаем.
  12. Если текущая цена превысила «уровень трейлинга» на величину равную «шагу трейлинга», то тогда Stop Loss перемещается с уровня цены открытия позиции Buy на величину равную «шагу трейлинга» и так до тех пор, пока цена не достигнет заданного для данной позиции уровня Take Profit.
  13. Если цена развернется и достигнет уровня уже перемещенного Stop Loss, то позиция закрывается.
  14. [Далее следует аналогичное описание для селл]
  15. Если открыта позиция Sell, то определяем, где находится текущая цена относительно цены открытой позиции.
  16. Если текущая цена ниже цены открытия позиции, то проверяем на какой уровень она опустилась.
  17. Если текущая цена достигла «уровня трейлинга» заданного во входных параметрах, то переносим Stop Loss на уровень без убытка равного цене открытия позиции Sell. В противном случае ничего не делаем.
  18. Если текущая цена превысила «уровень трейлинга» на величину равную «шагу трейлинга», то тогда Stop Loss перемещается с уровня цены открытия позиции Sell на величину равную «шагу трейлинга» и так до тех пор, пока цена не достигнет заданного для данной позиции уровня Take Profit.
  19. Если цена развернется и достигнет уровня уже перемещенного Stop Loss, то позиция закрывается.


Сделал кое-какие правки

 
Вот упрощенная версия описания трейлинга:
  1. Обработка трейлинга происходит при поступлении нового тика, в функции OnTick.
  2. Трелинг стоп состоит из двух последовательных частей:
  3. Часть 1. Для каждой открытой позиции рассчитывается цена, при достижении которой, ее стоп-лосс переносится в безубыток.
  4. Часть 2. После того, когда стоп перенесен в безубыток, для активной позиции активируется алгоритм подтягивания стопа в след за ценой.

Описывать подробные алгоритмы переноса стопа для первой и второй частей я не буду. Они уже Вами описаны в целом верно. Если их описывать то далее нужно следовать шаблону:

Часть 1. Перенос в безубыток:
  • Для покупки;
  • Для продажи;
Часть 2. Подтягивание стопа:
  • Для покупки;
  • Для продажи;
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
MrBrooklin:

Здравствуйте, Алексей! Буду весьма признателен за любую оказанную помощь.

С уважением, Владимир.

У Вас две основные ошибки в описании ТЗ:

1. Вы слишком сильно уходите в низкоуровневые детали. Зачем например писать (неправильно кстати) "что нужно вернутся к циклу если не обнаружено ни одной позиции". Если позиций нет, то и обрабатывать будет нечего. Не надо возвращаться к циклу, нужно просто выйти и ждать нового тика, может там что-нибудь появится, а может нет. Не нужно описывать случаи "что если не..." - таких случаев бесконечное количество, всех не опишите. Вместо этого сосредоточьтесь на том "что если да".

2. В ТЗ четко прослеживается стремление к последовательности. Не надо этого делать. Идите от общего к частному: "мне нужен стоп который а) переводится в безубыток, б) когда он переведен в безубыток начинает подтягивается тралом. правила перевода в безубыток и подтягивания стопа прилагаю ниже..." - Уверяю, такое ТЗ поймет любой программер на бирже фриланса, и для него, программера, такое ТЗ будет куда проще и понятней чем разбираться в циклах, которые возвращаются сами к себе, если позиции нет...ну и т.д.

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