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

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

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

datetime date[]; // тут будем хранить данные времени баров, которые видны на экране
// если нужны другие данные баров, заводим соотв. массивы 

void DoWork(bool redrawAll = false)
{
    int visibleBars = 1, firstVisibleBars = 0;
    visibleBars = (int)ChartGetInteger(0, CHART_VISIBLE_BARS);
    firstVisibleBars = (int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);
    
    ArrayResize(date, visibleBars + 10); // выделяем память с запасом

    // так можно узнать масштаб графика, может пригодится
    int scale = (int)ChartGetInteger(0, CHART_SCALE);
    // копируем данные времен баров 
    if (CopyTime(Symbol(), Period(), startpos, visibleBars, date) == -1)
    {
        Print("Не удалось скопировать значения времени! Код ошибки = ", GetLastError());
        return;
    }

    //--- определим шаг, если надо работать с масштабом
    int step = 1;
    switch (scale)
    {
    case 0:
        step = 12;
        break;
    case 1:
        step = 6;
        break;
    case 2:
        step = 4;
        break;
    case 3:
        step = 2;
        break;
    }
    double priceMin = ChartGetDouble(0,CHART_PRICE_MIN,0);
    double priceMax = ChartGetDouble(0,CHART_PRICE_MAX,0);

    for (int i = visibleBars - 1; i >= 0; i--)
    {
        /*
        проходимся по всем видимым барам и ищем стрелки, искать можно путями:
        1. Изначально при создании стрелок надо формировать имена стрелок с привязкой ко времени, например
        string name = "UpArrow"  + IntegerToString(TimeCurrent());
        тогда тупо ищем стрелку с таким именем и далее двигаем, куда надо
        2. Заносить стрелки в структуры и класть их в хештаблицу, первый проще
        */
    }
    
}
 
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
     }

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

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

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