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

 
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
Выберите подходящую торговую систему и оформите на неё подписку в пару кликов. Замониторенные счета сопровождаются подробной статистикой и торговой историей. Посмотрите обучающий видеоролик о том, как подписаться на Сигнал...
 

После обновления перестала работать функция

ChartSetInteger(0,CHART_BRING_TO_TOP,0,true)

Не переключается на 0 график, в чем может быть ошибка?

void OnStart()
  {
   long currChart,prevChart=ChartFirst();
   int z=0,limit=100;
     while(z<limit)
     {
      currChart=ChartNext(prevChart);
      string __simvol=ChartSymbol(currChart);
      ENUM_TIMEFRAMES __period=ChartPeriod(currChart);
      if(currChart==-1)
        {
         __simvol=Symbol();
         currChart=0;
        };
         if(!ChartSetInteger(currChart,CHART_BRING_TO_TOP,0,true))
        {
         //--- выведем сообщение об ошибке в журнал "Эксперты"
         Print(__FUNCTION__+", Error Code = ",GetLastError());
         //return(false);
        };
      Print(currChart, "  ", __simvol);

      Sleep(2000);
      if(currChart==0)
         {break;};
     prevChart=currChart;
      z++;

     };
  }
 

Прошу помощи.

Как на левом символе узнать цену маркет-ордера?


На примере советника.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

input int inTP = 100; // Размер тейка.

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (!OrdersTotal()) // Если нет текущих ордеров
  {
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, Ask + inTP * _Point);  // Купили с тейком.
    OrderSend(_Symbol, OP_SELL, 0.1, Bid, 0, 0, Bid - inTP * _Point); // Продали с тейком.
  }
}


Результат бэктеста.

Нужно знать цены помеченных нулей. Когда речь касается SL/TP - их можно достать из комментария. А вот когда сам делаешь маркет-ордер (не зеленые нули на скрине) - откуда взять?


Это нужно для оценки проскальзываний. Например, в Терминале видите хорошую цену, жмете купить. Сделка прошла. Хотелось бы потом понять, насколько цена сделки отличается от той, что была в Терминале, когда нажимали. Такое ощущение, что MT5 не позволяет сделать простейшего анализа!


Или, например, хотите исследовать влияние функционала задержек Тестера на результат советника. Для этого нужно оценить, каким становилось проскальзывание. А этого не сделать. Точнее, у меня не получается.


Вопрос, как узнать цену маркет-ордера, если она в MqlTradeRequest задавалась ненулевой?

 
fxsaber:

Вопрос, как узнать цену маркет-ордера, если она в MqlTradeRequest задавалась ненулевой?

замена маркета на лимитку с фиксированным запасом не поможет?

 
SEM:

После обновления перестала работать функция

Не переключается на 0 график, в чем может быть ошибка?

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

//+------------------------------------------------------------------+
//| start function                                                   |
//+------------------------------------------------------------------+
void DeleteChart(void)
  {
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   bool errTemplate;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(TimeFrame!=PERIOD_CURRENT)
        {
         ChartSetSymbolPeriod(prevChart,ChartSymbol(prevChart),TimeFrame);
        }
      errTemplate=ChartApplyTemplate(prevChart,Template+".tpl");
      if(!errTemplate)
        {
         Print("Error ",ChartSymbol(prevChart),"-> ",GetLastError());
        }
      if(currChart<0)
         break;
      Print(i,ChartSymbol(currChart)," ID =",currChart);
      prevChart=currChart;
      i++;
     }
  }
//+------------------------------------------------------------------+
Причина обращения: