Построение перпендикуляра к линии скользяшей средней - страница 3

 
Yevhenii Levchenko #:

Да... максимальную и минимальную цену видимой области можно получить через ChartGetDouble

Я не знал этого, полагал, что масштаб чарта задаётся целыми числами от 0 до 4.
Спасибо.
 
Maxim Kuznetsov #:

в приведении к пикселям - да. ChartTimePriceToXY 

то есть визуальный масштаб более-менее получите. Но это не та метрика которую стоит использовать в торговле. Не торгуют-же по пикселям в самом деле :-) Основа - метрика пункт/бар или пункт/сек, это уже только самому, это не зависит от терминала и монитора

Да в том-то и дело, что торгуют по пикселям руками.
Под себя настраивают масштаб, линии рисуют и торгуют.
У меня работ универсальный под любую пару и ТФ, и поэтому для уточнения сигнала под масштаб экрана подстраиваться будет не правильно.

Идею с коэффициентами, независящими от масштаба поддерживаю. Но настройку стратегии все равно быстрее делать визуально, чем в голове вращать треугольники и прикидывать углы. Потому и придумываю, как это лучше рисовать.
 
Pavel Valentov #:
Я не знал этого, полагал, что масштаб чарта задаётся целыми числами от 0 до 4.
Спасибо.

Там есть и такое, но то немного другое. Там от 0 до 5. Через ChartGetInteger. А соотношение количества пипсов на бар - тоже шкала. И она не зависит от сжатия/растягивания графика по цене :)

 
Renat Akhtyamov #:
+

Спасибо, Николай!

скинь картинку в спреды, плиз ;)

там поясняющий пост к тебе....

Не понял, что за спреды. Это ветка какая-то?
 
Nikolai Semko #:
Не понял, что за спреды. Это ветка какая-то?
Наверное, речь про спрайты вместо видео.
 
Nikolai Semko #:
Не понял, что за спреды. Это ветка какая-то?
А понял. Речь про ветку "Рекорды плавающего спреда".
Нужно найти индикатор который писал несколько лет назад. Если найду, то сделаю. Речь про какую дату?
 
Pavel Valentov #:
Я не знал этого, полагал, что масштаб чарта задаётся целыми числами от 0 до 4.
Спасибо.

Необходимо очень аккуратно пользоваться функциями  ChartGetDouble,  ChartGetInteger, ChartTimePriceToXY.
Их нужно использовать только при наступлении события 
CHARTEVENT_CHART_CHANGE.
Иначе можно нарваться на жесткие лаги. 
Это, пожалуй, главный семантический косяк( в попытке сэкономить 1 цент MQ заплатили 10 баксов) платформы МТ5, чарт которой выглядит лагающим в сравнении с другими платформами конкурентов, написанных на более медленных языках.  

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

#include <Canvas\iCanvas_CB.mqh>

внутри этой библиотеки будет сформирован экземпляр W структуры Windows, которая будет автоматически обновляться при наступлении события CHARTEVENT_CHART_CHANGE.

W.dx_pix - это как раз масштаб. А именно расстояние в пикселях между барами (от 1 до 32 - 1, 2, 4, 8, 16, 32)

struct Window {
   long              ChartId;     // current window identifier
   uint              Color;       // window background color
   int               Width;       // window width
   int               Height;      // window height
   int               height[];    // sub_windows height
   int               Left_bar;    // number of the leftmost bar in the window
   double            Right_bar;   // number of the rightmost bar in the window
   double            Total_bars;  // the maximum number of bars in the window
   int               BarsInWind;  // number of visible bars in the window
   double            Y_min;       // The minimum value of the price in the window
   double            Y_max;       // The maximum value of the price in the window
   double            dy_pix;      // price change for one pixel
   int               dx_pix;      // changing the number of bars per pixel
   int               MouseX;      // coordinate X of the current position of the mouse pointer
   int               MouseY;      // coordinate Y of the current position of the mouse pointer
   double            MouseBar;    // the current bar position of the mouse pointer
   double            MousePrice;  // the current price of the mouse pointer
   datetime          MouseTime;   // the current time of the mouse pointer
   mouse_status      MouseStatus; // 5 values: NO_PRESSED, LEFT_BUTTON_PRESSED,RIGHT_BUTTON_PRESSED, LEFT_AND_RIGHT_BUTTONS_PRESSED, KEY_PRESSED
   int               IdEvent;     // id value of the last event
   long              lparam;      // last lparam
   int               MouseSubWin; // number of the subwindow in which the mouse pointer is located
   int               WindowsTotal;// total subwindows, including the main window
   int               SubWin;      // current subwindow
   int               DPI;         // Screen DPI
   bool              ActiveWin;   // Active window
   bool              ChangeActive;// if true ActiveWin was changed in last CHARTEVENT_CHART_CHANGE
   datetime          time[];      // array of opening time of all visible bars in the window
};
 
Nikolai Semko #:

Необходимо очень аккуратно пользоваться функциями  ChartGetDouble,  ChartGetInteger, ChartTimePriceToXY.
Их нужно использовать только при наступлении события 
CHARTEVENT_CHART_CHANGE.
Иначе можно нарваться на жесткие лаги. 
Это, пожалуй, главный семантический косяк( в попытке сэкономить 1 цент MQ заплатили 10 баксов) платформы МТ5, чарт которой выглядит лагающим в сравнении с другими платформами конкурентов, написанных на более медленных языках.  

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

#include <Canvas\iCanvas_CB.mqh>

внутри этой библиотеки будет сформирована экземпляр W структуры Windows, которая будет автоматически обновляться при наступлении события CHARTEVENT_CHART_CHANGE.

W.dx_pix - это как раз масштаб. А именно растояние в пикселях между барами (от 1 до 32 - 1, 2, 4, 8, 16, 32)

отключи фичу прямо сразу, пока не поздно ;-) только по запросув стиле 4ш-ного RefreshRates

слишком частое событие, торговля просто убьётся; учитывай что советники вообще в отдельных тредах и им не особо удобно+быстро получать всё тобой задуманное

 
Maxim Kuznetsov #:

отключи фичу прямо сразу, пока не поздно ;-) только по запросув стиле 4ш-ного RefreshRates

слишком частое событие, торговля просто убьётся; учитывай что советники вообще в отдельных тредах и им не особо удобно+быстро получать всё тобой задуманное

ну не так уж и частое. 
Только при новом баре или при обновлении максимума или минимума чарта, если юзер не дергает график. 
Но, впрочем, ты прав. Наверное имеет смысл добавить выключатель обновления W.


ЗЫ Тем более в режиме прихода нового бара, вся эта процедура обновления W занимает 1-10 милисекунд. Поэтому ничего не убьет. 

Разкомментируй строки 580,613,614 и увидишь

 
Nikolai Semko #:

ну не так уж и частое. 
Только при новом баре или при обновлении максимума или минимума чарта, если юзер не дергает график. 
Но, впрочем, ты прав. Наверное имеет смысл добавить выключатель обновления W.


ЗЫ Тем более в режиме прихода нового бара, вся эта процедура обновления W занимает 1-10 милисекунд. Поэтому ничего не убьет. 

+-во время прихода нового бара, обновлений high/low, начинается самая жара

графика это хорошо, но только чтобы не мешала основному делу

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