Скачать MetaTrader 5

Индикатор : Как сделать переменную в индикаторе меняемую линией двигаемой руками (MT4)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Хочешь стать известным разработчиком? Выполняй заказы трейдеров в сервисе Фриланс!
Yurij Izyumov
16795
Yurij Izyumov 2016.01.30 19:17 

Доделал и поправил найденный индикатор MultiInstrument, который отображает на одном графике до 8 выбранных валют, их взаимное движение (первая валюта будет та на которой открыт график)

так же туда вставил возможность отображать в любой момент времени историю - так сказать например указываешь SdvigSvechi = 200;

и он покажет историю 200 свечей назад, так же есть линия вертикальная которая рисуется на этом уровне SdvigSvechi

но смотреть историю неудобно из-за того что надо смотреть много участков, а что бы изменить SdvigSvechi надо каждый раз лезть в настройки

кто нибудь в курсе ? можно ли имея эту линию взять например её мышкой и утащить туда куда надо и что бы от неё поменялась сама переменная SdvigSvechi и график перерисовался, что бы каждый раз не лазить в настройки

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

 

Maxim Kuznetsov
9819
Maxim Kuznetsov 2016.01.30 19:24  

нарисовать объект OBJ_VLINE, далее в обработчике OnChartEvent ловить события его изменения (CHARTEVENT_OBJECT_DRAG,CHARTEVENT_OBJECT_ENDEDIT) и от его координаты менять заветную SdvigSvechi и перерисовывать график.

писать немного, но за перекур не делается :-)

Yurij Izyumov
16795
Yurij Izyumov 2016.01.30 20:53  

Максим вы мой спаситель, благодарю

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam )  // параметр события типа string
{
    if(id==CHARTEVENT_OBJECT_DRAG && sparam=="StartLine"){
       
       datetime SdvigTime = ObjectGetInteger(0,"StartLine",OBJPROP_TIME,0);
       SdvigSvechi = iBarShift(Symbol(),0,SdvigTime);
       //Print(id," | ",lparam," | ",dparam," | ",sparam," || ",SdvigSvechi);
       ObjectSetInteger(0,"StartLine",OBJPROP_TIME,SdvigTime);
       start();
    }
 
 return;
}

 добавил, вроде работает

Andrey Khatimlianskii
56198
Andrey Khatimlianskii 2016.02.03 21:20  
Если нужно, чтоб перерисовывалось не только по тику, то придется еще пошаманить. Если что - спрашивайте, подскажу.
Yurij Izyumov
16795
Yurij Izyumov 2016.02.28 13:04  

а тоже самое только для MQL5 ?  переписываю на MQL5 индюк  , но вот то что я сделал там при изменении линии - для перерисовки всего графика - запускается просто тупо start() , в mql5 такое не прокатывает , т.к. там OnCalculate() которое повторно не вызвать

а что б использовать ChartRedraw(0) надо прежде пересчитать вообще весь индюк как то, есть ли как ой то способ что б индикатор перерисовался полностью без ChartRedraw ?

Файлы:
Andrey Khatimlianskii
56198
Andrey Khatimlianskii 2016.02.28 14:55  
Juriy Iziymov:

а тоже самое только для MQL5 ?  переписываю на MQL5 индюк  , но вот то что я сделал там при изменении линии - для перерисовки всего графика - запускается просто тупо start() , в mql5 такое не прокатывает , т.к. там OnCalculate() которое повторно не вызвать

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