Ошибки, баги, вопросы - страница 2817

 

Вопрос на засыпку. Как по хэндлу индикатора узнать символ и таймфрейм, для которых он создан?

В MQL API имеется функция IndicatorParameters, чтобы прочитать параметры индикатора, но её недостаточно: какой смысл знать, например, период, если не известен символ и таймфрейм? Или это упущение, или я не могу найти, как это делается - дайте плиз ссылку.

 
Stanislav Korotky:

Вопрос на засыпку. Как по хэндлу индикатора узнать символ и таймфрейм, для которых он создан?

никак

в прошлом году @fxsaber задавал такой же вопрос, но применительно к файлам - как по хендлу узнать имя файла, решения не существует

только свой контейнер использовать для этих целей, вот нашел предложенный контейнер для для хендла файла от @fxsaber

struct FILE
{
  const int handle;
  
  FILE( const string FileName, const int Flags ) : handle(::FileOpen(FileName, Flags)) {}  
  ~FILE( void ) { if (this.handle != INVALID_HANDLE) ::FileClose(this.handle); }
};
 
Stanislav Korotky:

Вопрос на засыпку. Как по хэндлу индикатора узнать символ и таймфрейм, для которых он создан?

В MQL API имеется функция IndicatorParameters, чтобы прочитать параметры индикатора, но её недостаточно: какой смысл знать, например, период, если не известен символ и таймфрейм? Или это упущение, или я не могу найти, как это делается - дайте плиз ссылку.

Igor Makanu:

никак

Можно.

bool FindIndicatorByHandle(long handle, string &symbol, ENUM_TIMEFRAMES &timeframe, long &ChartId, int &sub_win, string &Name) {
   long chart_id =ChartFirst();
   while (chart_id!=-1) {
      int total_sub = (int)ChartGetInteger(chart_id,CHART_WINDOWS_TOTAL);
      int total_ind;
      for(int i=0; i<total_sub; i++) {
         total_ind = ChartIndicatorsTotal(chart_id,i);
         for (int j=0; j<total_ind; j++) {
            string name = ChartIndicatorName(chart_id,i,j);
            if (ChartIndicatorGet(chart_id,i,name)== handle) {
               ChartId=chart_id;
               symbol= ChartSymbol(chart_id);
               timeframe=ChartPeriod(chart_id);
               sub_win=i;
               Name=name;
               return true;
            }
         }
      }
      chart_id=ChartNext(chart_id);
   }
   return false;
}

Тестовый скрипт прилагаю.

Результат работы скрипта:

2020.08.07 01:39:43.435 All_Indicators (US30Index,M1)   Market Watch: CADRUB  USDRUB  USDCAD  EURCAD  EURUSD  .BrentCrud  XAUUSD  GBPAUD  BTCUSD  US30Index  USDJPY  Symb001  USD-BTC  EURCHF  USDCHF  
2020.08.07 01:39:43.498 All_Indicators (US30Index,M1)   Chart EURUSD PERIOD_M1 has indicators: TestMinMax(handle=10)   RVI(10)(handle=11)   RSI_154(14)(handle=12)   
2020.08.07 01:39:43.499 All_Indicators (US30Index,M1)   Chart .BrentCrud PERIOD_M1 has indicators: 
2020.08.07 01:39:43.500 All_Indicators (US30Index,M1)   Chart CADRUB PERIOD_M1 has indicators: 
2020.08.07 01:39:43.501 All_Indicators (US30Index,M1)   Chart USDCAD PERIOD_M5 has indicators: 
2020.08.07 01:39:43.502 All_Indicators (US30Index,M1)   Chart US30Index PERIOD_M1 has indicators: MA(100)(handle=13)   TestMinMax(handle=14)   
2020.08.07 01:39:43.505 All_Indicators (US30Index,M1)   Chart .BrentCrud PERIOD_D1 has indicators: DinTF(handle=15)   
2020.08.07 01:39:43.509 All_Indicators (US30Index,M1)   Chart USDRUB PERIOD_M1 has indicators: Bands(200)(handle=16)   Env(10)(handle=17)   MACD(12,26,9)(handle=18)   RSI(14)(handle=19)   
2020.08.07 01:39:43.523 All_Indicators (US30Index,M1)   Chart EURUSD PERIOD_M30 has indicators: MA(15)(handle=20)   TestMinMax(handle=21)   
2020.08.07 01:39:43.527 All_Indicators (US30Index,M1)   Chart .BrentCrud PERIOD_M5 has indicators: 
2020.08.07 01:39:43.527 All_Indicators (US30Index,M1)   Chart USDCAD PERIOD_M15 has indicators: DinTF(handle=22)   
2020.08.07 01:39:43.527 All_Indicators (US30Index,M1)   Chart USDCAD PERIOD_H1 has indicators: pMa(2 - 940)(handle=23)   !Channels_3.05)(handle=24)   
2020.08.07 01:39:43.528 All_Indicators (US30Index,M1)   Chart USDCAD PERIOD_H4 has indicators: 
2020.08.07 01:39:43.528 All_Indicators (US30Index,M1)   Chart XAUUSD PERIOD_M1 has indicators: Tick(handle=25)   
2020.08.07 01:39:43.528 All_Indicators (US30Index,M1)   --------------------------------------------------------------------------------
2020.08.07 01:39:43.528 All_Indicators (US30Index,M1)   Попробуем найти индикатор по хэндлу h = 18
2020.08.07 01:39:43.529 All_Indicators (US30Index,M1)   Нашли: USDRUB  PERIOD_M1, chart_id = 128968168864101623, подокно = 1, короткое имя = MACD(12,26,9)
Файлы:
 
Nikolai Semko:

Можно.

наверное будет работать Ваш код

я никогда не пользовался ChartIndicatorGet(), только сейчас в справке нашел

но все равно, проще хендл индикатора привязывать сразу к имени индикатора в своем коде, хотя возможно задача узнать, что пользователь самостоятельно запускал


спасибо! познавательно

 
Stanislav Korotky:

Кстати, я вспомнил, что Вы любитель ренко.
Судя по Вашему вопросу, Вы уже вплотную подошли к пониманию того, что Ваше прошлое утверждение о невозможности  применять индикаторы и накладывать эксперты на ренко, сформированный на канвас, - является ошибочным.
Ура!

 
Nikolai Semko:

Можно.

Тестовый скрипт прилагаю.

Результат работы скрипта:

Это прокатит только для интерфейсных индикаторов (наложенных пользователем вручную), но не подойдет для тех, что созданы из советников. Задача максимум в том, чтобы путем включения одного инклуда в исходный код советника внедрить возможность виртуальной автооптимизации. Сейчас это возможно только с плясками с бубном (дополнительная правка исходников или некие умолчания (только текущий _Symbol/_Period), которые сработают не всегда).

А в принципе не понятно, почему функция IndicatorParameters не возвращает два самых главных мета-параметра.

Что касается индикаторов и экспертов на канвасах, то чисто технически всё возможно сделать, но вопрос в том, зачем с этим заморачиваться. Назначение канвасов - другое. А для кастом-котировок есть готовое решение, куда индикаторы и эксперты вписываются стандартным способом.

 

подскажите - как же правильно рассчитывается прибыль в виджетах и сигналах...

на прошлой неделе - вернее за первые 5 дней торговли я сделал 1000%, потом на следующий день

 

сделал ещё 1000% - это всё верно отражалось в сигналах и виджетах

 

так... потом наступила вторая неделя торговли - и тут Бац... и процентов оказалось всего +39%

ну хорошо - думаю ещё поторгую чуток.. и закончу на сегодня - закончил 0 и бац... уже у меня не +39% а все 98%... в на приросте так ваабще +4000%



так сколько же у меня процентов??? 39 или 98 или я должен верить своим глазам - так все 4000%

 
Stanislav Korotky:

Это прокатит только для интерфейсных индикаторов (наложенных пользователем вручную), но не подойдет для тех, что созданы из советников. Задача максимум в том, чтобы путем включения одного инклуда в исходный код советника внедрить возможность виртуальной автооптимизации. Сейчас это возможно только с плясками с бубном (дополнительная правка исходников или некие умолчания (только текущий _Symbol/_Period), которые сработают не всегда).

А в принципе не понятно, почему функция IndicatorParameters не возвращает два самых главных мета-параметра.

Что касается индикаторов и экспертов на канвасах, то чисто технически всё возможно сделать, но вопрос в том, зачем с этим заморачиваться. Назначение канвасов - другое. А для кастом-котировок есть готовое решение, куда индикаторы и эксперты вписываются стандартным способом.

Да, если индикатор создан функциями IndicatorCreate, iCustom, iMA, iMACD, i... и является беспризорным, т.е. не прикреплен к любому чарту с помощью ChartIndicatorAdd, то, действительно, нельзя узнать ТФ и символ этого индикатора, если этот индикатор создавался не Вами. Если Вами, тогда Вы должны знать символ и ТФ в момент создания индикатора и получения хэндла.
Если индикатор не ваш, то вроде бы и не логично вмешиваться в чужой огород, тем более когда на чартах этого индикатора нет и он является служебным.
Но если индикатор, символ и ТФ которого нужно контролировать по его хэндлу, написан Вами, но используется не Вами или используется бесконтрольно, то можно сделать в нем дополнительный буфер, в котором вшит (через union например) и текущий его ТФ и символ. Тогда даже при простом перебирании хэндлов с помощью вашей специальной функции с использованием CopyBuffer, вы можете узнать ваш ли это индикатор, а если ваш, то считать его текущий символ и ТФ.
Но, согласен с Вами, если бы у IndicatorParameters была возможность снимать ТФ и символ, было бы гораздо проще. Явно этого не хватаей этой функции. Вряд ли отсутствие этого связано с безопасностью, т.к. по незнакомому хэндлу итак имеется полный доступ с содержимому индикатора кроме ТФ и символа.

 
Aleksander:

подскажите - как же правильно рассчитывается прибыль в виджетах и сигналах...

на прошлой неделе - вернее за первые 5 дней торговли я сделал 1000%, потом на следующий день

 

сделал ещё 1000% - это всё верно отражалось в сигналах и виджетах

 

так... потом наступила вторая неделя торговли - и тут Бац... и процентов оказалось всего +39%

ну хорошо - думаю ещё поторгую чуток.. и закончу на сегодня - закончил 0 и бац... уже у меня не +39% а все 98%... в на приросте так ваабще +4000%



так сколько же у меня процентов??? 39 или 98 или я должен верить своим глазам - так все 4000%

Ответы на столь наивные вопросы так очевидны, что невольно приходят на ум подозрения о самопиаре. Поверьте, был бы очень рад ошибаться, но .....

 
Sergey Voytsekhovsky:

Ответы на столь наивные вопросы так очевидны, что невольно приходят на ум подозрения о самопиаре. Поверьте, был бы очень рад ошибаться, но .....

нее - я действительно в первый раз стал использовать сервис Сигналы... и что я вижу? то так считают проценты то эдак... а на следующей неделе что мне ждать в виджете? опять 0%???

у меня возникает когнитивный диссонанс - когда я тут вижу одно - а тут я вижу другое - и чему мне верить тогда????

как это так в виджетах расчитываются проценты???

Торговые сигналы для MetaTrader 5
Торговые сигналы для MetaTrader 5
  • www.mql5.com
Выберите подходящую торговую систему и оформите на неё подписку в пару кликов. Замониторенные счета сопровождаются подробной статистикой и торговой историей. Посмотрите обучающий видеоролик о том, как подписаться на Сигнал...