Вопросы от "чайника" - страница 165

 
Karlson:

Не так сложно переделать вот этот .

https://www.mql5.com/ru/code/470 

Спасибо!  :-)

Это правильно.

Когда переделываешь, начинаешь понимать.

 
Вопрос вдогонку. В чем разница между номером ордера и тикетом? Как осуществляется нумерация того и другого? Что начинается с 1 а что с 0. Нумеруются ли тикеты по порядку или нет?
 
kPVT:

С индикаторами все нормально. Можно узнать и количество и какие индикаторы на графике висят, повесить индикатор или удалить с графика.

Но для экспертов и скриптов это не предусмотрено, только прекратить работу эксперта вызвав ExpertRemove() из самого эксперта.

Похоже на то что действительно фнкционал есть только по индюкам (хотя до конца не проверял).

Посмотрел в MQL4, там есть функция. только как я понял это немного не то.

string WindowExpertName()
Возвращает имя выполняющегося эксперта, скрипта, пользовательского индикатора или библиотеки, в зависимости от того,
из какой MQL4-программы вызвана данная функция.
Есть предложение к разработчикам  добавить в информацию о чарте необходимый функционал, да еще таким образмо чтобы можно было получить ифну с любого чарта.
 

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

А получать инфу с других чартов действительно можно,если кому потребуется . 

 
Karlson:

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

А получать инфу с других чартов действительно можно,если кому потребуется . 

Пр помощи костылей я и сейчас получаю, а вот стандартного функционала нарыть не смог.
 

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

Поэтому если в индикаторе в цикле перебирать все графики и их окна на нахождение индикаторов то обязательно дойдешь до "самого себя" и зависнешь если не предусмотришь обходной маневр.

Конечно это можно делать в скрипте или в советнике, но мне понадобилось в индикаторе.

Но это не главное, просто опять появилась мысль:

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

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

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Свойства пользовательских индикаторов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Свойства пользовательских индикаторов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Свойства пользовательских индикаторов - Документация по MQL5
 
kPVT:

Но это не главное, просто опять появилась мысль:

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

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

Да услышит вас  Аллах  Ренат.

Я считаю , что эту (совсем не новую) мысль следует активно продвигать, причём в значительно более широком контексте, а именно:

  • Нужны разные типы больших окон (стандартный чарт только один из вариантов).  Пустой - для экспертов, возможно электронная таблица, окно браузера, и конечно разные типы графиков ещё (ренко- каги, тиковый и т.п).
  • Нужно отвязать эксперты и скрипты от графиков вообще, чтоб в окне навигатора была спец вкладка (mql-Space) с древовидная таблицей запущенных mql-программ, которая и была бы основным местом привязки для экспертов. При этом привязка к конкретному графику возможна (опционально), но необязательна. В мультивалютном терминале привязка к конкретному символу (и чарту) не слишком абсурдна только лишь для индикаторов.

К сожалению, полностью отдаю себе отчёт в том, что в MT5 это (с уверенностью 99.9%) реализовано не будет. Архитектура терминала в своём фундаменте изначально не предусматривает лёгкой перестройки или даже расширения в этом конкретном аспекте. Но на MT5 развитие системы не закончится, и к моменту закладывания фундамента MT6 (а возможно процесс уже идёт) необходимо добиться, чтоб разработчики архитектурно закладывали именно такую схему, а не наследовали привычную отлаженную ("один чарт - один эксперт", "каждая вкладка главного окна = чарт", и т.д.). 

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

Аминь.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Отображение графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Отображение графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Отображение графиков - Документация по MQL5
 
MetaDriver:

Да услышит вас  Аллах  Ренат.

Я считаю , что эту (совсем не новую) мысль следует активно продвигать, причём в значительно более широком контексте, а именно:

  • Нужны разные типы больших окон (стандартный чарт только один из вариантов).  Пустой - для экспертов, возможно электронная таблица, окно браузера, и конечно разные типы графиков ещё (ренко- каги, тиковый и т.п).
  • Нужно отвязать эксперты и скрипты от графиков вообще, чтоб в окне навигатора была спец вкладка (mql-Space) с древовидная таблицей запущенных mql-программ, которая и была бы основным местом привязки для экспертов. При этом привязка к конкретному графику возможна (опционально), но необязательна. В мультивалютном терминале привязка к конкретному символу (и чарту) не слишком абсурдна только лишь для индикаторов.

К сожалению, полностью отдаю себе отчёт в том, что в MT5 это (с уверенностью 99.9%) реализовано не будет. Архитектура терминала в своём фундаменте изначально не предусматривает лёгкой перестройки или даже расширения в этом конкретном аспекте. Но на MT5 развитие системы не закончится, и к моменту закладывания фундамента MT6 (а возможно процесс уже идёт) необходимо добиться, чтоб разработчики архитектурно закладывали именно такую схему, а не наследовали привычную отлаженную ("один чарт - один эксперт", "каждая вкладка главного окна = чарт", и т.д.). 

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

Аминь.


От чего же так пичалько?

Делается фейковый чарт и вуаля бруки превращаются в элегантные шорты, ну или лонги :) сори не удержался от игры слов.

 
Urain:

От чего же так пичалько?

Делается фейковый чарт и вуаля бруки превращаются в элегантные шорты, ну или лонги :) сори не удержался от игры слов.

Убрать с ярлычка "псевдо-чарта" весёлую надпись "USDZAR" и заменить на, к примеру, "Hello UrainSpreadSheat"  mql5, к сожалению не позволяет, равно как и перекрасить ярлычок.  Навесить на фейк-чарт пяток "фоновых" экспертов, нужных всегда и на всех чартах (типа часов, торговых панелек и т.п.) тоже никак не получится. Так что.. ты сам знаешь пределы за которые выйти в текущей реализации не получится как ни напрягайся. Да и потом второй пункт (отвязка экспертов от символов) не менее важен, а его в текущей реализации уж точно никто делать не будет.
 

Что не так с кодом. Почему постоянно выводятся ошибки "failed cancel order #0 buy 0.00  at market [Invalid request]"


   MqlTradeRequest order_remove_mql_trade_request = {0};
   order_remove_mql_trade_request.action = TRADE_ACTION_REMOVE;

   i = OrdersTotal();
   if(i > 0){
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}

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