Прозьба о помощи программистам MQL4

 

Всем доброго времени суток товарищи программисты! Я вот как только освоил язык программирования MQL4 и накидываю помалу свои идеи но как и другому начинающему нужно немного помощи, в благодарность тому кто поможет поделюсь парой своих стратегий, очень даже неплохих, и парой индикаторов!

Вопрос следующего плана, в данной части кода я закрываю ордера

//////////////////////////
// Блок закрытия ордеров//
//////////////////////////

//---- перебираем все открытые позиции

int _GetLastError = 0, _OrdersTotal = OrdersTotal();

for ( int z = _OrdersTotal - 1; z >= 0; z -- )
{

_GetLastError = GetLastError();
//---- если при выборе позиции возникла ошибка, переходим к следующей
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
continue;
}

//---- если позиция открыта не по текущему инструменту, пропускаем её
if ( OrderSymbol() != Symbol() ) continue;

   
if ( OrderType() != OP_BUY ) continue;

//---- если открыта БАЙ-позиция

if ( Cls_B == true ) // и есть условия закрытия
{
//---- закрываем позицию
if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 5, Green ) )
{
_GetLastError = GetLastError();
Alert( "Ошибка OrderClose № ", _GetLastError );
return(-1);
}

//---- если условия нет, выходим
else return(0);
}}

for ( z = _OrdersTotal - 1; z >= 0; z -- )
{
//---- если при выборе позиции возникла ошибка, переходим к следующей
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
continue;
}

//---- если позиция открыта не по текущему инструменту, пропускаем её
if ( OrderSymbol() != Symbol() ) continue;

   
if ( OrderType() != OP_SELL ) continue;

//---- если открыта селл позиция

if ( Cls_S == true ) // и есть условия закрытия
{
//---- закрываем позицию
if ( !OrderClose( OrderTicket(), OrderLots(), Ask, 5, Red ) )
{
_GetLastError = GetLastError();
Alert( "Ошибка OrderClose № ", _GetLastError );
return(-1);
}

//---- если условий не, выходим
else return(0);
 

 хотел бы спросить как сюда можно добавить сделующюю функцию, если ордер закрылся удачно то чтобы выскакикало окно Alert и в течении следующих 10 тиков сигналило и в этом окне отображалось какой ордер был закрыт, по какой цене и когда, это для того чтобы если допустим ночью мой автомат закрыл позицию чтобы он сообщил и смог разбудить меня

И ещё вопрос как можно получить из индикатора данные, в частности меня интересует как получить данные о наклоне канала, я хочу использовать эти данные для полуавтомата, для обычного индикатора используется функция iCustom, а как вытянуть отсюда? по какому принципу он строится? и как можно узнать что цена подошла к границе канала?

Заранее огромное спасибо! И помните того кто поможет я немного отблагодарю) 

 
Pahnutiy >>:

как только освоил язык программирования MQL4...

...стОит также освоить кнопку "Код" (SRC) в форме ввода сообщения на форуме - вам все равно, а людям проще читать

хотел бы спросить как сюда можно добавить сделующюю функцию, если ордер закрылся удачно то чтобы выскакикало окно Alert и в течении следующих 10 тиков сигналило и в этом окне отображалось какой ордер был закрыт, по какой цене и когда, это для того чтобы если допустим ночью мой автомат закрыл позицию чтобы он сообщил и смог разбудить меня

окно Alert не управляется программно, его можно только вызвать из MQL4-программы, но не закрыть через некоторое время и не "сигналить" им. Если нужен звук, можно использовать функцию PlaySound(). Также может помочь функция OrderPrint. А вообще, сведения о всех закрытых ордерах и так выводятся в логи, для этого не надо писАть отдельный код.

И ещё вопрос как можно получить из индикатора данные, в частности меня интересует как получить данные о наклоне канала, я хочу использовать эти данные для полуавтомата, для обычного индикатора используется функция iCustom, а как вытянуть отсюда? по какому принципу он строится? и как можно узнать что цена подошла к границе канала?

Имеется ввиду канал, закинутый на график в качестве объекта?

 
Pahnutiy >>:

Всем доброго времени суток товарищи программисты! Я вот как только освоил язык программирования MQL4 и накидываю помалу свои идеи но как и другому начинающему нужно немного помощи, в благодарность тому кто поможет поделюсь парой своих стратегий, очень даже неплохих, и парой индикаторов!

Вопрос следующего плана, в данной части кода я закрываю ордера

//////////////////////////
// Блок закрытия ордеров//
//////////////////////////

//---- перебираем все открытые позиции

int _GetLastError = 0, _OrdersTotal = OrdersTotal();

for ( int z = _OrdersTotal - 1; z >= 0; z -- )
{

_GetLastError = GetLastError();
//---- если при выборе позиции возникла ошибка, переходим к следующей
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
continue;
}

//---- если позиция открыта не по текущему инструменту, пропускаем её
if ( OrderSymbol() != Symbol() ) continue;


if ( OrderType() != OP_BUY ) continue;

//---- если открыта БАЙ-позиция

if ( Cls_B == true ) // и есть условия закрытия
{
//---- закрываем позицию
if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 5, Green ) )
{
_GetLastError = GetLastError();
Alert( "Ошибка OrderClose № ", _GetLastError );
return(-1);
}

//---- если условия нет, выходим
else return(0);
}}

for ( z = _OrdersTotal - 1; z >= 0; z -- )
{
//---- если при выборе позиции возникла ошибка, переходим к следующей
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
continue;
}

//---- если позиция открыта не по текущему инструменту, пропускаем её
if ( OrderSymbol() != Symbol() ) continue;


if ( OrderType() != OP_SELL ) continue;

//---- если открыта селл позиция

if ( Cls_S == true ) // и есть условия закрытия
{
//---- закрываем позицию
if ( !OrderClose( OrderTicket(), OrderLots(), Ask, 5, Red ) )
{
_GetLastError = GetLastError();
Alert( "Ошибка OrderClose № ", _GetLastError );
return(-1);
}

//---- если условий не, выходим
else return(0);

хотел бы спросить как сюда можно добавить сделующюю функцию, если ордер закрылся удачно то чтобы выскакикало окно Alert и в течении следующих 10 тиков сигналило и в этом окне отображалось какой ордер был закрыт, по какой цене и когда, это для того чтобы если допустим ночью мой автомат закрыл позицию чтобы он сообщил и смог разбудить меня

И ещё вопрос как можно получить из индикатора данные, в частности меня интересует как получить данные о наклоне канала, я хочу использовать эти данные для полуавтомата, для обычного индикатора используется функция iCustom, а как вытянуть отсюда? по какому принципу он строится? и как можно узнать что цена подошла к границе канала?

Заранее огромное спасибо! И помните того кто поможет я немного отблагодарю)

Начнем с конца;-) iCustom(Symbol(),Period(),"Название индикатора канала",его параметры(индюка - в студию, плз),0 - если нужно текущее значение, 1(2,3...)-если предыдущие).

Далее.Не особо вникал в Ваш код, но по логике - в функции открытия ордера дописываете алерт, саунд и все, что захочется.По своему печальному опыту - лучше этого не делать.Но...Воля Ваша. За подробностями - в личку или Skype - segunKh

 
Segun1966 >>:

Начнем с конца;-) iCustom(Symbol(),Period(),"Название индикатора канала",его параметры(индюка - в студию, плз),0 - если нужно текущее значение, 1(2,3...)-если предыдущие).

Далее.Не особо вникал в Ваш код, но по логике - в функции открытия ордера дописываете алерт, саунд и все, что захочется.По своему печальному опыту - лучше этого не делать.Но...Воля Ваша. За подробностями - в личку или Skype - segunKh



да в том то и вопрос, как его туда дописать и куда именно дописать? мне просто нужно узнать о том что мой автомат закрыл ордер и чтобы он вывел окно с соответствующим сообщением и пиликал в ближайшие 10 тиков, а по поводу канала прикрепляю индюка в сообщение, как из него получить данные о его наклоне и как можно узнать что цена его коснулась? и сверху или снизу?
Файлы:
lsma_line.mq4  5 kb
 

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

 
..."ПроСьба" пишется через "С"...
 

Доброго времени суток. Подскажите как дать команду на открытие ордера при пересечении MACD нулевой отметки. Не реагирует, не понимаю в чём дело. Заранее спасибо!

{
a = iCustom (Symbol(),PERIOD_H1,"MACD",Symbol(),0,11,26,9,PRIC E_CLOSE,0,1,0,1);
c = iCustom (Symbol(),PERIOD_H1,"MACD",Symbol(),0,11,26,9,PRIC E_CLOSE,1,1,1,1);
if (a==c && a>0 && c>0 && OrdersTotal()==0)
{
SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
Ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,SL,TP,"",magic,0,Red);
if (a==TakeProfit && OrdersTotal()>0)
{
OrderClose(Ticket,Lots,Ask,slippage,Green);
}
}
if (a==c && a<0 && c<0 && OrdersTotal()==0)
{
SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
Ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,SL,TP, "",magic,0,Blue);
if (a==TakeProfit && OrdersTotal()>0)
{
OrderClose(Ticket,Lots,Ask,slippage,Green);
}
}
}

 

Вот этого равенства:

a==c  
не дождетесь.
 
Сглазил.
Причина обращения: