Ваши вопросы по языку MQL4

слава1122

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

Ugar

Гуру форума
Ребята всем привет, скажите пожалуйста что может быть с мт4, частенько вылетает звук алерта, а сигнала не от кокого индюка нет, убераю все индюки с графика все равно появляется звук, без окна алерта
Алерт может быть и не программный, можно в терминале вручную его назначить на событие (окно терминала, вкладка Алерты). Но и не факт что это алерт. В терминале много поводов для звука. В настройках терминала, на вкладке события, назначаются звуки.
 

_SERG_

Активный участник
Ребята всем привет, скажите пожалуйста что может быть с мт4, частенько вылетает звук алерта, а сигнала не от кокого индюка нет, убераю все индюки с графика все равно появляется звук, без окна алерта

Таки у Вас там, может, ещё и советники остались? Например на других графиках.
А в советнике может быть , что угодно запрограммировано.

Если Вы не любите звук, выключите его. :laugh:
Или посмотрите параметры советника, обычно там
отписывают включение/выключение разных параметров, может там Вы и выключите звук.
 

mnem0n1k

Местный житель
Не подскажете, где можно посмотреть основные изменения в mql4 старого вида и нового? Пытаюсь что-то написать(простейшее, практически копию с учебника по мкл4), а выдает такие ошибки, как будто я на французском пишу, а не на мкл4.:)
 

RoboMaks

Элитный участник
Не подскажете, где можно посмотреть основные изменения в mql4 старого вида и нового? Пытаюсь что-то написать(простейшее, практически копию с учебника по мкл4), а выдает такие ошибки, как будто я на французском пишу, а не на мкл4.:)

Кратко - в этом вложении. Полностью - на форуме MQL от начала создания 600+ :)
 

Вложения

  • Документ Microsoft Office Word.zip
    62,1 КБ · Просмотры: 30

AlexeyVik

Программист mql4 mql5
Не подскажете, где можно посмотреть основные изменения в mql4 старого вида и нового? Пытаюсь что-то написать(простейшее, практически копию с учебника по мкл4), а выдает такие ошибки, как будто я на французском пишу, а не на мкл4.:)
А чем не нравится описание в документации?
 

Вложения

  • 00.png
    00.png
    105,1 КБ · Просмотры: 28

mnem0n1k

Местный житель
Кратко - в этом вложении. Полностью - на форуме MQL от начала создания 600+ :)

Спасибо. Примерно такое и хотел посмотреть: "было" - "стало".

А чем не нравится описание в документации?

Да, спасибо.. не думал что в справке будет такая информация.:)
 

derzerack

Интересующийся
Уважаемые знатоки очень прошу разобраться с куском кода который прост как калашников но работает как ....

switch(STATUS)
{
case 0: // старт
if (CountBuy()==0 && CountSell()==0) STATUS=1;
break ;

case 1:
ticket=AntiRequoteOrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,comment,Magik,0,Red);
break ;
}
этот кусок почему то зацикливает и срабатывает в любом случае даже если счётчики ордеров милион.
На всякий случай выкладываю функции подсчёта ордеров, может ошибка кроется там, но я эти функции уже не год использую и раньше никогда проблем не возникало.
//---------------Начало Каунт бай-------------------------
int CountBuy()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>=0; trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
{
if(OrderType()==OP_BUY)
count++;
}
}
return(count);
}
//---------------Конец Каунт бай--------------------------

//------------------Начало коунт СЕЛЛ-----------------
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>=0; trade --)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
{
if(OrderType()==OP_SELL)
count++;
}
}
return(count);
}
//------------------конец Коунт селл------------------
Заранее большущее спасибо за помощь. Аж стыдно просить вроде всё просто но ничего не работает.
 

Cemen4yk1

Местный житель
Уважаемые знатоки очень прошу разобраться с куском кода который прост как калашников но работает как ....

switch(STATUS)
{
case 0: // старт
if (CountBuy()==0 && CountSell()==0) STATUS=1;
break ;

case 1:
ticket=AntiRequoteOrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,comment,Magik,0,Red);
break ;
}
этот кусок почему то зацикливает и срабатывает в любом случае даже если счётчики ордеров милион.
На всякий случай выкладываю функции подсчёта ордеров, может ошибка кроется там, но я эти функции уже не год использую и раньше никогда проблем не возникало.
//---------------Начало Каунт бай-------------------------
int CountBuy()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>=0; trade--)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
{
if(OrderType()==OP_BUY)
count++;
}
}
return(count);
}
//---------------Конец Каунт бай--------------------------

//------------------Начало коунт СЕЛЛ-----------------
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>=0; trade --)
{
OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
{
if(OrderType()==OP_SELL)
count++;
}
}
return(count);
}
//------------------конец Коунт селл------------------
Заранее большущее спасибо за помощь. Аж стыдно просить вроде всё просто но ничего не работает.
наверно вы забываете обнулить STATUS
 

derzerack

Интересующийся
и ещё такой вопросик. не пойму что происходит когда при открытии лока хочу указать ТП для покупки и для продажи, возникает ошибка 130. вопрос наверно идитский но я так и не понял почему стопы неправильные

switch(STATUS)
{
case 0: // старт
if (CountBuy()==0 && CountSell()==0) STATUS=1;
break ;

case 1:
ticketSel=AntiRequoteOrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,TP,comment,Magik,0,Red);
ticket=AntiRequoteOrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,TP,comment,Magik,0,Blue);
STATUS=0;
break ;
Предыдущий урок по обнулению статуса выучил. И Как всегда спасибо за помощь.
 

_SERG_

Активный участник
Не подскажете, где можно посмотреть основные изменения в mql4 старого вида и нового? Пытаюсь что-то написать(простейшее, практически копию с учебника по мкл4), а выдает такие ошибки, как будто я на французском пишу, а не на мкл4.:)
По поводу "какие то ошибки", то есть какие то комментарии по этим ошибкам, пусть даже на английском.

Аще, конкретные вопросы, задают конкретные пацаны, и получают конкретные ответы. :laugh:

Была бы конкретная копия, из учебника С. Ковалёва, был бы и конкретный комментарий. А так о чём говорить?

Да и книжку прочесть, не факт, что мозг шевельнётся, а вот глюк найти в своём коде или том, который как работающий определён, это уже первые шевеленя будут.:laugh:
Не стесняйся, "скрипи" мозгом.
 

serega20024

Прохожий
Подскажите по советнику

Такая ситуация. Написал советник(точнее собрал из разных, пробую первый раз, не судите строго)), при определенных условиях он закрывает старые ордера и открывает новый или выставляет отложенный ордер.

На тесте все работает отлично, но в реале он неоднократно просто закрывает ордера и не открывает новый(и отложенный не ставит).

Проверяю на тесте проблемный день, все отрабатывается прекрасно.

Подскажите в чем может быть проблема или может можно как то проверку на открытие ордера ставить?


PHP:
int start(){     oz_up=iCustom(Symbol(), 0, "OZ_M5", 3, 1);   oz_dw=iCustom(Symbol(), 0, "OZ_M5", 2, 1);   lag=iCustom(Symbol(), 0, "LAG_M5", 0, 1);               if (Close[1]>oz_up && lag>0.5 && b==0)         {         b=2;         s=0;         if ( oz_up + MAX*Point >= Close[1])         {         SendOrder(OP_BUY, Lot, "UP");         OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),slippage,0,Ask+Takeprofit*Point,0,Magic,0,Blue);                 }        else        {        OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(oz_up + OTS*Point ,Digits),slippage,0,Ask+Takeprofit*Point,0,Magic,0,Blue);         SendOrder(OP_BUY, Lot, "UP");        }        }            else      {                    if (Close[1]<oz_dw && lag<0.5 && s==0)           {            s=2;            b=0;             if ( oz_dw - MAX*Point <= Close[1])         {         SendOrder(OP_SELL, Lot, "DW");         OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,0,Bid-Takeprofit*Point,0,Magic,0,Red);                 }        else        {        OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(oz_dw - OTS*Point ,Digits),slippage,0,Bid-Takeprofit*Point,0,Magic,0,Blue);         SendOrder(OP_SELL, Lot, "DW");        }            }                        }                               return(0);}//-------------------------------------------------------------------------bool SendOrder(int tip, double lot, string com){   for (int i=0; i<OrdersTotal(); i++)    {        if (OrderSelect(i, SELECT_BY_POS))      {           if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)         {            if (OrderComment()==com) return(0);         }      }   }   int error,nn;   while(true)   {      RefreshRates();                   //-------------------------------------------------------------------------           if (tip==OP_BUY)           {    for(int n=0;n<OrdersTotal();n++)  {    if (!OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) continue;    if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;    if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); n--; }    if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow); n--; }  }       error = 1;            }                         //-------------------------------------------------------------------------           if (tip==OP_SELL)           {      for(int p=0;p<OrdersTotal();p++)  {    if (!OrderSelect(p, SELECT_BY_POS, MODE_TRADES)) continue;    if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;    if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); p--; }    if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow); p--; }  }      error = 1;      }             //-------------------------------------------------------------------------                             if (error==-1)      {         Print("OrderSend Error ",GetLastError()," Lot ",lot);         Sleep(1000);      }      else return(1);      nn++;      if (nn>10) return(0);   }   return(1);}//-------------------------------------------------------------------
 
Последнее редактирование модератором:

seronn

Новичок форума
Народ, кто знает, подскажите как в советнике на MQL 4 присвоить переменной значение при появлении стрелочки и не менять значение до появления следующей стрелочки? В промежутках между появлениями стрелки буфер = 0 для обоих, при появлении один буфер 0 другой больше нуля.
 

Ugar

Гуру форума
Народ, кто знает, подскажите как в советнике на MQL 4 присвоить переменной значение при появлении стрелочки и не менять значение до появления следующей стрелочки? В промежутках между появлениями стрелки буфер = 0 для обоих, при появлении один буфер 0 другой больше нуля.
static char Signal;
if(bufer1>0)Signal=1;
if(bufer2>0)Signal=-1;
 

serega20024

Прохожий
int start()
{

oz_up=iCustom(Symbol(), 0, "OZ_M5", 3, 1);
oz_dw=iCustom(Symbol(), 0, "OZ_M5", 2, 1);
lag=iCustom(Symbol(), 0, "LAG_M5", 0, 1);



if (Close[1]>oz_up && lag>0.5 && b==0)
{
b=2;
s=0;
if ( oz_up + MAX*Point >= Close[1])
{
SendOrder(OP_BUY, Lot, "UP");
OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),slippage,0,Ask+Takeprofit*Point,0,Magic,0,Blue);

}
else
{
OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(oz_up + OTS*Point ,Digits),slippage,0,Ask+Takeprofit*Point,0,Magic,0,Blue);
SendOrder(OP_BUY, Lot, "UP");
}
}

else
{

if (Close[1]<oz_dw && lag<0.5 && s==0)
{
s=2;
b=0;
if ( oz_dw - MAX*Point <= Close[1])
{
SendOrder(OP_SELL, Lot, "DW");
OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,0,Bid-Takeprofit*Point,0,Magic,0,Red);

}
else
{
OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(oz_dw - OTS*Point ,Digits),slippage,0,Bid-Takeprofit*Point,0,Magic,0,Blue);
SendOrder(OP_SELL, Lot, "DW");
}
}

}





return(0);
}
//-------------------------------------------------------------------------
bool SendOrder(int tip, double lot, string com)
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if (OrderComment()==com) return(0);
}
}
}
int error,nn;
while(true)
{
RefreshRates();



//-------------------------------------------------------------------------
if (tip==OP_BUY)
{
for(int n=0;n<OrdersTotal();n++)
{
if (!OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;

if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); n--; }
if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow); n--; }
}
error = 1;
}




//-------------------------------------------------------------------------
if (tip==OP_SELL)
{
for(int p=0;p<OrdersTotal();p++)
{
if (!OrderSelect(p, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;

if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); p--; }
if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow); p--; }
}
error = 1;
}


//-------------------------------------------------------------------------



if (error==-1)
{
Print("OrderSend Error ",GetLastError()," Lot ",lot);
Sleep(1000);
}
else return(1);
nn++;
if (nn>10) return(0);
}
return(1);
}
//-------------------------------------------------------------------
 

matro3

Почетный гражданин
int start()
{

oz_up=iCustom(Symbol(), 0, "OZ_M5", 3, 1);
oz_dw=iCustom(Symbol(), 0, "OZ_M5", 2, 1);
lag=iCustom(Symbol(), 0, "LAG_M5", 0, 1);



if (Close[1]>oz_up && lag>0.5 && b==0)
{
b=2;
s=0;
if ( oz_up + MAX*Point >= Close[1])
{
SendOrder(OP_BUY, Lot, "UP");
OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),slippage,0,Ask+Takeprofit*Point,0,Magic,0,Blue);

}
else
{
OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(oz_up + OTS*Point ,Digits),slippage,0,Ask+Takeprofit*Point,0,Magic,0,Blue);
SendOrder(OP_BUY, Lot, "UP");
}
}

else
{

if (Close[1]<oz_dw && lag<0.5 && s==0)
{
s=2;
b=0;
if ( oz_dw - MAX*Point <= Close[1])
{
SendOrder(OP_SELL, Lot, "DW");
OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,0,Bid-Takeprofit*Point,0,Magic,0,Red);

}
else
{
OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(oz_dw - OTS*Point ,Digits),slippage,0,Bid-Takeprofit*Point,0,Magic,0,Blue);
SendOrder(OP_SELL, Lot, "DW");
}
}

}





return(0);
}
//-------------------------------------------------------------------------
bool SendOrder(int tip, double lot, string com)
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if (OrderComment()==com) return(0);
}
}
}
int error,nn;
while(true)
{
RefreshRates();



//-------------------------------------------------------------------------
if (tip==OP_BUY)
{
for(int n=0;n<OrdersTotal();n++)
{
if (!OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;

if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); n--; }
if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow); n--; }
}
error = 1;
}




//-------------------------------------------------------------------------
if (tip==OP_SELL)
{
for(int p=0;p<OrdersTotal();p++)
{
if (!OrderSelect(p, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;

if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); p--; }
if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow); p--; }
}
error = 1;
}


//-------------------------------------------------------------------------



if (error==-1)
{
Print("OrderSend Error ",GetLastError()," Lot ",lot);
Sleep(1000);
}
else return(1);
nn++;
if (nn>10) return(0);
}
return(1);
}
//-------------------------------------------------------------------

Для начала делайте код читаемым в сообщении:
Код:
int start()
{
	oz_up=iCustom(Symbol(), 0, "OZ_M5", 3, 1);
	oz_dw=iCustom(Symbol(), 0, "OZ_M5", 2, 1);
	lag=iCustom(Symbol(), 0, "LAG_M5", 0, 1);
	
	if (Close[1]>oz_up && lag>0.5 && b==0) 
	{
		b=2;
		s=0;
		if (oz_up + MAX*Point >= Close[1])
		{
			SendOrder(OP_BUY, Lot, "UP");
			OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),slippage,0,Ask+Takeprofit*Point,0,Magic,0,Blue);
		}
		else
		{
			OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(oz_up + OTS*Point ,Digits),slippage,0,Ask+Takeprofit*Point,0,Magic,0,Blue); 
			SendOrder(OP_BUY, Lot, "UP");
		}
	}
	else
	{		
		if (Close[1]<oz_dw && lag<0.5 && s==0)
		{
			s=2;
			b=0; 
			if (oz_dw - MAX*Point <= Close[1])
			{
				SendOrder(OP_SELL, Lot, "DW");
				OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,0,Bid-Takeprofit*Point,0,Magic,0,Red);
			}
			else
			{
				OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(oz_dw - OTS*Point ,Digits),slippage,0,Bid-Takeprofit*Point,0,Magic,0,Blue); 
				SendOrder(OP_SELL, Lot, "DW");
			}
		}
	
	}
	
	return(0);
}
//-------------------------------------------------------------------------
bool SendOrder(int tip, double lot, string com)
{
	for (int i=0; i<OrdersTotal(); i++) 
	{ 
		if (OrderSelect(i, SELECT_BY_POS))
			if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
				if (OrderComment()==com) return(0);
	}
	int error,nn;
	while(true)
	{
		RefreshRates();
		//------------------------------------------------------------------------- 
		if (tip==OP_BUY) 
		{
		for(int n=0;n<OrdersTotal();n++)
		{
		if (!OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) continue;
		if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
		
		if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); n--; }
		if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow); n--; }
		}
		error = 1; 
		}
		
		//------------------------------------------------------------------------- 
		if (tip==OP_SELL) 
		{
			for(int p=0;p<OrdersTotal();p++)
			{
				if (!OrderSelect(p, SELECT_BY_POS, MODE_TRADES)) continue;
				if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
				
				if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); p--; }
				if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow); p--; }
			}
			error = 1;
		}
	
		//------------------------------------------------------------------------- 
		if (error==-1)
		{
			Print("OrderSend Error ",GetLastError()," Lot ",lot);
			Sleep(1000);
		}
		else return(1);
		nn++;
		if (nn>10) return(0);
	}
	return(1);
}
//-------------------------------------------------------------------
Есть такая кнопка - #

В коде ставите вывод сообщений в журнал и смотрите где и что не так работает.
 

egorr007

Новичок форума
Всем доброго дня.
Ребят, помогите доделать функцию. Нужна индексация.

Сейчас, Функция используется только для одного значения,
и поэтому для каждого значения, приходится создавать дополнительную функцию.(типо: STORY1,STORY2,STORY3, и т.д.)

Можно ли добавить индексацию к параметрам.

Спасибо.
PHP:
//| Описание : Возвращает  предыдущее значение.                                |
//+----------------------------------------------------------------------------+
//| Параметры: znachenie - подставляемое значение                              |
//+----------------------------------------------------------------------------+
double vernul=0;                                                             //|
//+----------------------------------------------------------------------------+
double STORY(double znachenie){
               int  count =0;
     static double  PROSHLOE = 0;
            double  NASTOIASHEE = znachenie;

                 if(NASTOIASHEE != PROSHLOE )count++;  
                  if(count >0)vernul = PROSHLOE; 
                     PROSHLOE = NASTOIASHEE;      
   return(vernul);
  }
//+----------------------------------------------------------------------------+
//+---------------------------------------------------+//
PHP:
  // Сейчас так.
  
    Comment("\n"
             "настоящее       значение   ",(string)Buff_MA[1],"\n"                                        
             "прошлое         значение   ",(string)STORY(Buff_MA[1]),"\n"                                  
             "позапрошлое     значение   ",(string)STORY2(STORY(Buff_MA[1])) ,"\n"                          
             "позапозапрошлое значение   ",(string)STORY3(STORY2(STORY(Buff_MA[1]))) ,"\n"  
            );
   //+---------------------------------------------------+//
   // Хотелось бы,  как то,  так.       (использовать одну функцию, а не несколько)
   
       Comment("\n"
             "настоящее       значение   ",(string)Buff_MA[1],"\n"                                        
             "прошлое         значение   ",(string)STORY(1,Buff_MA[1]),"\n"                                  
             "позапрошлое     значение   ",(string)STORY(2,Buff_MA[1]) ,"\n"                          
             "позапозапрошлое значение   ",(string)STORY(3,Buff_MA[1]) ,"\n"  
            );
 
Последнее редактирование:

egorr007

Новичок форума
Ещё вопрос. Я всё, о том же. Проконсультируйте пожалуйста.
Сделал счётчик, вывел его в ретурн, возвращает все предыдущие counts как надо.

Теперь можно ли как то так сделать, если так делается?
Сделать двумерный массив, в одной ячейке индекс, в другой значение. И вывести всё это дело в ретурн.

вернуть = Mass[index][znachenie]; ? или как?
в общем по индексу, возвращать предыдущее значение.(znachenie) если оно есть.

Очень надо! Спасибо.

PHP:
//| Описание : Возвращает  предыдущее значение.                                |
//+----------------------------------------------------------------------------+
//| Параметры: index     - индекс значения                                     |
//|            znachenie - подставляемое значение                              |
//+----------------------------------------------------------------------------+
int kount =0;
double vernul=0;                                                             //|
//+----------------------------------------------------------------------------+
double STORY(int index ,double znachenie){
            int  counts   =0;
  static double  PROSHLOE = 0;
         double  NASTOIASHEE = znachenie;
                if(NASTOIASHEE != PROSHLOE )kount++; 
                 
                  if(kount-index != counts )counts = (kount-index);

                     if(counts >=0)  vernul = counts; 
                    //  if(counts >=0)  vernul = PROSHLOE; 

                         PROSHLOE = NASTOIASHEE;      
   return(vernul);
  }
//+----------------------------------------------------------------------------+
(счётчик предполагается как индекс, т.к. при изменении значения , меняется и счётчик).
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Ещё вопрос. Я всё, о том же. Проконсультируйте пожалуйста.
Сделал счётчик, вывел его в ретурн, возвращает все предыдущие counts как надо.(счётчик предполагается как индекс).

Теперь можно ли как то так сделать, если так делается?
Сделать двумерный массив, в одной ячейке индекс, в другой значение. И вывести всё это в ретурн.

вернуть = Mass[index][znachenie];
в общем по индексу, возвращать предыдущее значение.(znachenie) если оно есть.

PHP:
//| Описание : Возвращает  предыдущее значение.                                |//+----------------------------------------------------------------------------+//| Параметры: index     - индекс значения                                     |//|            znachenie - подставляемое значение                              |//+----------------------------------------------------------------------------+int kount =0;double vernul=0;                                                             //|//+----------------------------------------------------------------------------+double STORY(int index ,double znachenie){            int  counts   =0;  static double  PROSHLOE = 0;         double  NASTOIASHEE = znachenie;                if(NASTOIASHEE != PROSHLOE )kount++;                                    if(kount-index != counts )counts = (kount-index);                     if(counts >=0)  vernul = counts;                     //  if(counts >=0)  vernul = PROSHLOE;                       //   PROSHLOE = NASTOIASHEE;         return(vernul);  }//+----------------------------------------------------------------------------+
Можно в функцию передать заранее объявленный массив по ссылке и ничего не надо возвращать.
double STORY(double & Mass[])
 
Верх