Price Alert для FORCE INDEX - страница 2

 
papaden:
Если значения индикатора лежат в диапазоне между MyLowIF1 и MyHighIF1, т.е. между 0.49 включительно и 0.51 включительно, то должна выполниться процедура SendMail.
 
ясно.... от всей души спасибо - завтра попробую
 

((( ПИСЬМА НЕ ПРИХОДЯТ....

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

в журнале пишет

2012.09.17 09:07:27 Custom indicator PriceAlert2 EURUSD,M5: loaded successfully (с восклицательным знаком) :(

 

)))) теперь приходят!!!

СПАСИБО!!!!!!!!!!!!!!!!

 
//+------------------------------------------------------------------+
//|                                                   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 ((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;
   }
}
//+------------------------------------------------------------------+

вот это тоже код отправляет письма....но ТОЖЕ не всегда.... странно ..... если скажем ТЕКУЩИЙ уровень FI = 0.012, а я ставлю срабатывание на уровне 0.01 - то срабатывание РАБОТАЕТ :) ... а если начинается уровень с 0.00 и растет к 0.12, то оно его ПРОСТО проходит не информируя меня...

странно...

 
не знаю может бред скажу... может быть сменить price_close на цену_текущею - если есть такая ... (?
 
papaden:

вот это тоже код отправляет письма....но ТОЖЕ не всегда.... странно ..... если скажем ТЕКУЩИЙ уровень FI = 0.012, а я ставлю срабатывание на уровне 0.01 - то срабатывание РАБОТАЕТ :) ... а если начинается уровень с 0.00 и растет к 0.12, то оно его ПРОСТО проходит не информируя меня...

странно...

Отсутствие срабатывания по индикатору часто бывает и причин может быть несколько (их нужно учитывать).

Могла, например, пропасть связь с терминалом. Мог образоваться геп. Кроме того, если вы видите, что на графике индикатор пересёк какой-то уровень, то это совсем не означает, что значения этого уровня дошли до сравнения: ведь индикатор считается побарно, а у вас период усреднения не такой уж и большой - 13.

===

Например, чтобы понятнее было. Есть у вас простая МА с периодом 5. Она считает среднее от значений 1,2,3,4,5. Среднее получается = 3,0. Далее появляется новый бар, у которого значение уже будет равно 6 по окончанию его формирования. А среднее будет = 4,0 по окончанию формирования этого бара и (2+3+4+5+5)/5=3,8 по началу его формирования. Спрашивается, а что было между 3,0 и 3,8? Этот диапазон для сравнения не поступил, хотя на графике прямая этого диапазона отрисуется.

Вот такой разводняк получается с индикаторами. Потом, возникают вопросы, типа, почему позиция не открылась, или почему она не закрылась вовремя. Эта одна из сотен мин, на которую наступают почти все.

 

понял... спасибо...

 
А как сделать в коде, что бы он 1 письмо присылал? это возможно? Сейчас при срабатывании идет засыпание письмами ))
 

DmitriyN - спасибо тебе!

Вопрос закрыт - индикатор настроен....

От души!

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