Ищу мультииндикаторный шаблон советник

 

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

 
советник без системы это как?
 

Это когда много индикаторов встроенно настройки вынесены и юзер выбирает параметры индюков для входа + параметры сделки. Тут точно ктото выкладывал

 

Хм, не помню.

может iCustom ? или UTS ?

 
Да нет точно не он. Там именно все стандартные индюки в одной сове
 
тогда не видел, Сорри
 

К сож. не могу привести ссылку. Я брал этот код здесь, в разделе CODE BASE , - может пригодится:

 
 
extern string s1 = "EURUSD";
extern int    x1 = 100;
extern int    x2 = 100;
extern int    x3 = 100;
extern int    x4 = 100;
extern double sl1 = 60;
extern int    tp1 = 60;
extern string s2 = "GBPJPY";
extern int    x5 = 100;
extern int    x6 = 100;
extern int    x7 = 100;
extern int    x8 = 100;
extern double sl2 = 60;
extern int    tp2 = 60;
extern string s3 = "AUDNZD";
extern int    x9  = 100;
extern int    x10 = 100;
extern int    x11 = 100;
extern int    x12 = 100;
extern double sl3 = 60;
extern int    tp3 = 60;
extern double    lot           = 0.2;
extern double    sl            = 85;
extern int       MagicNumber   = 777;
static int       prevtime = 0;
 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   if (Time[0] == prevtime) return(0);
       prevtime = Time[0];
//---
      double s1_bid = MarketInfo(s1,MODE_BID);
      double s1_ask = MarketInfo(s1,MODE_ASK);
      double s2_bid = MarketInfo(s2,MODE_BID);
      double s2_ask = MarketInfo(s2,MODE_ASK);
      double s3_bid = MarketInfo(s3,MODE_BID);
      double s3_ask = MarketInfo(s3,MODE_ASK);
 
   if(retOrders(s1)==0 && perceptron(s1,x1,x2,x3,x4)>0){
         OrderSend(s1,OP_BUY, lot, s1_ask, 3, s1_bid - sl1 * Point, s1_bid
+ tp1 * Point, "", MagicNumber, 0, Blue);}else{prevtime = Time[1];}
   if(retOrders(s2)==0 && perceptron(s2,x5,x6,x7,x8)>0){
         OrderSend(s2,OP_BUY, lot, s2_ask, 3, s2_bid - sl2 * Point, s2_bid
 + tp2 * Point, "", MagicNumber, 0, Blue);}else{prevtime = Time[1];}
    if(retOrders(s3)==0 && perceptron(s3,x9,x10,x11,x12)>0){
         OrderSend(s3,OP_BUY, lot, s3_ask, 3, s3_bid - sl3 * Point, s3_bid
 + tp3 * Point, "", MagicNumber, 0, Blue);}else{prevtime = Time[1];}       
    if(retOrders(s1)==0 && perceptron(s1,x1,x2,x3,x4)<0){
        OrderSend(s1,OP_SELL,lot, s1_bid, 3, s1_ask + sl1 * Point, s1_ask
 - tp1 * Point, "", MagicNumber, 0, Red);}else{prevtime = Time[1];}
   if(retOrders(s2)==0 && perceptron(s2,x5,x6,x7,x8)<0){
         OrderSend(s2,OP_SELL,lot, s2_bid, 3, s2_ask + sl2 * Point, s2_ask 
- tp2 * Point, "", MagicNumber, 0, Red);}else{prevtime = Time[1];}
    if(retOrders(s3)==0 && perceptron(s3,x9,x10,x11,x12)<0){
         OrderSend(s3,OP_SELL,lot, s3_bid, 3, s3_ask + sl3 * Point, s3_ask
- tp3 * Point, "", MagicNumber, 0, Red);}else{prevtime = Time[1];}       
////////////////////////////////////////////////////////////////////////////////////////////
   return(0);
  }
//+------------------------------------------------------------------+
double perceptron(string Sy,int y1,int y2,int y3,int y4) 
  {
   double w1 = y1 - 100;
   double w2 = y2 - 100;
   double w3 = y3 - 100;
   double w4 = y4 - 100;
   double a1 = iAC(Sy, 0, 0);
   double a2 = iAC(Sy, 0, 7);
   double a3 = iAC(Sy, 0, 14);
   double a4 = iAC(Sy, 0, 21);
   return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
   }
//+------------------------------------------------------------------+
int retOrders(string sym){
 
   int total = OrdersTotal();
   int OrderCount=0;
   for(int i = 0; i <= total; i++) 
     {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if( OrderMagicNumber() == MagicNumber && OrderSymbol() == sym) 
         {
          OrderCount++;
         }
      }
     return(OrderCount);
 }
 //+------------------------------------------------------------------+
 
mydone:

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


Вот еще тоже нечто подобное : 

https://www.mql5.com/ru/forum/115644 

 

Спасибо большое Леонид, но это все не то к сожалению.

 
mydone:

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


#property copyright "Scriptong"
#property link "scriptong@mail.ru"

//---- input parameters
extern double Lots = 0.1; // Объем открываемой позиции
extern int TakeProfit = 0; // Профит в пунктах. Если 0, то не устанавливается
extern int StopLoss = 0; // Стоп в пунктах. Если 0, то не устанавливается
extern int TrailingStop1 = 30; // Безубыток
extern int TrailingStop2 = 50; // Классический трейлинг-стоп
extern string A1 = "Настройки ADX";
extern bool UseADX = True; //Если True, то использовать сигналы ADX, иначе - нет
extern int ADXPeriod = 21;
extern int ADXPrice = 0; // Цена, по которой считается ADX:
// 0 - Close
// 1 - Open
// 2 - High
// 3 - Low
// 4 - Median Price
// 5 - Typical Price
// 6 - Weigthed Price
extern string A2 = "==========================";

extern string A3 = "Настройки Bollinger Bands";
extern bool UseBollinger = False;
extern int BandsPeriod = 20;
extern int BandsShift = 0;
extern int BandsDeviation = 2;
extern int BandsPrice = 0;
extern string A4 = "==========================";

extern string A5 = "Настройки CCI";
extern bool UseCCI = False;
extern int CCIPeriod = 14;
extern int CCIPrice = 0;
extern int CCIHighLevel = 100;
extern int CCILowLevel = -100;
extern string A6 = "==========================";

extern string A7 = "Настройки пересечения MA";
extern bool UseCrossMA = False;
extern int MAFastPeriod = 34;
extern int MAFastPrice = 0;
extern int MAFastMethod = 0; // Метод MA:
// 0 - Simple MA
// 1 - Exponential MA
// 2 - Smoothed MA
// 3 - Linear weighted MA
extern int MAFastShift = 0;
extern int MASlowPeriod = 89;
extern int MASlowPrice = 0;
extern int MASlowMethod = 0;
extern int MASlowShift = 0;
extern string A8 = "==========================";

extern string A9 = "Настройки индикатора Parabolic SAR";
extern bool UseSAR = False;
extern double SARStep = 0.01;
extern double SARMaximum = 0.03;
extern string A10 = "==========================";

extern string A11 = "Настройки индиктора Standard Deviation";
extern bool UseStDev = False;
extern int StDevPeriod = 21;
extern int StDevPrice = 0;
extern int StDevMethod = 0;
extern int StDevShift = 0;
extern string A12 = "==========================";

extern string A13 = "Настройки индикатора MACD";
extern bool UseMACD = False;
extern int MACDFast = 12;
extern int MACDSlow = 26;
extern int MACDSignal = 9;
extern int MACDPrice = 0;
extern string A14 = "==========================";

extern string A15 = "Настройки индикатора DeMarker";
extern bool UseDeMarker = False;
extern int DMPeriod = 24;
extern double DMHighLevel = 0.7;
extern double DMLowLevel = 0.3;
extern string A16 = "==========================";

extern string A17 = "Настройки индикатора Envelopes";
extern bool UseEnvelopes = False;
extern int EnvPeriod = 21;
extern int EnvShift = 0;
extern int EnvMethod = 0;
extern int EnvPrice = 0;
extern double EnvDeviation = 0.5;
extern string A18 = "==========================";

extern string A19 = "Настройки индикатора Force Index";
extern bool UseForceIndex = False;
extern int FIPeriod = 13;
extern int FIMethod = 0;
extern int FIPrice = 0;
extern string A20 = "==========================";

extern string A21 = "Настройки индикатора Momentum";
extern bool UseMomentum = False;
extern int MomPeriod = 14;
extern int MomPrice = 0;
extern string A22 = "==========================";

extern string A23 = "Настройки индикатора OsMA";
extern bool UseOsMA = False;
extern int OsMAFast = 12;
extern int OsMASlow = 26;
extern int OsMASignal = 9;
extern int OsMAPrice = 0;
extern string A24 = "==========================";

extern string A25 = "Настройки индикатора RSI";
extern bool UseRSI = False;
extern int RSIPeriod = 21;
extern int RSIPrice = 0;
extern int RSIHighLevel = 70;
extern int RSILowLevel = 30;
extern string A26 = "==========================";

extern string A27 = "Настройки индикатора RVI";
extern bool UseRVI = False;
extern int RVIPeriod = 21;
extern string A28 = "==========================";

extern string A29 = "Настройки индикатора Stochastic";
extern bool UseStochastic = False;
extern int StochK = 5;
extern int StochD = 3;
extern int StochSlowing = 10;
extern int StochPrice = 0;
extern int StochMethod = 0;
extern string A30 = "==========================";

extern string A31 = "Настройки индикатора Williams Percent Range";
extern bool UseWPR = False;
extern int WPRPeriod = 24;
extern double WPRHighLevel = -20;
extern double WPRLowLevel = -80;
extern string A32 = "==========================";

extern string A33 = "Настройки осциллятора Awesome";
extern bool UseAO = False;
extern string A34 = "==========================";

extern string A35 = "Настройки осциллятора Accelerator/Decelerator";
extern bool UseAC = False;
extern string A36 = "==========================";

extern string A37 = "Настройки индикатора Fractals";
extern bool UseFractals = False;
extern string A38 = "==========================";

extern string A39 = "Настройки индикатора Alligator";
extern bool UseAlligator = False;
extern int JawPeriod = 13;
extern int JawShift = 8;
extern int TeethPeriod = 8;
extern int TeethShift = 5;
extern int LipsPeriod = 5;
extern int LipsShift = 3;
extern int AlligatorMethod = 2;
extern int AlligatorPrice = 4;
extern string A40 = "==========================";

extern string A41 = "Настройки индикатора Bill Williams MFI";
extern bool UseBWMFI = False;
extern string A42 = "==========================";

extern string OpenOrderSound = "ok.wav"; // Звук для открытия ордера
extern int MagicNumber = 17589 ;

bool Activate, FreeMarginAlert, FatalError;
double Tick, Spread, StopLevel, MinLot, MaxLot, LotStep;
datetime LastBar, LastBuySignal, LastSellSignal, LastMess;
int Signal, UseInd;
string Comm;

 


//+-------------------------------------------------------------------------------------+
//| Функция инициализации эксперта |
//+-------------------------------------------------------------------------------------+
int init()
{
//----
Activate = False;
// - 1 - == Сбор информации об условиях торговли ========================================
Tick = MarketInfo(Symbol(), MODE_TICKSIZE); // минимальный тик
Spread = ND(MarketInfo(Symbol(), MODE_SPREAD)*Point); // текщий спрэд
StopLevel = ND(MarketInfo(Symbol(), MODE_STOPLEVEL)*Point); // текущий уровень стопов
MinLot = MarketInfo(Symbol(), MODE_MINLOT); // минимальный разрешенный объем сделки
MaxLot = MarketInfo(Symbol(), MODE_MAXLOT); // максимальный разрешенный объем сделки
LotStep = MarketInfo(Symbol(), MODE_LOTSTEP); // шаг приращения объема сделки
// - 1 - == Окончание блока =============================================================

// - 2 - == Приведение объема сделки к допустимому и проверка корректности объема =======
Lots = MathRound(Lots/LotStep)*LotStep; // округление объема до ближайшего допустимого
if(Lots < MinLot || Lots > MaxLot) // объем сделки не меньше MinLot и не больше MaxLot
{
Comment("Параметром Lots был задан неправильный объем сделки! Советник отключен!");
return(0);
}
// - 2 - == Окончание блока =============================================================

UseInd = UseADX + UseBollinger + UseCCI + UseCrossMA + UseSAR + UseStDev + UseMACD +
UseDeMarker + UseEnvelopes + UseForceIndex + UseMomentum + UseOsMA + UseRSI +
UseRVI + UseStochastic + UseWPR + UseAO + UseAC + UseFractals + UseAlligator+
UseBWMFI;

Comm = "Выбраны следующие индикаторы:\n";
if (UseADX) Comm = Comm + "ADX\n";
if (UseBollinger) Comm = Comm + "Bollinger Bands\n";
if (UseCCI) Comm = Comm + "CCI\n";
if (UseCrossMA) Comm = Comm + "CrossMA\n";
if (UseSAR) Comm = Comm + "Parabolic\n";
if (UseStDev) Comm = Comm + "StDev\n";
if (UseMACD) Comm = Comm + "MACD\n";
if (UseDeMarker) Comm = Comm + "DeMarker\n";
if (UseForceIndex) Comm = Comm + "ForceIndex\n";
if (UseMomentum) Comm = Comm + "Momentum\n";
if (UseOsMA) Comm = Comm + "OsMA\n";
if (UseRSI) Comm = Comm + "RSI\n";
if (UseRVI) Comm = Comm + "RVI\n";
if (UseStochastic) Comm = Comm + "Stochastic\n";
if (UseWPR) Comm = Comm + "WPR\n";
if (UseAO) Comm = Comm + "AO\n";
if (UseAC) Comm = Comm + "AC\n";
if (UseFractals) Comm = Comm + "Fractals\n";
if (UseAlligator) Comm = Comm + "Alligator\n";
if (UseBWMFI) Comm = Comm + "Bill Williams MFI\n";

Comment(Comm);

LastBuySignal = 0;
LastSellSignal = 0;
LastBar = 0;

Activate = True; // Все проверки успешно завершены, возводим флаг активизации эксперта

//----
return(0);
}

//+-------------------------------------------------------------------------------------+
//| Функция деинициализации эксперта |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
Comment("");
//----
return(0);
}

//+--------------------------------------------------------------------------------------+
//| Двухуровневый трейлинг-стоп |
//| TrailingStop1 - выставляется один раз после достижения нужного кол-ва пунктов прибыли|
//| TrailingStop2 - движущийся. Включается после отработки трейлинг-стопа первого уровня |
//+--------------------------------------------------------------------------------------+
void TrailingStopDoubleLevel()
{
for (int i = 0; i < OrdersTotal(); i++)
if (OrderSelect(i, SELECT_BY_POS))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() < 2)
{
if (!WaitForTradeContext()) break;
// Блок 1. Нормализация основных характеристик позиции -----------------------------------
RefreshRates();
double OpPrice = ND(OrderOpenPrice()); // Приведение цены открытия к нужной точности
double SL = ND(OrderStopLoss()); // Приведение стоп-приказа к нужной точности
double NBid = ND(Bid);
double NAsk = ND(Ask);
// Блок 1. -------------------------------------------------------------------------------

// Блок 2. Классический трейлинг длинной позиции -----------------------------------------
if(OrderType() == OP_BUY)
if(SL >= OpPrice && TrailingStop2 != 0) // Если стоп перенесен в безубыток
{
if(NBid > ND(Tick*TrailingStop2+SL) && // Если BID больше стопа на TrailingStop2
TrailingStop2 > StopLevel/Point) // И TrailingStop2 больше уровня стопов
if(WaitForTradeContext()) // Ждем освобождение торгового потока
if(!OrderModify(OrderTicket(), 0,
ND(NBid-TrailingStop2*Tick), OrderTakeProfit(), 0)) // Модификация
Print("Не удалось изменить ордер BUY. Второй трал. Ошибка №",
GetLastError(), ", Старый: ", SL, ", Новый: ",
NBid-TrailingStop2*Tick); // Развернутое сообщение об ошибке
}
// Блок 2. -------------------------------------------------------------------------------

// Блок 3. Перенос стопа в безубыток длинной позиции -------------------------------------
else
{
if(ND(OpPrice+TrailingStop1*Tick) < NBid && // Если BID больше цены открытия
TrailingStop1 > StopLevel/Point) // на TrailingStop1 пунктов и дальше, чем
if(WaitForTradeContext()) // уровень стопов
if(!OrderModify(OrderTicket(), 0, OpPrice,
OrderTakeProfit(), 0)) // модификация
Print("Не удалось изменить ордер BUY. Первый трал. Ошибка №", // сообщение
GetLastError(), ", Старый: ", SL, ", Новый: ", OpPrice);// в журнал
}
// Блок 3. -------------------------------------------------------------------------------

// Блок 4. Классический трейлинг короткой позиции ----------------------------------------
if(OrderType()==OP_SELL) // Для короткой позиции
if(OpPrice >= SL && SL != 0 && TrailingStop2 != 0) // Если стоп перенесен в безубыток
{
if(TrailingStop2 > StopLevel/Point && // TrailingStop2 больше уровня стопов
SL > ND(Tick*TrailingStop2+NAsk)) // и ASK ниже стопа на TrailingStop2 пунктов
if(WaitForTradeContext()) // Ожидаем освобождения торгового потока
if(!OrderModify(OrderTicket(), 0, ND(NAsk+TrailingStop2*Tick),
OrderTakeProfit(), 0)) // модификация
Print("Не удалось изменить ордер SELL. Второй трал. Ошибка №",
GetLastError(), ", Старый: ", SL, ", Новый: ", NAsk+TrailingStop2*Tick);
}
// Блок 4. -------------------------------------------------------------------------------

// Блок 5. Перенос стопа в безубыток короткой позиции ------------------------------------
else
{
if(OpPrice > ND(NAsk+Tick*TrailingStop1) && //ASK ниже открытия на TrailingStop1
TrailingStop1 > StopLevel/Point) // и на StopLevel пунктов
if(WaitForTradeContext()) // Ожидаем торговый поток
if(!OrderModify(OrderTicket(), 0, OpPrice, OrderTakeProfit(), 0))//модификация
Print("Не удалось изменить ордер SELL. Первый трал. Ошибка №",
GetLastError(), ", Старый: ", SL, ", Новый: ", OpPrice);
}
// Блок 5. -------------------------------------------------------------------------------
}
return(0);
}

Причина обращения: