Alert уровней для Force Index

papaden

Trader
Sep 16, 2012
9
0
12
Доброго времени суток!
Есть индикатор Price Alert - он посылает письмо на почту если цена дошла до заведомо нужного Вам уровня!

Как его переделать на то, что бы он посылал письмо когда уровня достигает Force Index

Пример:
Force Index достиг уровня 0.05 - нужно что бы Alert послал письмо на почту!
СПАСИБО!!!
 

Enivid

Administrator
Staff member
Nov 30, 2008
18,604
1,366
144
Odesa
www.earnforex.com
Если для МТ4, то проще простого:
В коде найти все Ask и Bid и заменить их на iForce(NULL, 0, 13, MODE_SMA, PRICE_CLOSE, 0), где 13 - период (ставите какой вам нравится), MODE_SMA - тип скользящей средней для расчета индикатора, PRICE_CLOSE - тип цены для расчета.
 

papaden

Trader
Sep 16, 2012
9
0
12
Если для МТ4, то проще простого:
В коде найти все Ask и Bid и заменить их на iForce(NULL, 0, 13, MODE_SMA, PRICE_CLOSE, 0), где 13 - период (ставите какой вам нравится), MODE_SMA - тип скользящей средней для расчета индикатора, PRICE_CLOSE - тип цены для расчета.

спасибо добрый человек!


вот код
//+------------------------------------------------------------------+
//| PriceAlert.mq4 |
//| Copyright © 2009, www.earnforex.com |
//| Issues sound alerts when price reaches certain levels. |
//+------------------------------------------------------------------+
#property copyright "EarnForex.com"
#property link "http://www.earnforex.com"

#property indicator_chart_window

extern double SoundWhenPriceGoesAbove = 0;
extern double SoundWhenPriceGoesBelow = 0;
extern double SoundWhenPriceIsExactly = 0;
extern bool SendEmail = true; //If true e-mail is sent to the e-mail address set in your MT4. E-mail SMTP Server settings should also be configured in your MT4

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
if (SoundWhenPriceIsExactly > 0)
{
ObjectCreate("SoundWhenPriceIsExactly", OBJ_HLINE, 0, Time[0], SoundWhenPriceIsExactly);
ObjectSet("SoundWhenPriceIsExactly", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("SoundWhenPriceIsExactly", OBJPROP_COLOR, Yellow);
ObjectSet("SoundWhenPriceIsExactly", OBJPROP_WIDTH, 1);
}
if (SoundWhenPriceGoesAbove > 0)
{
ObjectCreate("SoundWhenPriceGoesAbove", OBJ_HLINE, 0, Time[0], SoundWhenPriceGoesAbove);
ObjectSet("SoundWhenPriceGoesAbove", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("SoundWhenPriceGoesAbove", OBJPROP_COLOR, LightGreen);
ObjectSet("SoundWhenPriceGoesAbove", OBJPROP_WIDTH, 1);
}
if (SoundWhenPriceGoesBelow > 0)
{
ObjectCreate("SoundWhenPriceGoesBelow", OBJ_HLINE, 0, Time[0], SoundWhenPriceGoesBelow);
ObjectSet("SoundWhenPriceGoesBelow", OBJPROP_STYLE, STYLE_SOLID);
ObjectSet("SoundWhenPriceGoesBelow", OBJPROP_COLOR, LightCoral);
ObjectSet("SoundWhenPriceGoesBelow", OBJPROP_WIDTH, 1);
}
return(0);
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("SoundWhenPriceIsExactly");
ObjectDelete("SoundWhenPriceGoesAbove");
ObjectDelete("SoundWhenPriceGoesBelow");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if ((Ask > SoundWhenPriceGoesAbove) && (SoundWhenPriceGoesAbove > 0))
{
Alert("Price above the alert level.");
PlaySound("alert.wav");
SendMail("Price for " + Symbol() + " above the alert level " + Ask, "Price for " + Symbol() + " reached " + Ask + " level, which is above your alert level of " + SoundWhenPriceGoesAbove);
ObjectDelete("SoundWhenPriceGoesAbove");
SoundWhenPriceGoesAbove = 0;
}
if ((Bid < SoundWhenPriceGoesBelow) && (SoundWhenPriceGoesBelow > 0))
{
Alert("Price below the alert level.");
PlaySound("alert.wav");
SendMail("Price for " + Symbol() + " below the alert level " + Bid, "Price for " + Symbol() + " reached " + Bid + " level, which is below your alert level of " + SoundWhenPriceGoesBelow);
ObjectDelete("SoundWhenPriceGoesBelow");
SoundWhenPriceGoesBelow = 0;
}
if ((Bid == SoundWhenPriceIsExactly) || (Ask == SoundWhenPriceIsExactly))
{
Alert("Price is exactly at the alert level.");
PlaySound("alert.wav");
SendMail("Price for " + Symbol() + " exactly at the alert level " + Ask, "Price for " + Symbol() + " reached " + Ask + "/" + Bid + " level, which is exactly your alert level of " + SoundWhenPriceIsExactly);
ObjectDelete("SoundWhenPriceIsExactly");
SoundWhenPriceIsExactly = 0;
}
}
//+------------------------------------------------------------------+

менять то, что я выделил черным? (а то я совсем зеленый)
 

papaden

Trader
Sep 16, 2012
9
0
12
Если для МТ4, то проще простого:
В коде найти все Ask и Bid и заменить их на iForce(NULL, 0, 13, MODE_SMA, PRICE_CLOSE, 0), где 13 - период (ставите какой вам нравится), MODE_SMA - тип скользящей средней для расчета индикатора, PRICE_CLOSE - тип цены для расчета.

здорово!!!!
получилось!!! ))))) СПАСИБО
 

papaden

Trader
Sep 16, 2012
9
0
12
Если для МТ4, то проще простого:
В коде найти все Ask и Bid и заменить их на iForce(NULL, 0, 13, MODE_SMA, PRICE_CLOSE, 0), где 13 - период (ставите какой вам нравится), MODE_SMA - тип скользящей средней для расчета индикатора, PRICE_CLOSE - тип цены для расчета.

Хм.... странно работает как то ... сначала были сигналы... теперь тишина..
вот что я сделал в коде

на м1 работает , на м5 нет...
теперь и на м1 не работает... (( странно
MQL4:
//+------------------------------------------------------------------+
//|                                                   PriceAlert.mq4 |
//|                              Copyright © 2009, [url]www.earnforex.com[/url] |
//|           Issues sound alerts when price reaches certain levels. |
//+------------------------------------------------------------------+
#property copyright "EarnForex.com"
#property link      "http://www.earnforex.com"
 
#property indicator_chart_window
 
extern double SoundWhenPriceGoesAbove = 0;
extern double SoundWhenPriceGoesBelow = 0;
extern double SoundWhenPriceIsExactly = 0;
extern bool SendEmail = true; //If true e-mail is sent to the e-mail address set in your MT4. E-mail SMTP Server settings should also be configured in your MT4
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() 
{
   if (SoundWhenPriceIsExactly > 0)
   {
      ObjectCreate("SoundWhenPriceIsExactly", OBJ_HLINE, 0, Time[0], SoundWhenPriceIsExactly);
      ObjectSet("SoundWhenPriceIsExactly", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("SoundWhenPriceIsExactly", OBJPROP_COLOR, Yellow);
      ObjectSet("SoundWhenPriceIsExactly", OBJPROP_WIDTH, 1);
   }
   if (SoundWhenPriceGoesAbove > 0)
   {
      ObjectCreate("SoundWhenPriceGoesAbove", OBJ_HLINE, 0, Time[0], SoundWhenPriceGoesAbove);
      ObjectSet("SoundWhenPriceGoesAbove", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("SoundWhenPriceGoesAbove", OBJPROP_COLOR, LightGreen);
      ObjectSet("SoundWhenPriceGoesAbove", OBJPROP_WIDTH, 1);
   }
   if (SoundWhenPriceGoesBelow > 0)
   {
      ObjectCreate("SoundWhenPriceGoesBelow", OBJ_HLINE, 0, Time[0], SoundWhenPriceGoesBelow);
      ObjectSet("SoundWhenPriceGoesBelow", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("SoundWhenPriceGoesBelow", OBJPROP_COLOR, LightCoral);
      ObjectSet("SoundWhenPriceGoesBelow", OBJPROP_WIDTH, 1);
   }
   return(0);
}
 
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   ObjectDelete("SoundWhenPriceIsExactly");
   ObjectDelete("SoundWhenPriceGoesAbove");
   ObjectDelete("SoundWhenPriceGoesBelow");
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if ((iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) > SoundWhenPriceGoesAbove) && (SoundWhenPriceGoesAbove > 0))
   {
      Alert("FI достиг уровня");
      PlaySound("alert.wav");
      SendMail("Индекс силы по " + Symbol() +  " достиг уровня " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0), "Индекс силы по  " + Symbol() +  " reached " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) + " достиг уровня " + SoundWhenPriceGoesAbove);
      ObjectDelete("SoundWhenPriceGoesAbove");
      SoundWhenPriceGoesAbove = 0;
   }
   if ((iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) < SoundWhenPriceGoesBelow) && (SoundWhenPriceGoesBelow > 0))
   {
      Alert("FI достиг уровня");
      PlaySound("alert.wav");
      SendMail("Индекс силы по " + Symbol() +  " достиг уровня " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0), "Индекс силы по " + Symbol() +  " reached " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) + " достиг уровня " + SoundWhenPriceGoesBelow);
      ObjectDelete("SoundWhenPriceGoesBelow");
      SoundWhenPriceGoesBelow = 0;
   }
   if ((iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) == SoundWhenPriceIsExactly) || (iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) == SoundWhenPriceIsExactly))
   {
      Alert("FI достиг уровня");
      PlaySound("alert.wav");
      SendMail("Индекс силы по  " + Symbol() +  " достиг уровня " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0), "Индекс силы по " + Symbol() +  " reached " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) + "/" + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) + " достиг уровня " + SoundWhenPriceIsExactly);
      ObjectDelete("SoundWhenPriceIsExactly");
      SoundWhenPriceIsExactly = 0;
   }
}
//+------------------------------------------------------------------+
 
Last edited by a moderator:

Enivid

Administrator
Staff member
Nov 30, 2008
18,604
1,366
144
Odesa
www.earnforex.com
Он - одноразовый. Когда сигнал отсылается, надо заново, его "заряжать". Точнее там возможны 3 сигнала (больше, меньше, равно) - вот они 3 отыгрывают и все, надо устанавливать входные параметры заново. Если хотите многоразовость - удаляйте эти строки:
MQL4:
SoundWhenPriceGoesAbove = 0;
SoundWhenPriceGoesBelow = 0;
SoundWhenPriceIsExactly = 0;
 
Last edited:

papaden

Trader
Sep 16, 2012
9
0
12
удалил - компиляцию не проходит... а если значения установить до 10 ? он до 10 раз будет срабатывать?
 

papaden

Trader
Sep 16, 2012
9
0
12
Нет :).
Вы, наверное, не то удалили. Это отдельные 3 строки в функции start(). Они там не подряд идут.

точно! ))))
удалил - сейчас буду пробовать... СПАСИБО!
но вот заметил, что отрицательный уровень индикатор не ловит - из 30 сигналов в почту все положительные
может что то со знаком "-" не так
код...
MQL4:
//+------------------------------------------------------------------+
//|                                                   PriceAlert.mq4 |
//|                              Copyright © 2009, [url]www.earnforex.com[/url] |
//|           Issues sound alerts when price reaches certain levels. |
//+------------------------------------------------------------------+
#property copyright "EarnForex.com"
#property link      "http://www.earnforex.com"
 
#property indicator_chart_window
 
extern double SoundWhenPriceGoesAbove = 0.012;
extern double SoundWhenPriceGoesBelow =-0.012;
extern double SoundWhenPriceIsExactly = 0;
extern bool SendEmail = true; //If true e-mail is sent to the e-mail address set in your MT4. E-mail SMTP Server settings should also be configured in your MT4
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() 
{
   if (SoundWhenPriceIsExactly > 0)
   {
      ObjectCreate("SoundWhenPriceIsExactly", OBJ_HLINE, 0, Time[0], SoundWhenPriceIsExactly);
      ObjectSet("SoundWhenPriceIsExactly", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("SoundWhenPriceIsExactly", OBJPROP_COLOR, Yellow);
      ObjectSet("SoundWhenPriceIsExactly", OBJPROP_WIDTH, 1);
   }
   if (SoundWhenPriceGoesAbove > 0)
   {
      ObjectCreate("SoundWhenPriceGoesAbove", OBJ_HLINE, 0, Time[0], SoundWhenPriceGoesAbove);
      ObjectSet("SoundWhenPriceGoesAbove", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("SoundWhenPriceGoesAbove", OBJPROP_COLOR, LightGreen);
      ObjectSet("SoundWhenPriceGoesAbove", OBJPROP_WIDTH, 1);
   }
   if (SoundWhenPriceGoesBelow > 0)
   {
      ObjectCreate("SoundWhenPriceGoesBelow", OBJ_HLINE, 0, Time[0], SoundWhenPriceGoesBelow);
      ObjectSet("SoundWhenPriceGoesBelow", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("SoundWhenPriceGoesBelow", OBJPROP_COLOR, LightCoral);
      ObjectSet("SoundWhenPriceGoesBelow", OBJPROP_WIDTH, 1);
   }
   return(0);
}
 
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
   ObjectDelete("SoundWhenPriceIsExactly");
   ObjectDelete("SoundWhenPriceGoesAbove");
   ObjectDelete("SoundWhenPriceGoesBelow");
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   if ((iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) > SoundWhenPriceGoesAbove) && (SoundWhenPriceGoesAbove > 0))
   {
      Alert("Price above the alert level.");
      PlaySound("alert.wav");
      SendMail("Price for " + Symbol() +  " above the alert level " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0), "Price for " + Symbol() +  " reached " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) + " level, which is above your alert level of " + SoundWhenPriceGoesAbove);
      ObjectDelete("SoundWhenPriceGoesAbove");
 
   }
   if ((iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) < SoundWhenPriceGoesBelow) && (SoundWhenPriceGoesBelow > 0))
   {
      Alert("Price below the alert level.");
      PlaySound("alert.wav");
      SendMail("Price for " + Symbol() +  " below the alert level " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0), "Price for " + Symbol() +  " reached " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) + " level, which is below your alert level of " + SoundWhenPriceGoesBelow);
      ObjectDelete("SoundWhenPriceGoesBelow");
 
   }
   if ((iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) == SoundWhenPriceIsExactly) || (iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) == SoundWhenPriceIsExactly))
   {
      Alert("Price is exactly at the alert level.");
      PlaySound("alert.wav");
      SendMail("Price for " + Symbol() +  " exactly at the alert level " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0), "Price for " + Symbol() +  " reached " + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) + "/" + iForce(NULL, 0, 12, MODE_EMA, PRICE_CLOSE, 0) + " level, which is exactly your alert level of " + SoundWhenPriceIsExactly);
      ObjectDelete("SoundWhenPriceIsExactly");
 
   }
}
//+------------------------------------------------------------------+
 
Last edited by a moderator:

papaden

Trader
Sep 16, 2012
9
0
12
Вот человек написал на другом форуме (то же откликнулся - хороший человек)
код
MQL4:
#property indicator_chart_window
 
extern int MyPeriod=12;
extern int MyMethod=1; // смотрите [url]http://docs.mql4.com/ru/constants/movings[/url]
extern int MyApplied_price=0;
extern int MyShift=0;
//1
extern double MyLowIF1=0.01;
extern double MyHighIF1=0.02;
//2
extern double MyLowIF2=-0.02;
extern double MyHighIF2=-0.01;
 
double f;
 
int init() {}
int deinit() {}
 
int start()
{
f=iForce(NULL,0,MyPeriod, MyMethod, MyApplied_price, MyShift);
//1
if ((f>=MyLowIF1) && (f<=MyHighIF1))
   {
   SendMail("из Вашего MT-4", "iForce достиг установленного диапазона 1");
   }
//2
if ((f>=MyLowIF2) && (f<=MyHighIF2))
   {
   SendMail("из Вашего MT-4", "iForce достиг установленного диапазона 2");
   }
}
так вот тут отрицательные зоны ловит, но письмо приходит не одно , а постоянно каждую секунду.... пока индюк не удалишь ... не удобно... как сделать что бы письмо приходило одно ? а не 800 тышь ))))))
 
Last edited by a moderator:

papaden

Trader
Sep 16, 2012
9
0
12
может не присылает со знаком минус из-за этого?
if (SoundWhenPriceGoesBelow > 0)
попробую изменить на
if (SoundWhenPriceGoesBelow < 0)
 
Last edited:

papaden

Trader
Sep 16, 2012
9
0
12
может не присылает со знаком минус из-за этого?
if (SoundWhenPriceGoesBelow > 0)
попробую изменить на
if (SoundWhenPriceGoesBelow < 0)

да - дело было в этом!


Enivid - спасибо!!!
Вопрос закрыт - индикатор настроен!
 
Last edited: