Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Олег
84
Олег  

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

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

Выдает ошибку и все тут: '\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);
}
//Конец.

___________________________________________________________________________________

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

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

Файлы:
Vadim Zhunko
5226
Vadim Zhunko  

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

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

Yury Reshetov
13478
Yury Reshetov  
aleks-tomsk:

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

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

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

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


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

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

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

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

ilunga
744
ilunga  
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
      {
      }
   }
}
Олег
84
Олег  
sergeev:

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

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


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

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

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

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

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

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


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