Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Просто если бы была функция типа GetText, включать/выключать звук можно бы было меняя прямо на графике ON на OFF, а так надо для этого лезть в параметры индикатора. Например правый клик на графике, "Список индикаторов", "Правка". Самый быстрый способ заставить его на время заткнуться - утащить мышкой уровень подальше от текущей цены.
Да, поскольку звук издаётся только на тиках, должны идти котировки, естественно.
Можно ещё выставить какой-нибудь значок и анализировать его положение относительно линии и текущ. цены: выше-ниже. В зависимости от сочетания разрешать/запрещать звук. Так можно регулировать звук, не перемещая сам уровень.
Можно ещё выставить какой-нибудь значок и анализировать его положение относительно линии и текущ. цены: выше-ниже. В зависимости от сочетания разрешать/запрещать звук. Так можно регулировать звук, не перемещая сам уровень.
Код новой версии прилагается. Вот только в отсутствие тиков толком проверить не могу.
//+------------------------------------------------------------------+ //| Level_Alarm_GUI.mq4 | //| Candid | //| likh@yandex.ru | //+------------------------------------------------------------------+ #property copyright "Candid" #property link "likh@yandex.ru" #property indicator_chart_window #include <stdlib.mqh> //---- input parameters extern bool Play=FALSE; extern double Level1=0; //extern double Level2=0; extern int Range=10; extern string Sound="alert.wav"; double dRange; double predRange; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators dRange = NormalizeDouble(Range*Point/2,Digits); predRange = dRange; if(!ObjectCreate("label_object", OBJ_LABEL, 0, 0, 0)) { Print("error: can't create label_object! code #",GetLastError()); return(0); } ObjectSet("label_object", OBJPROP_XDISTANCE, 5); ObjectSet("label_object", OBJPROP_YDISTANCE, 15); ObjectSetText("label_object", "Level Alarm OFF", 10, "Times New Roman", Red); if(!ObjectCreate("switch", OBJ_LABEL, 0, 0, 0)) { Print("error: can't create label_object! code #",GetLastError()); return(0); } ObjectSet("switch", OBJPROP_XDISTANCE, 100); ObjectSet("switch", OBJPROP_YDISTANCE, 15); ObjectSetText("switch", "8", 16, "Wingdings", Red); ObjectCreate( "Alarm_Level", OBJ_HLINE, 0, 0, Level1); ObjectSet( "Alarm_Level", OBJPROP_COLOR, Red); ObjectSet( "Alarm_Level", OBJPROP_WIDTH, 5 ); ObjectCreate( "Alarm_High", OBJ_HLINE, 0, 0, Level1+dRange); ObjectSet( "Alarm_High", OBJPROP_COLOR, Red ); ObjectSet( "Alarm_High", OBJPROP_STYLE, STYLE_DOT); ObjectCreate( "Alarm_Low", OBJ_HLINE, 0, 0, Level1-dRange); ObjectSet( "Alarm_Low", OBJPROP_COLOR, Red ); ObjectSet( "Alarm_Low", OBJPROP_STYLE, STYLE_DOT); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjectDelete("label_object"); ObjectDelete("switch"); ObjectDelete("Alarm_Level"); ObjectDelete("Alarm_High"); ObjectDelete("Alarm_Low"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- dRange = MathAbs(NormalizeDouble(ObjectGet( "Alarm_High", OBJPROP_PRICE1),Digits) - Level1); if (dRange == predRange) dRange = MathAbs(Level1 - NormalizeDouble(ObjectGet( "Alarm_Low", OBJPROP_PRICE1),Digits)); predRange = dRange; Level1 = NormalizeDouble(ObjectGet( "Alarm_Level", OBJPROP_PRICE1),Digits); ObjectSet( "Alarm_Level", OBJPROP_PRICE1, Level1); ObjectSet( "Alarm_High", OBJPROP_PRICE1, Level1+dRange); ObjectSet( "Alarm_Low", OBJPROP_PRICE1, Level1-dRange); if(ObjectGet("switch",OBJPROP_XDISTANCE) < 100 ) Play = !Play; ObjectSet("switch", OBJPROP_XDISTANCE, 100); ObjectSet("switch", OBJPROP_YDISTANCE, 15); if (Play) { ObjectSetText("label_object", "Level Alarm ON", 10, "Times New Roman", Red); if (Bid >= Level1 - dRange && Bid <= Level1 + dRange) { PlaySound(Sound); } // if (Bid >= Level2 - dRange && Bid <= Level2 + dRange) { // PlaySound(Sound); // } } else { ObjectSetText("label_object", "Level Alarm OFF", 10, "Times New Roman", Red); } //---- return(0); } //+------------------------------------------------------------------+1)в вилах Эндрюса не ставятся дополнительные параллельные уровни (в настройках вил Эндрюса это попросту отсутствует)
2)дуги фибоначчи зачем там масштаб ? нельзя ли сделать как в tradedesk 3.31
3)добавить линии поддержки и сопротивления с надписями ну допустим линию RESISTANCE - сделать синей жирной с надписью RESISTANCE, а SUPPORT - красной жирной с надписью SUPPORT.
4)подправить временные циклы так, чтобы на линиях были видны числа, например 0,7,14,21,28 (0,4,8,12,16) (на самих линия-не внизу)
5)добавить ломаную линию (для построения схем)
6)добавить эллипс фибоначчи
7)добавить спираль фибоначчи
8)добавить квадрат ганна
9)добавить линии Квадрантов
10)добавить уровни Тироне
11)добавить канал стандартной ошибки
12)добавить регрессионный канал Раффа
добавить виды отображения цен
1) ступени
2) Point and Figure
3) Renko
4) Kagi
5) Three Line Break
6) Equivolume
7) Candle Volume
8) Market Profile
tradedesk 3.31 - там можно посмотреть реализацию