Создание эксперта на МТ4.

 

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

Написал по некоторому подобию своего, но не могу скомпилировать.

Выдает ошибку и все тут: '\end_of_program' - ending bracket '}' expected.
Перепробовал редактировать его, скобки и все такое, ничего не получается.

Может быть кто-то из спецов поможет? Опытным взглядом?

Очень прошу!!!

_____________________________________________________________________________

//+------------------------------------------------------------------
// Численные значения для М30
extern double StopLoss = 20; // SL для открываемого ордера
extern double TakeProfit = 50; // ТР для открываемого ордера
extern double Lots = 0.1; // Жестко заданное колич. лотов
extern double TrailingStop = 10; // Trail stop in points
extern double Prots = 0.4; // Процент свободных средств

//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() // Внутренние переменные
{
double MA_1Current,MA_1Previous,MA_2Current, MA_2Previous;
double MA_3Current, MA_3Previous, StochMCurrent, StochMPrevious;
double StochSCurrent, StochSPrevious, MacdSCurrent, MacdSPrevious;
int cnt=0, ticket, total;

//+------------------------------------------------------------------+

//Описание функций технических индикаторов.
MA_1Current = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0); // МА_1 0 бар
MA_1Previous = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,1); // МА_1 1 бар
MA_2Current = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0); // МА_2 0 бар
MA_2Previous = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,1); // МА_2 1 бар
MA_3Current = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,0); // МА_3 0 бар
MA_3Previous = iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE,1); // МА_3 1 бар
StochMCurrent = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0); // Sto_M 0 бар
StochMPrevious = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1); // Sto_M 1 бар
StochSCurrent = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0); // Sto_S 0 бар
StochSPrevious = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1); // Sto_S 1 бар
MacdSCurrent = iMACD(NULL,0,5,7,3,PRICE_CLOSE,MODE_SIGNAL,0); // MACD_S 0 бар
MacdSPrevious = iMACD(NULL,0,5,7,3,PRICE_CLOSE,MODE_SIGNAL,1); // MACD_S 1 бар

//Проверка наличия открытых ордеров.
total=OrdersTotal();
if(total<1)
{
//+------------------------------------------------------------------+
//Определение торговых критериев.
//Проверяем возможность открытия длинной позиции.

if (Bid<MA_3Current && MA_1Current<MA_2Current && MA_2Current<MA_3Current &&
MacdSCurrent<0 && MacdSPrevious>0 && StochMPrevious>70 &&
StochMPrevious>StochSPrevious && MA_1Previous>MA_2Previous)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point);
}
//Проверяем возможность открытия короткой позиции.
if (Bid>MA_3Current && MA_1Current>MA_2Current && MA_2Current>MA_3Current &&
MacdSCurrent>0 && MacdSPrevious<0 && StochMPrevious<30 &&
StochMPrevious<StochSPrevious && MA_1Previous<MA_2Previous)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point);
}
return(0); // Выход из пользовательской функции ???
}
//+------------------------------------------------------------------+
//Контроль открытых позиций.
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // это открытая позиция? OP_BUY или OP_SELL.
OrderSymbol()==Symbol()) // инструмент совпадает?
{
if(OrderType()==OP_BUY) // открыта длинная позиция.
{
// проверка необходимости закрытия позиции.
if(StochMCurrent>StochSCurrent && StochMPrevious<StochSPrevious &&
MacdSCurrent>MacdSPrevious)
{
OrderClose(OrderTicket(),OrderLots(),Bid); // закрываем позицию.
return(0); // выход.
}
// проверка - трейлинг стоп ставить?
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,

OrderTakeProfit(),0);
return(0);
}
}
}
}
else // Иначе, это короткая позиция.
{
// проверка необходимости закрытия позиции.
if(StochMCurrent<StochSCurrent && StochMPrevious>StochSPrevious &&
MacdSCurrent<MacdSPrevious)
{
OrderClose(OrderTicket(),OrderLots(),Ask); // закрываем позицию.
return(0); // выход.
}
// проверка - трейлинг стоп ставить?
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
OrderTakeProfit(),0);
return(0);
}
}
}
}
}
return(0);
}
//Конец.

___________________________________________________________________________________

Может, я что-то со скобками напутал? Очень прошу помочь, хотя-бы намек....

С уважением, ко всем !!!!!!

Файлы:
myxexpert.mq4  7 kb
 

1. Научитась выкладыать код через SRC.

2. Научитась стилю со сдвигом блоков. В этом случае никогда не будет таких ошибок.

 
aleks-tomsk:

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

  1. Для чайников есть специальная ветка: Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3.
  2. Не надо портить зрение тем, у кого просите помощи, а научитесь пользоваться вставкой кода Ctrl+Alt+M
 
Zhunko:

1. Научитась выкладыать код через SRC.

2. Научитась стилю со сдвигом блоков. В этом случае никогда не будет таких ошибок.


Хорошо, а где про это есть подробно?
 
aleks-tomsk:

Хорошо, а где про это есть подробно?

вам подробно про нажатие клавиатуры Ctrl+Alt+M ??

или вам подробно про то, что надо отступы для вложенных { } делать???

 
aleks-tomsk:

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

Написал по некоторому подобию своего, но не могу скомпилировать.

Выдает ошибку и все тут: '\end_of_program' - ending bracket '}' expected.
Перепробовал редактировать его, скобки и все такое, ничего не получается.

Может быть кто-то из спецов поможет? Опытным взглядом?

Очень прошу!!!

___________________________________________________________________________________

Может, я что-то со скобками напутал? Очень прошу помочь, хотя-бы намек....

С уважением, ко всем !!!!!!

1) нужна еще одна скобка перед return (которая закроет цикл for)

2) в следующий раз пишите в ветку для новичков

3) вставляйте код с помощью кнопки SRC

4) в OrderClose не хватает 1 параметра, проскальзывания, поставьте хотя бы 0

5) по поводу скобок старайтесь оформлять хотя бы так:

start()
{
   for (int i = 0; i < N; i++)
   {
      if (a>b[i])
      {
          //что-то делаем
      }
      else
      {
      }
   }
}
 
sergeev:

вам подробно про нажатие клавиатуры Ctrl+Alt+M ??

или вам подробно про то, что надо отступы для вложенных { } делать???


Про отступы. Прошу прощения.
 
ilunga:

1) нужна еще одна скобка перед return (которая закроет цикл for)

2) в следующий раз пишите в ветку для новичков

3) вставляйте код с помощью кнопки SRC

4) в OrderClose не хватает 1 параметра, проскальзывания, поставьте хотя бы 0

5) по поводу скобок старайтесь оформлять хотя бы так:


Спасибо. Буду пробовать.