Navigation:Home > Content >

Shining_pearl_4.1.mq4

Time: 2016-03-05 | Download file:Shining_pearl_4.1.mq4

#include 

extern string t1 = " Shining pearl 4.1 (-=Сияющая жемчужина версия 4.1=-)";
extern string t2 = "**************************************************************************************";
extern double Parametr_1 = 5.0;
extern double Parametr_2 = 5.0;
extern int Parametr_3 = 10;
extern string t4 = "**************************************************************************************";
extern string t5 = "Opдера";
extern int TakeProfit = 75;
extern int Stoploss = 25;
extern string t6 = "Тралить удавкой:Tral_ydavka=true,иначе обычный трал";
bool gi_144 = TRUE;
extern string t7 = " Тралить в убытке";
bool gi_156 = TRUE;
extern string t8 = "Обычный трал";
int gi_168 = 10;
extern string t9 = "Параметры трала для трала-удавки:";
extern string t10 = "Внимание! Pribil_1 меньше, чем Pribil_2 !!!";
extern string t11 = "Если прибыль по позе больше\'Pribil_1\'трал=TrailingStop1";
int gi_196 = 70;
int gi_200 = 35;
extern string t12 = "Если прибыль по позе больше\'Pribil_2\'трал=TrailingStop2";
int gi_212 = 100;
int gi_216 = 20;
int g_time_220 = 0;
extern string t13 = "**************************************************************************************";
extern string t14 = "Управление капиталом";
extern string t15 = " Если Ваш брокер допускает лоты типа 0,0X то \'mini_forex=true\'";
extern bool mini_forex = FALSE;
extern string t16 = "Выбор лота";
extern string t17 = "Metod_lot=0 - фиксированный";
extern string t18 = "Metod_lot=1 - процент от депозита";
extern string t19 = "Metod_lot=2 - фракционно-пропорциональный";
extern string t20 = "Metod_lot=3 - фракционно-фиксированный";
extern int Metod_lot = 1;
extern string t21 = "Фиксированный размер лота";
extern double Lots = 0.1;
extern string t22 = "Процент от депозита";
extern int LotsPercent = 5;
extern string t23 = "Параметры для Metod_lot=2 и Metod_lot=3 ";
extern string t24 = "Коэффициент приращения депозита";
extern int LotsDeltaDepo = 500;
extern string t25 = "Размер депозита для одного минилота";
extern int LotsDepoForOne = 500;
extern string t26 = "Максимальное количество минилотов";
extern int LotsMax = 1000;
extern string t27 = "**************************************************************************************";
extern string t28 = "Магическое число ордера";
extern int MAGIC = 19850925;
extern string t29 = " Время (в сек.) ожидания ответа на запрос ДЦ для открытия позы ";
extern int Son = 10;
int gi_unused_400 = 1;
extern string t30 = "Проскальзывание";
extern int slippage = 3;
extern string t31 = "Параметры полезные при оптимизации параметров в тестере";
extern string t32 = "Не проводить оптимизацию если:... ";
extern string t33 = " если таке-профит меньше стоп-лосся";
extern bool stop_prof = TRUE;
extern string t34 = "если трэйлинг-стоп больше стоп-лосся";
extern bool stop_tral = TRUE;
bool gi_456 = TRUE;

int start() {
   int l_cmd_16;
   int l_hist_total_20;
   double l_isar_28;
   double l_iadx_36;
   if (stop_prof == TRUE && TakeProfit < Stoploss) return (0);
   if (stop_tral == TRUE && gi_168 > Stoploss) return (0);
   if (gi_456 == TRUE && gi_168 > TakeProfit) return (0);
   if (Parametr_1 > Parametr_2) return (0);
  
   
   if (OrdersTotal() > 0) {
      if (gi_144 == TRUE) Trailingstoplossi2();
      else Trailingstoplossi();
   }
   if (Time[0] == g_time_220) return (0);
   g_time_220 = Time[0];
   int l_ord_total_4 = OrdersTotal();
   int l_ticket_8 = -1;
   for (int l_pos_12 = 0; l_pos_12 < l_ord_total_4; l_pos_12++) {
      OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES);
      if (OrderType() <= OP_SELL && OrderSymbol() == Symbol()) l_ticket_8 = OrderTicket();
   }
   if (l_ticket_8 < 0) {
      l_cmd_16 = 0;
      l_hist_total_20 = OrdersHistoryTotal();
      for (int l_pos_24 = 0; l_pos_24 < l_hist_total_20; l_pos_24++) {
         if (OrderSelect(l_pos_24, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
            Print("Ошибка");
            break;
         }
         if (OrderSymbol() != Symbol() || OrderType() > OP_SELL) continue;
         if (OrderProfit() > 0.0) l_cmd_16 = OrderType();
         else {
            if (OrderType() == OP_SELL) {
               l_cmd_16 = 0;
               continue;
            }
            l_cmd_16 = 1;
         }
      }
      HideTestIndicators(TRUE);
      l_isar_28 = iSAR(NULL, 0, Parametr_1 / 100.0, Parametr_2 / 10.0, 0);
      l_iadx_36 = iADX(NULL, 0, Parametr_3, PRICE_CLOSE, MODE_MAIN, 0);
      HideTestIndicators(FALSE);
      if (l_cmd_16 == OP_BUY) {
         if (l_isar_28 < Close[0] && l_iadx_36 < 20.0) {
            l_ticket_8 = OrderSend(Symbol(), OP_BUY, LotsOptimized(), Ask, slippage, Bid - Stoploss * Point, Ask + TakeProfit * Point, "Shining pearl 4.1 (-=Сияющая жемчужина версия 4.1=-)", 16384, 0, Blue);
            if (l_ticket_8 > 0) {
               if (OrderSelect(l_ticket_8, SELECT_BY_TICKET, MODE_TRADES)) Print("Покупка! : ", OrderOpenPrice());
            } else Print(ErrorDescription(GetLastError()));
            return (0);
         }
      } else {
         if (l_isar_28 > Close[0] && l_iadx_36 < 20.0) {
            l_ticket_8 = OrderSend(Symbol(), OP_SELL, LotsOptimized(), Bid, slippage, Ask + Stoploss * Point, Bid - TakeProfit * Point, "Shining pearl 4.1 (-=Сияющая жемчужина версия 4.1=-)", 16384, 0, Red);
            if (l_ticket_8 > 0) {
               if (OrderSelect(l_ticket_8, SELECT_BY_TICKET, MODE_TRADES)) Print("Продажа! : ", OrderOpenPrice());
            } else Print(ErrorDescription(GetLastError()));
            return (0);
         }
      }
   }
   return (0);
}

double LotsOptimized() {
   double ld_0;
   int li_8;
   if (Metod_lot == 0) ld_0 = Lots;
   if (Metod_lot == 1) ld_0 = MathCeil(AccountFreeMargin() / 10000.0 * LotsPercent) / 10.0;
   if (Metod_lot == 2) {
      li_8 = LotsDepoForOne;
      for (double ld_12 = 2; ld_12 <= LotsMax; ld_12++) {
         li_8 = li_8 + ld_12 * LotsDeltaDepo;
         if (li_8 > AccountFreeMargin()) {
            ld_0 = (ld_12 - 1.0) / 10.0;
            break;
         }
      }
   }
   if (Metod_lot == 3) ld_0 = MathCeil((AccountFreeMargin() - LotsDepoForOne) / LotsDeltaDepo) / 10.0;
   double ld_20 = MarketInfo(Symbol(), MODE_MAXLOT);
   if (ld_0 > MarketInfo(Symbol(), MODE_MAXLOT)) ld_0 = ld_20;
   if (ld_0 < MarketInfo(Symbol(), MODE_MINLOT)) ld_0 = MarketInfo(Symbol(), MODE_MINLOT);
   int li_28 = 1;
   if (mini_forex == TRUE) li_28 = 2;
   ld_0 = NormalizeDouble(ld_0, li_28);
   return (ld_0);
}

void Trailingstoplossi() {
   int l_ord_total_4 = OrdersTotal();
   for (int l_pos_0 = 0; l_pos_0 < l_ord_total_4; l_pos_0++) {
      OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC) {
         if (OrderType() == OP_BUY) {
            if (gi_168 <= 0) continue;
            if (!(Bid - OrderOpenPrice() > Point * gi_168 || gi_156 == TRUE)) continue;
            if (OrderStopLoss() >= Bid - Point * gi_168) continue;
            OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - Point * gi_168, Digits), OrderTakeProfit(), 0, Green);
         } else {
            if (gi_168 <= 0) continue;
            if (!(OrderOpenPrice() - Ask > Point * gi_168 || gi_156 == TRUE)) continue;
            if (OrderStopLoss() <= Ask + Point * gi_168) continue;
            OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + Point * gi_168, Digits), OrderTakeProfit(), 0, Red);
            return;
         }
      }
   }
}

void Trailingstoplossi2() {
   int l_ord_total_4 = OrdersTotal();
   for (int l_pos_0 = 0; l_pos_0 < l_ord_total_4; l_pos_0++) {
      OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC) {
         if (OrderType() == OP_BUY) {
            if (gi_168 <= 0) continue;
            if (Bid - OrderOpenPrice() > Point * gi_212) {
               if (OrderStopLoss() < Bid - Point * gi_216) {
                  OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - Point * gi_216, Digits), OrderTakeProfit(), 0, Green);
                  return;
               }
            }
            if (Bid - OrderOpenPrice() > Point * gi_196) {
               if (OrderStopLoss() < Bid - Point * gi_200) {
                  OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - Point * gi_200, Digits), OrderTakeProfit(), 0, Green);
                  return;
               }
            }
            if (!(Bid - OrderOpenPrice() > Point * gi_168 || gi_156 == TRUE)) continue;
            if (OrderStopLoss() >= Bid - Point * gi_168) continue;
            OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - Point * gi_168, Digits), OrderTakeProfit(), 0, Green);
         } else {
            if (gi_168 <= 0) continue;
            if (OrderOpenPrice() - Ask > Point * gi_212) {
               if (OrderStopLoss() > Ask + Point * gi_216) {
                  OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + Point * gi_216, Digits), OrderTakeProfit(), 0, Red);
                  return;
               }
            }
            if (OrderOpenPrice() - Ask > Point * gi_196) {
               if (OrderStopLoss() > Ask + Point * gi_200) {
                  OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + Point * gi_200, Digits), OrderTakeProfit(), 0, Red);
                  return;
               }
            }
            if (!(OrderOpenPrice() - Ask > Point * gi_168 || gi_156 == TRUE)) continue;
            if (OrderStopLoss() <= Ask + Point * gi_168) continue;
            OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + Point * gi_168, Digits), OrderTakeProfit(), 0, Red);
            return;
         }
      }
   }
}

Recommend