как отмасштабировать (по отношению друг к другу) два индикатора в одном окне(seperare_window) особенно в офлайне ?

 

на конкретики

Stochastic

и

MA

Стохастик разворачиваем от нуля до ста процентов, его строю первым и на его фоне МА

а вот МА пытаюсь масштабировать ...

в статике - без проблем, а вот при прокрутке окна ..., МА может уползти сильно вверх или вниз и сжаться

поскольку минимакс стохастика известен заранее, вроде все просто

от первого бара на количестве баров в окне вычисляем мин и макс, считаем коэффициентик и на него множим МА

но во первых не всегда честно это считается

во вторых это не пересчитывается в офлайне, поскольку все это в starte ...

в ините по циклу со слипом - что то не охота :) да и попытка была неудачной - количество циклов ограничил сотней тысяч :) и на все время отработки индикатор ваабще не отрисовывался...

вот кусок с пояснениями чего хотел добиться

int start()
{
int
i, // Индекс бара
Counted_bars; // Количество просчитанных баров

//--------------------------------------------------------------------

Counted_bars=IndicatorCounted(); // Количество просчитанных баров
i=Bars-Counted_bars-1; // Индекс первого непосчитанного
if (i>History-1) // Если много баров то ..
i=History-1; // ..рассчитывать заданное колич.

if (First_Visible_Bar != WindowFirstVisibleBar()) если первый индицируемый бар изменился, считаем что окно "прокрутили"
i=History-1; соответственно меняем количество перерисовываемых значений

K_Hi =High[iHighest(NULL,0,MODE_HIGH, WindowBarsPerChart(),WindowFirstVisibleBar())]; вычисляем макcимальное значение по паре (потому как МА далеко не уйдет, ИМХО)
K_Low=Low [iLowest (NULL,0,MODE_LOW, WindowBarsPerChart(),WindowFirstVisibleBar())]; вычисляем минимальное значение по паре (потому как МА далеко не уйдет, ИМХО

K_Ind=(100-20)/(K_Hi-K_Low); считаем коэффициент, с учетом ограничения с верху значением 80


while(i>=0) // Цикл по непосчитанным барам
{

Line_0[i]= iStochastic(NULL,0,K_Period,D_Period,Slowing,MODE_SMA,0,MODE_MAIN,i); стохастик
Line_1[i]= iStochastic(NULL,0,K_Period,D_Period,Slowing,MODE_SMA,0,MODE_SIGNAL,i); еще линия

Line_2[i]=hi_line; верхняя линия скажем 80 %
Line_3[i]=low_line; нижняя линия ну например 10%

Line_4[i]=low_line-Zone; 10 процентная зона от 10 до 20 %
Line_5[i]=hi_line+Zone; 10 процентная зона от 80 до 90%

Line_6[i]=(iMA(NULL,0,Period_MA_fast,0,MODE_EMA,PRICE_CLOSE,i)-K_Low)*K_Ind+10; а вот это уже пошли МА с коэффициентом масштабируемости и чуть поднята от нуля
Line_7[i]=(iMA(NULL,0,Period_MA_slow,0,MODE_EMA,PRICE_CLOSE,i)-K_Low)*K_Ind+10; вторая МА так же

i--; // Расчёт индекса следующего бара
}


First_Visible_Bar=WindowFirstVisibleBar(); перечитываем номер первого бар, хотя это можно под if вверху занести
//----
return(0);
}

помогайте - своих мозгов не хвыатает, чую что секрет есть :)

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

 

Только что сам спрашивал. :)

int WindowBarsPerChart(    ) - покажет количество баров в окне. Дальше - дело техники.

 

Недавно написал программу.

Запускаете MTPump. Оно находит все окна метатрейдера, окна инструментов и начинает их обновлять каждые 0.1 секунды.

... И start() будет выполняться гарантированно.

Можете скриптик навешивать. Но он будет валиться при смене инструмента и таймфрейма

и его на каждое окно нужно вешать.

#define WM_COMMAND   0x0111
#include <WinUser32.mqh> // Заголовочный файл библиотеки "user32.dll" функций API Windows XP.
void start()
{
    int HandlWindow=WindowHandle(Symbol(),Period());        
    for(;;)
    {
        if(IsStopped()) {return;}
		PostMessageA (HandlWindow, WM_COMMAND, 33324, 0); // Обновляем окно.
		PostMessageA (HandlWindow, WM_COMMAND, 2, 1); // Эммуляция тика для эксперта.
        Sleep(300);
        WindowRedraw();
    }
}

Эк оно строковый литерал-то внутри коммента нашло :-).

Файлы:
 

А на деле- просто добавьте два индикатора порознь.

И все будет масштабироваться само.

 
jartmailru писал(а) >>

А на деле- просто добавьте два индикатора порознь.

И все будет масштабироваться сам

а КАК ???, в одно окно ?

что то у меня не получается ...

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

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

 
IlyaA писал(а) >>

Только что сам спрашивал. :)

int WindowBarsPerChart( ) - покажет количество баров в окне. Дальше - дело техники.

кто то из нас двоих чего то не понял :)

см по тектсу, я именно так и определяю количество баров, но проблема то в другом

1. в офлайне это не работает

2. все одно врет, и чем дальше в лево тем сильнее ...

т.е. ЧТО использовать мы вроде выяснили, осталось выяснить почему оно не работает :)

 
serval >>:

а КАК ???, в одно окно ?

что то у меня не получается ...

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

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

Видео закачивал вот сюда: https://forum.mql4.com/ru/26298

Посмотрите.

Просто перетягиванием.

И у каждого графика будет работать режим растягивания видимых баров на все окно.

 

как отмасштабировать (по отношению друг к другу) два индикатора в одном окне(seperare_window) особенно в офлайне ?

Делите каждый индикатор на собственное МО за одинаковый период, и значения будут нормированными.

 
jartmailru писал(а) >>

Недавно написал программу.

Запускаете MTPump. Оно находит все окна метатрейдера, окна инструментов и начинает их обновлять каждые 0.1 секунды.

... И start() будет выполняться гарантированно.

Можете скриптик навешивать. Но он будет валиться при смене инструмента и таймфрейма

и его на каждое окно нужно вешать.

Эк оно строковый литерал-то внутри коммента нашло :-).

Спасибо - взял, попробую ...

 
WPR от одного индикатора и WPR от второго, с периодом равным количеству видимых в окне баров.
Причина обращения: