Пересечение двух средних.

 

Господа программисты,здавствуйте!

Прошу Вас ответить на вопрос.

Существует ли программа индикатора или советника,которая подает сигнал при пересечении двух средних.

Спасибо за ответ.

 
valex писал(а) >>

Господа программисты,здавствуйте!

Прошу Вас ответить на вопрос.

Существует ли программа индикатора или советника,которая подает сигнал при пересечении двух средних.

Спасибо за ответ.

Много.

 
Figar0 >>:

Много.

Например???

 

Анализ выполняется только после открытия очередного бара. Если нужен потиковый расчет, просто уберите условие в функции start().

Если быстрая скользящая выше, закрываем (если есть) ордер на продажу и открываемся в покупку.

Если медленная скользящая выше, закрываем (если есть) ордер на покупку и открываемся в продажу.

GetLuft() - функция позволяет задавать "люфт" пересечения машек.

//+------------------------------------------------------------------+
extern int FastPeriod = 1;
extern int FastShift  = 0;
extern int FastMetod  = 0;
extern int FastPrice  = 0;
extern int SlowPeriod = 2;
extern int SlowShift  = 0;
extern int SlowMetod  = 0;
extern int SlowPrice  = 0;

extern int TryCount   = 5;
extern int WaitTime   = 2;
extern int SlipPage   = 2;

//+------------------------------------------------------------------+
int init() {
  return(0);
}

//+------------------------------------------------------------------+
int deinit() {
  return(0);
}

//+------------------------------------------------------------------+
int start() {
  static datetime LastTimeBar = D'01.01.2004 00:00:00';
  if (LastTimeBar < Time[0]) {
    LastTimeBar = Time[0];
    DoAnalysis();
  }
  return(0);
}
//+------------------------------------------------------------------+

void DoAnalysis() {
  double Luft = GetLuft();
  double DeltaMA = iMA(Symbol(), 0, iMAFastPeriod, iMAFastShift, iMAFastMetod, iMAFastPrice, 1) - 
                   iMA(Symbol(), 0, iMASlowPeriod, iMASlowShift, iMASlowMetod, iMASlowPrice, 1);
  if (NormalizeDouble(DeltaMA, Digits) > NormalizeDouble(Luft, Digits)) DoBuy(); 
  else {
    if (NormalizeDouble(DeltaMA, Digits) < NormalizeDouble(-Luft, Digits)) DoSell();
  }
}  
//+------------------------------------------------------------------+

double GetLuft() {
  return (0.0);
}
//+------------------------------------------------------------------+

void DoBuy() {
  bool IsOrderClose, IsBuyOrderExist = false;

  for (int iOrder = OrdersTotal() - 1; iOrder >= 0; iOrder--) {
    if (OrderSelect(iOrder, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol() == Symbol()) {
        if (OrderType() == OP_BUY) IsBuyOrderExist = true;
        else {
          for (int Try1 = 1; Try1 <= TryCount; Try1++) {
            if (OrderType() == OP_SELL)
              IsOrderClose = OrderClose(OrderTicket(), OrderLots(), Ask, SlipPage);
            if (IsOrderClose) {
              Print("Ордер на продажу успешно закрыт!");
              break;
            }
            else {
              if (Try1 == TryCount) Print("Не удалось закрыть ордер!");
            }
            Sleep(WaitTime*1000);
          }
        }
      }  
    }
    else Print("Не удалось выбрать ордер!");
  }
  
  
  
  if (!IsBuyOrderExist) {
    for (int Try2 = 1; Try2 <= TryCount; Try2++) {
      int Ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, SlipPage, 0, 0);
      if (Ticket < 0) {
         if (Try2 == TryCount) Print("Не удалось открыть новый ордер!");
      }
      else {
        Print("Открыт ордер на покупку!");
        break;
      }
      Sleep(WaitTime*1000);
    }
  }
}
//+------------------------------------------------------------------+

void DoSell() {
  bool IsOrderClose, IsSellOrderExist = false;

  for (int iOrder = OrdersTotal() - 1; iOrder >= 0; iOrder--) {
    if (OrderSelect(iOrder, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol() == Symbol()) {
        if (OrderType() == OP_SELL)
          IsSellOrderExist = true;
        else {
          for (int Try1 = 1; Try1 <= TryCount; Try1++) {
            if (OrderType() == OP_BUY) IsOrderClose = OrderClose(OrderTicket(), OrderLots(), Bid, SlipPage);
            if (IsOrderClose) {
              Print("Ордер на покупку успешно закрыт!");
              break;
            }
            else {
              if (Try1 == TryCount) Print("Не удалось закрыть ордер!");
            }
            Sleep(WaitTime*1000);
          }
        }
      }  
    }
    else Print("Не удалось выбрать ордер!");
  }

  if (!IsSellOrderExist) {
    for (int Try2 = 1; Try2 <= TryCount; Try2++) {
      int Ticket = OrderSend(Symbol(), OP_SELL, 0.1, Bid, SlipPage, 0, 0);
      if (Ticket < 0) {
         if (Try2 == TryCount) Print("Не удалось открыть новый ордер!");
      }
      else {
        Print("Открыт ордер на продажу!");
        break;
      }
      Sleep(WaitTime*1000);
    }
  }
}
//+------------------------------------------------------------------+
 
voix_kas >>:

Анализ выполняется только после открытия очередного бара. Если нужен потиковый расчет, просто уберите условие в функции start().

Если быстрая скользящая выше, закрываем (если есть) ордер на продажу и открываемся в покупку.

Если медленная скользящая выше, закрываем (если есть) ордер на покупку и открываемся в продажу.

GetLuft() - функция позволяет задавать "люфт" пересечения машек.


Извините,я не программист.Скопировал Вашу прогу,скомпелировал,дает ошибки.Почему?

 

extern int iMAFastPeriod = 1;
extern int iMAFastShift = 0;
extern int iMAFastMetod = 0;
extern int iMAFastPrice = 0;
extern int iMASlowPeriod = 2;
extern int iMASlowShift = 0;
extern int iMASlowMetod = 0;
extern int iMASlowPrice = 0;

попробуйте
 
avatara >>:

extern int iMAFastPeriod = 1;
extern int iMAFastShift = 0;
extern int iMAFastMetod = 0;
extern int iMAFastPrice = 0;
extern int iMASlowPeriod = 2;
extern int iMASlowShift = 0;
extern int iMASlowMetod = 0;
extern int iMASlowPrice = 0;

попробуйте

Спасибо.Ошибок нет.Сейчас протестирую.Посмотрю,что покажет.В принципе мне нужен только звуковой сигнал при пересечении,а ТС своя.

 
valex >>:

Спасибо.Ошибок нет.Сейчас протестирую.Посмотрю,что покажет.В принципе мне нужен только звуковой сигнал при пересечении,а ТС своя.

Ребята,а будет ли в этой проге звук при пересечении??Мне кажется,что для звука должен быть оператор типа "sound".

 
Richie >>:

Это будет звук отлива депозита.:)

Правило Белого Мишки №52: Пересечение двух средних запаздывает сильнее, чем пересечение какой либо из средних с ценой.

valex, чем вас MACD не устраивает, нормальный индюкатор, сливает медленно, в соответствие с конвергенциями ?

Еще раз говорю,мне неважно сливает он или нет.И вообще мне не нужен советник,нужен индикатор.А если есть советник,то только с установкой ордера,чтобы я его мог отменить.Мне нужен звук,а запаздывает он или опережает,это уже дело третье.Я же не работаю только с двумя средними.

 
valex >>:

Ребята,а будет ли в этой проге звук при пересечении??Мне кажется,что для звука должен быть оператор типа "sound".

та поставьте его после или до открытия ордера...

В чём проблема?

 
Я такой же программист как и ты.Но я хоть не умничаю и не хамлю на форумах.
Причина обращения: