Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 484

Artem Prischepa:
Друзья, у меня вопрос больше касательно настройки сигнала. 
Проблема такая : когда у поставщика ордера закрываются- у подписчика они продолжают держаться. Видимо из за разницы в спреде. Как сделать, что бы сделки подписчика закрывались мгновенно при их закрытии у поставщика ? Какую настройку следует изменить?

Сделка должна также закрыться почти мгновенно. Вопросы:

  1. А у подписчика терминал в это время включён?
  2. Приложите, пожалуйста, файл журнала терминала за проблемный день.
Alexey Volchanskiy:

Так..я нашел свой старый индюк и вырезал из него нужное. Писать за вас я не буду)), но для толчка пойдет. Я там комментов добавил, имена переменных понятны из названий.

Дополнение, в этой строке надо наверное поставить номер подокна индикатора? Просто я не в курсе, что точно надо

ChartGetDouble(0,CHART_PRICE_MIN,0);
Alexey Volchanskiy:

Дополнение, в этой строке надо наверное поставить номер подокна индикатора? Просто я не в курсе, что точно надо

Оооопс, расссеянный с утра, не скопипастил в коде обработку события графика

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    if(id == CHARTEVENT_CHART_CHANGE)
    {
        DoWork(true);
        ChartRedraw();
    }    
}
Alexey Volchanskiy:

Так..я нашел свой старый индюк и вырезал из него нужное. Писать за вас я не буду)), но для толчка пойдет. Я там комментов добавил, имена переменных понятны из названий.

Спасибо Алексей за помощь!

А куда прикручивать шаг, и вообще его функционал, о чём?

    //--- определим шаг, если надо работать с масштабом
    int step = 1;

И вот это:

        2. Заносить стрелки в структуры и класть их в хештаблицу, первый проще

я никогда не делал. Если можно, дайте пожалуйста пример кода, чтобы можно было разобраться, понять и применить

Alexey Volchanskiy:

Оооопс, расссеянный с утра, не скопипастил в коде обработку события графика

Мне бы Вашу рассеянность вместе со знаниями))
Всё достаточно просто, когда знаешь. Стучи по клавишам, лишь бы желание было и возможности позволяли
А когда не знаешь и роешь..., вот ту полная ж... А если ещё и подсказок, вообще кранты, никаких нервов не хватит
Так что спасибо Вам за подсказки!!!!
Leo59:
Спасибо Алексей за помощь!

А куда прикручивать шаг, и вообще его функционал, о чём?

И вот это:

я никогда не делал. Если можно, дайте пожалуйста пример кода, чтобы можно было разобраться, понять и применить

Когда мы график сжимаем по горизонтали (клавиши +/-), у него меняется масштаб и иногда графические объекты могут налезать друг на друга. Я привел этот код на всякий случай, как масштаб определить.

Код с хешем не приведу - его нет, просто мысль возникла. Лучше сделать вариант 1, проще.

По поводу знаний - я всем, кто обучается, советую читать хелп на досуге, просто попрыгать по разделам, где что лежит. То есть не надо его зубрить, был у меня такой зубрилка, ни к чему хорошему ни привело. Надо просто хотя бы примерно знать, что есть такие-то... ну хотя бы разделы/подразделы. Тогда при возникновении вопросов в голове прокрутятся шестеренки и возникнет направление поиска. В принципе, справка неидеальна, но вполне нормальная, примеров много. 

Потому что сам язык-то простой, его изучить нетрудно. Трудности возникают именно с API, где что искать и как применять 

Здраствуйте!

На первый взгляд, задача простая, как три копейки. НО!....
Есть линия любого осциллятора в индикаторном окне, которая болтается относительно "0" с различной амплитудой.
Собственно, задача:
- при пересечении "0" снизу вверх, нарисовать стрелку у нижней границы индикаторного окна,
- при пересечении "0" сверху вниз, нарисовать стрелку у верхней границы индикаторного окна,
- при самомасштабировании графика осциллятора в индикаторном окне, стрелки должны автоматически оставаться у своих границ индикаторного окна.
Т.е. прокручивая чарт по истории взад-вперёд или меняя его горизонтальный масштаб, стрелки всё время должны автоматически оставаться у своих границ индикаторного окна.

Большая просьба, советов не давать, "помогите материально")). Приложите пожалуйста работающий код, реализующий такую функцию, или ссылку на таковой.

Заранее, спасибо!

Помогите пожалуйста разобраться!

Мне нужно найти максимальную просадку на каждом (пусть будет) дне (запись в файл происходит раз в день) - терминал MT4.

Максимальная просадка - это расстояние на графике от пика до текущей просадки средств, а просадка средств это текущий убыток.

Я написал такой код

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew==AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

Но на каких то графиках показывает верно, а на каких нет - при этом визуально графики однотипны.

Видимо я допустил ошибку в коде или логике, но не могу понять какую.

-Aleks-:

Помогите пожалуйста разобраться!

Мне нужно найти максимальную просадку на каждом (пусть будет) дне (запись в файл происходит раз в день) - терминал MT4.

Максимальная просадка - это расстояние на графике от пика до текущей просадки средств, а просадка средств это текущий убыток.

Я написал такой код

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew==AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

Но на каких то графиках показывает верно, а на каких нет - при этом визуально графики однотипны.

Видимо я допустил ошибку в коде или логике, но не могу понять какую.

На сколько я знаю, надо считать от пика Equity и до ямы Equity, а не от баланса, который очень смягчает картину просадок!

И пользуйтесь, пожалуйста, кнопкой SRC, в не какой-то другой, чтобы в ответе не повторялся Ваш код, загромождая сайт!

Boris:

На сколько я знаю, надо считать от пика Equity и до ямы Equity, а не от баланса, который очень смягчает картину просадок!

И пользуйтесь, пожалуйста, кнопкой SRC, в не какой-то другой, чтобы в ответе не повторялся Ваш код, загромождая сайт!

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

 

Что такое SRC я не знаю, а поэтому и не использую.