ROBOTRADING - Форум по автоматизированной и ручной торговле на финансовых рынках.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Пипсюк MegaPipser

Сообщений 1 страница 2 из 2

1

Код:
extern double Lots = 0.1;
extern double Shift = 3.0;
extern double TradeStartHour = 21.0;
extern double TradeFinishHour = 7.0;
extern int TP = 2;
extern int SL = 10;
extern double MM = 30.0;
extern bool UseMM = FALSE;
extern int Magic = 7777777;
int g_bars_132;
//---------------------------------------------------------------------------
int start() {
   if (NumberOfOpenedPositions() > 0 && Bars == g_bars_132) {
      Comment(" ... Ждём закрытия позиции или следующего бара... ");
      return (0);
   }
   if (Hour() <= TradeStartHour && Hour() >= TradeFinishHour) {
      Comment(" ... Сейчас неторговое время ... ", 
      "\n", "Работаем с ", TradeStartHour + 1.0, " до ", TradeFinishHour, " часов");
      return (0);
   }
   Comment(" ");
   ContrMoveTrade();
   return (0);
}
//---------------------------------------------------------------------------
double GetLots() {
   if (UseMM) return (NormalizeDouble(MM * AccountFreeMargin() / 100000.0, 1));
   else return (Lots);
}
//---------------------------------------------------------------------------
int NumberOfOpenedPositions() {
   int l_ord_total_0 = OrdersTotal();
   int l_count_4 = 0;
   for (int l_pos_8 = 0; l_pos_8 < l_ord_total_0; l_pos_8++) {
      OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
         if (OrderType() == OP_BUY) {
            l_count_4++;
            if (Bid >= OrderOpenPrice() + TP * Point - Point / 2.0) {
               Print("....... Пытаемся закрыть лонг с рынка, Bid=", Bid);
               OrderClose(OrderTicket(), OrderLots(), Bid, 1, Red);
            } else {
               if (OrderTakeProfit() == 0.0 && Bid <= OrderOpenPrice() + MarketInfo(Symbol(), MODE_STOPLEVEL) * Point)
                  if (!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() + TP * Point, 0, CLR_NONE)) Print(".... Ошибка модификации buy ордера ", GetLastError());
            }
         }
         if (OrderType() == OP_SELL) {
            l_count_4++;
            if (Ask <= OrderOpenPrice() - TP * Point + Point / 2.0) {
               Print("....... Пытаемся закрыть шорт с рынка, Ask=", Ask);
               OrderClose(OrderTicket(), OrderLots(), Ask, 1, Green);
            } else {
               if (OrderTakeProfit() == 0.0 && Ask >= OrderOpenPrice() - MarketInfo(Symbol(), MODE_STOPLEVEL) * Point)
                  if (!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), OrderOpenPrice() - TP * Point, 0, CLR_NONE)) Print(".... Ошибка модификации sell ордера ", GetLastError());
            }
         }
      }
   }
   return (l_count_4);
}
//---------------------------------------------------------------------------
int GetSignal() {
   int li_ret_0 = 0;
   if ((Bid - Close[1]) / Point - Shift > 0.0) li_ret_0 = 1;
   if ((Close[1] - Bid) / Point - Shift > 0.0) li_ret_0 = -1;
   return (li_ret_0);
}
//---------------------------------------------------------------------------
void ContrMoveTrade() {
   double l_stoplevel_0;
   double l_price_8;
   int l_ticket_16;
   if (GetSignal() != 0) {
      if (AccountBalance() >= 200.0) {
         l_stoplevel_0 = MarketInfo(Symbol(), MODE_STOPLEVEL);
         if (GetSignal() == -1) {
            RefreshRates();
            if (TP > 0 && TP <= l_stoplevel_0 || TP == 0) l_price_8 = 0;
            else l_price_8 = Ask + TP * Point;
            Print("....... Пытаемся открыть лонг с рынка, Ask=", Ask);
            l_ticket_16 = OrderSend(Symbol(), OP_BUY, GetLots(), Ask, 1, Ask - SL * Point, l_price_8, "MegaPipser", Magic, 0, Green);
            if (l_ticket_16 >= 0) g_bars_132 = Bars;
         }
         if (GetSignal() == 1) {
            RefreshRates();
            if (TP > 0 && TP <= l_stoplevel_0 || TP == 0) l_price_8 = 0;
            else l_price_8 = Bid - TP * Point;
            Print("....... Пытаемся открыть шорт с рынка, Bid=", Bid);
            l_ticket_16 = OrderSend(Symbol(), OP_SELL, GetLots(), Bid, 1, Bid + SL * Point, l_price_8, "MegaPipser", Magic, 0, Red);
            if (l_ticket_16 >= 0) g_bars_132 = Bars;
         }
      }
   }
}

1. Код выкладываю как есть, без правки.
2. В коде могут быть ошибки (наверное).
3. Сообщите результаты (тесты или ...)

Отредактировано Andy_Kon (2008-12-30 17:24:41)

0

2

проверен на микро - брокер легко его глушит - вариант доработки - торговать отложниками

0