Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Code Base поможет в усвоении теоретических знаний. Заходи и изучай!
Pasha
89
Pasha 2010.05.22 19:06 

Всем доброго времени суток товарищи программисты! Я вот как только освоил язык программирования 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, а как вытянуть отсюда? по какому принципу он строится? и как можно узнать что цена подошла к границе канала?

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

Alexey Subbotin
4999
Alexey Subbotin 2010.05.22 20:01  
Pahnutiy >>:

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

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

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

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

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

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

Игорь
131
Игорь 2010.05.22 20:12  
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

Pasha
89
Pasha 2010.05.23 19:55  
Segun1966 >>:

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

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



да в том то и вопрос, как его туда дописать и куда именно дописать? мне просто нужно узнать о том что мой автомат закрыл ордер и чтобы он вывел окно с соответствующим сообщением и пиликал в ближайшие 10 тиков, а по поводу канала прикрепляю индюка в сообщение, как из него получить данные о его наклоне и как можно узнать что цена его коснулась? и сверху или снизу?
Файлы:
hasayama
605
hasayama 2010.05.23 22:33  

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

Alexandr Krivoshey
935
Alexandr Krivoshey 2010.05.23 22:40  
..."ПроСьба" пишется через "С"...
sanchez2zz
5
sanchez2zz 2014.03.26 20:16  

Доброго времени суток. Подскажите как дать команду на открытие ордера при пересечении 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);
}
}
}

Dmitry Fedoseev
41200
Dmitry Fedoseev 2014.03.26 20:30  

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

a==c  
не дождетесь.
Алексей Тарабанов
7220
Алексей Тарабанов 2014.03.26 21:36  
Сглазил.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий