Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 644

 
tara:
Нет. 

Полезнее тебе было бы ответить "тен"! А вдруг!
 
Got:

Объясните где не прав, не находит в "Обзоре рынка" инструмент.

Попробуйте еще поставить "=" в условии  i>=0

 

for(int i=SymbolsTotal(true)-1; i>=0; i--){
 
borilunad:

Нажмите Графики, внизу Свойства и слева наверху уберите галочку с График наверху! И вообще, поюзьте побольше, пригодится!

Спасибо! сработало.
 

Не работает Отладчик – в чем дело?

Метатрейдер бильд 646, редактор бильд 934. Вот простейший индикатор:


    

 Запускаю его на графике EURUSD, M1, и вот что получается: 

 

1

Т.е. все, как должно быть.

А теперь делаю точку останова перед Alert и запускаю Отладчик:

Появляется график  USDCHF,H1. Откуда он берется? Открыт был только EURUSD, M1.

Запускаю, и вот что вижу: 

Т.е. индикатор берет данные именно из этого USDCHF,H1. В чем здесь дело?

    Второй вопрос. Написанный скрипт Редактор кладет не в папку Scripts в каталоге, а в папку MQL4, и туда же помещает скомпилированный файл. Приходится вручную перетаскивать исходник в папку Scripts, после этого компилировать, и только тогда скрипт появляется в Навигаторе. С  индикаторами такой  бяки нет, они сразу попадают в свои папки.  Я что-то не так делаю, или это Редактор ошибается?

    Третий вопрос. У меня до сих пор 646  бильд,  хотя кто-то на Форуме еще в мае говорил про 650-й. Действительно ли не было  с тех пор обновлений, или опять же у меня что-то не так?

    Да сопутствует удача тому, кто мне ответит. 

 

 

 

 
Спасибо за удачу! Но отвечаю только на третий вопрос! У меня тоже 646-й бильд, пока сервер нам не обновит на более новый. Это происходит, когда включаю после отдыха. Я это делаю 1 раз в неделю перед началом сессии. Удачи также и вам!
 

Как прописать SendMail и Alert в индикатор, чтобы он не реагировал на старые сигналы при пересчёте значений индикатора, а показывал алерт и отсылал почту только на новых?

Если вот так:

//+------------------------------------------------------------------+
//|                                                       simple.mq4 |
//|                                                         evillive |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "evillive"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double Up[];
double Down[];
extern int period = 2;
extern int method = 1;
extern int price = 0;
extern int shift = 4;
extern string _alerts_="alerts section";
input bool alert=false;//show alert
input bool mail=false;//send mail
input bool not=false;//send push notification
//////////////////

      string dir="";
      datetime tim=0;

int OnInit()
  {

   SetIndexStyle(0, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(0, 176);
   SetIndexBuffer(0, Up);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(1, 176);
   SetIndexBuffer(1, Down);
   SetIndexLabel(0,"BUY!");
   SetIndexLabel(1,"SELL!");

   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int i,limit;
   double ma0,ma1,atr;
//---
      if(rates_total<=(period+shift))
      return(0);
//--- counting from 0 to rates_total
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<=rates_total-(period+shift); i++)
        {
         Up[i]=0.0;
         Down[i]=0.0;
        }
     }
//--- starting calculation
   if(prev_calculated>0)
      limit=rates_total-prev_calculated; //period+shift;
   else
      limit=rates_total-(period+shift);

   for(i = 1; i < limit; i++)
  {
      ma0 = iMA(NULL,0,period,0,method,price,i);
      ma1 = iMA(NULL,0,period,0,method,price,i+shift);
      atr = iATR(NULL,0,period,i);
      if(ma0>ma1 && Close[i]<Close[i+shift] && Close[i]>Close[i+period+shift])
        {
            Up[i] = (Close[i]+Open[i])/2;
            dir="up";
            tim=Time[i];
            alerts(dir,tim);
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {   
            Down[i] = (Close[i]+Open[i])/2;
            dir="down";
            tim=Time[i];
            alerts(dir,tim);
        }
  }
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void alerts(string d, datetime t)
{
if(!IsTesting() && (TimeLocal()-t)>60)
{
if(alert==true) Alert("New ",d," arrow");
if(mail==true) SendMail("New signal",StringConcatenate("A new ",d, "signal detected by indicator"));
if(not==true) SendNotification(StringConcatenate("A new ",d, "signal detected by indicator"));
}
return;
}

то при любом воздействии на индикатор (установка на график, настройка, смена ТФ, прыжок на месте или резкий звук), он заново показывает алерты и пытается отослать их же по почте на ВСЕ стрелки, от начала графика и до текущего.

Вопрос в дополнение - почта в журнале отмечается как "Mail: 'Test message' has been sent", но в ящик так ни одно письмо и не упало (((

 
evillive:

Как прописать SendMail и Alert в индикатор, чтобы он не реагировал на старые сигналы при пересчёте значений индикатора, а показывал алерт и отсылал почту только на новых?

Если вот так:

то при любом воздействии на индикатор (установка на график, настройка, смена ТФ, прыжок на месте или резкий звук), он заново показывает алерты и пытается отослать их же по почте на ВСЕ стрелки, от начала графика и до текущего.

Вопрос в дополнение - почта в журнале отмечается как "Mail: 'Test message' has been sent", но в ящик так ни одно письмо и не упало (((


Я бы так сделал

//+------------------------------------------------------------------+
//|                                                       simple.mq4 |
//|                                                         evillive |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "evillive"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double Up[];
double Down[];
extern int period = 2;
extern int method = 1;
extern int price = 0;
extern int shift = 4;
extern string _alerts_="alerts section";
input bool alert=false;//show alert
input bool mail=false;//send mail
input bool not=false;//send push notification
                     //////////////////

char dir=0;
datetime tim=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {

   SetIndexStyle(0,DRAW_ARROW,EMPTY,3);
   SetIndexArrow(0,176);
   SetIndexBuffer(0,Up);
   SetIndexStyle(1,DRAW_ARROW,EMPTY,3);
   SetIndexArrow(1,176);
   SetIndexBuffer(1,Down);
   SetIndexLabel(0,"BUY!");
   SetIndexLabel(1,"SELL!");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int i,limit;
   double ma0,ma1,atr;
//---
   if(rates_total<=(period+shift))
      return(0);
//--- counting from 0 to rates_total
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<=rates_total-(period+shift); i++)
        {
         Up[i]=0.0;
         Down[i]=0.0;
        }
     }
//--- starting calculation
   if(prev_calculated>0)
      limit=rates_total-prev_calculated-1; //period+shift;
   else
      limit=rates_total-(period+shift)-1;

   for(i=limit; i>=0; i--)
     {
      ma0 = iMA(NULL,0,period,0,method,price,i);
      ma1 = iMA(NULL,0,period,0,method,price,i+shift);
      atr = iATR(NULL,0,period,i);
      if(ma0>ma1 && Close[i]<Close[i+shift] && Close[i]>Close[i+period+shift])
        {
         Up[i]=(Close[i]+Open[i])/2;
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {
         Down[i]=(Close[i]+Open[i])/2;
        }
     }
      if(ma0>ma1 && Close[0]<Close[shift] && Close[0]>Close[period+shift])
        {
         if (dir!=1) {
            dir=1;
            alerts("UP",Time[0]);
         }
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {
         if (dir!=-1){
            dir=-1;
            alerts("DOWN",Time[0]);
         }
        }

   

   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void alerts(string d,datetime t)
  {
   if(!IsTesting() && (TimeLocal()-t)>60)
     {
      if(alert==true) Alert("New ",d," arrow");
      if(mail==true) SendMail("New signal",StringConcatenate("A new ",d,"signal detected by indicator"));
      if(not==true) SendNotification(StringConcatenate("A new ",d,"signal detected by indicator"));
     }
   return;
  }
//+------------------------------------------------------------------+
 
Vinin:


Я бы так сделал

Добавленные строки так и должны быть вне цикла или это опечатка?
Всё, понял, так и должно быть.
 

Здравствуйте, есть ли у кого нибудь шаблон по усреднению позиции.

То есть если открыт ордер и он убыточный, то открывая второй ордер в этом же направлении ставим стоп по середине между этих ордеров и так далее, три ордера, четыре...?

 
Top2n:

Здравствуйте, есть ли у кого нибудь шаблон по усреднению позиции.

То есть если открыт ордер и он убыточный, то открывая второй ордер в этом же направлении ставим стоп по середине между этих ордеров и так далее, три ордера, четыре...?


взять все цены открытия и посчитаь арифметическое среднее