Простой советник по стратегии

Norokir

Интересующийся
Здравствуйте, хотел написать советник сам, но никак не получается..

Стратегия такая, используется один индикатор - обычный MACD.

Входные параметры:
External: fastEMA (быстрая ЕМА в MACD), slowEMA (медленная ЕМА в MACD), SMA (MACD SMA), Lot, StopLoss, Bar (0 - текущий, 1 - предыдущий и.т.д.)

===============================================

Условия покупки:
Бар №Bar имеет значение > 0 И > SMA – открытие BUY позиции с параметрами StopLoss и Lot, без TakeProfit.

Закрытие сделки:
Бар №Bar < SMA ИЛИ < 0

===============================================

Условия продажи:
Бар №Bar имеет значение < 0 И < SMA – открытие SELL позиции с параметрами StopLoss и Lot, без TakeProfit.

Закрытие сделки:
Бар №Bar > SMA ИЛИ > 0

2.JPG


Советник вроде простой, если кто-нибудь может помочь на бесплатной основе, буду крайне благодарен. Спасибо!
 

Norokir

Интересующийся
Вы, вероятно, полагаете, что я просто решил получить эксперт нахаляву :)
Но я на самом деле пытался сам написать его. Привожу здесь код, который у меня получился:

Код:
// Входные параметры.
extern int fastEMA = 5;
extern int slowEMA = 50;
extern int SMA = 20;
extern double Lot = 1;
extern int SL = 500; //Для пятизнаковой системы.
extern int Bar = 1; //Предыдущий (закрытая свеча).
int MagicBUY = 777;
int MagicSELL = 888;

int init()
  {
   return(0);
  }

int deinit()
  {
   return(0);
  }

int start()
  {
  int OrdTotal = OrdersTotal(); // Количество открытых ордеров.
  // Задаем переменные со значениями MACD и SMA.
  double MACDvalue=iMACD(NULL,0,fastEMA,slowEMA,SMA,PRICE_CLOSE,MODE_MAIN,Bar);
  double SMAvalue=iMACD(NULL,0,fastEMA,slowEMA,SMA,PRICE_CLOSE,MODE_SIGNAL,Bar);
//Заключение сделок. 
  // Условие покупки.
  if (OrdTotal == 0) //Чтобы ордера не открывались каждый тик.
  {
    if (MACDvalue > 0) 
    {
      if (MACDvalue > SMAvalue)
      {
         OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, Bid-SL*Point, 0, NULL, MagicBUY, 0, CLR_NONE);
      }
    }
  }
   //Условие продажи.
   if (OrdTotal == 0)
  {
    if (MACDvalue < 0) 
    {
      if (MACDvalue < SMAvalue)
      {
         OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, Bid-SL*Point, 0, NULL, MagicSELL, 0, CLR_NONE);
      }
    }
  }
//Закрытие сделок.
   //Закрытие SELL сделки.
   if (MACDvalue > 0) 
   {
     OrderClose(MagicSELL,Lot,Ask,3,CLR_NONE);
   }
   if (MACDvalue > SMAvalue)
   {
     OrderClose(MagicSELL,Lot,Ask,3,CLR_NONE);
   }
   //Закрытие BUY сделки.
   if (MACDvalue < 0) 
   {
     OrderClose(MagicBUY,Lot,Ask,3,CLR_NONE);
   }
   if (MACDvalue < SMAvalue)
   {
     OrderClose(MagicBUY,Lot,Ask,3,CLR_NONE);
   }
  return(0);
 }

Я пока не понимаю, где я ошибся, но он не работает. Все отлично компилится, но вот закрытие сделок работает неправильно, а точнее вообще не работает.

Если написать эксперта возможности ни у кого нет, прошу помочь с данным кодом, найти ошибку.
Прилагаю к сообщению mq4 файл. Спасибо.
 

Вложения

  • MACD_Expert.mq4
    2,3 КБ · Просмотры: 45

Norokir

Интересующийся
Эх, пока с этой премодерацией сообщение появится, уже все сам успеваешь решить :)
Все сделал, все работает. Тема закрыта.
 
Верх