ищу готовый советник на 2 машках

 

ищу готовый советник на 2 машках для подбора наилучших настроек через тестер

советник должен работать по принципу: 

ма1 пересекает ма2 снизу вверх - покупка

ма1 пересекает ма2 сверху вниз - продажа

ничего другого на данный момент не нужно 

коды найденные в интернет меня не устраивают

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

заказывать что-то через фриланс нет желания так как интересует общение с людьми ранее работавшими по данной теме 

 
partner83:

ищу готовый советник на 2 машках для подбора наилучших настроек через тестер

советник должен работать по принципу: 

ма1 пересекает ма2 снизу вверх - покупка

ма1 пересекает ма2 сверху вниз - продажа

ничего другого на данный момент не нужно 

коды найденные в интернет меня не устраивают

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

заказывать что-то через фриланс нет желания так как интересует общение с людьми ранее работавшими по данной теме 

Я так понял, что под словами
"заказывать что-то через фриланс нет желания так как интересует общение с людьми ранее работавшими по данной теме"
вы имеете в виду что бы вам этот советник бесплатно предоставили? И почему вы решили, что в сервисе  фриланс с вами не будут общаться?
 
partner83:

ищу готовый советник на 2 машках для подбора наилучших настроек через тестер

советник должен работать по принципу: 

ма1 пересекает ма2 снизу вверх - покупка

ма1 пересекает ма2 сверху вниз - продажа

ничего другого на данный момент не нужно 

коды найденные в интернет меня не устраивают

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

заказывать что-то через фриланс нет желания так как интересует общение с людьми ранее работавшими по данной теме 

Ну у меня есть, делал как-то, + ADX прикручен. 
 
c ADX тоже хорошо. буду благодарен если дадите потестировать.
 
Вот делал на машках заготовку, но период мувингов тут меняется в зависимости от индикатора Std, типа что бы флэтовые сигналы фильтровать и все такое. Здесь прикручен неудачно мартингейл, если его открутить то будет почти то что надо :) Пока не было времени развить тему. МБ идея покажется вам интересной и вы сделаете из нее грааль и подарите мне.
 

Вот, вычистил всё. Параметры для Std и MA задаются в массивах:

По 10 значений в каждом массиве. Например, если std будет 0.001, то будет выбран мувинг с периодом 20, а второй мувинг будет произведением первого на MAmultiplier, по умолчанию 2. И так далее, для каждого значения std. Затем сигнал при пересечении 1-го и 2-го мувингов на втором и на первом баре, нулевой убрал т.к. будет много ложных сигналов. Подбирайте параметры с удовольствием. Можно значения массивов вынести во внешние переменные и подбирать через оптимизатор, вариантов много.

DevLevels devation_set={0.001,0.0009,0.0008,0.0007,0.0006,0.0005,0.0004,0.0003,0.0002,0.0000}; Массив значений старндартного отклонения
MALevels ma_set={20,18,16,14,12,10,8,6,4,2}; массив значений мувингов, которые меняются в зависимости от текущего значения std

 Весь код:

//+------------------------------------------------------------------+
//|                                                   AdaptiveMA.mq4 |
//|                                                      dmitrievsky |
//|                         https://www.mql5.com/ru/users/dmitrievsky|
//+------------------------------------------------------------------+

#property version   "1.00"
#property strict

int MAperiod;
int MA2period;
input int MAmultiplier=2;
double devation;
input double MaximumRisk=0.1;
double Lots=0.01;
input double LotsMultiplier=3;
input int OrderMagic=745823;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct DevLevels
  {
   double            d1,d2,d3,d4,d5,d6,d7,d8,d9,d10;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct MALevels
  {
   int               m1,m2,m3,m4,m5,m6,m7,m8,m9,m10;
  };
DevLevels devation_set={0.001,0.0009,0.0008,0.0007,0.0006,0.0005,0.0004,0.0003,0.0002,0.0000};
MALevels ma_set={20,18,16,14,12,10,8,6,4,2};
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   CalculateMA();
   TradeFunction();
   CloseOrders();
//---
  }
//+------------------------------------------------------------------+

void TradeFunction()
  {
   double Loots=LotsOptimized();

   if(MAsignals()==0)
     {
      if(CountOrders(0)==0 && CountOrders(1)==0)
        {
         if(OrderSend(Symbol(),OP_BUY,Loots,Ask,2,0,0,NULL,OrderMagic,0,Green)==false) GetLastError();
        }
     }

   if(MAsignals()==1)
     {
      if(CountOrders(1)==0 && CountOrders(0)==0)
        {
         if(OrderSend(Symbol(),OP_SELL,Loots,Bid,2,0,0,NULL,OrderMagic,0,Green)==false) GetLastError();
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseOrders()
  {

   for(int b=OrdersTotal()-1; b>=0; b--)
     {
      if(OrderSelect(b,SELECT_BY_POS)==true)
        {
         if(MAsignals()==0)if(OrderType()==1 && OrderMagicNumber()==OrderMagic) {if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red) == false) GetLastError();}
         if(MAsignals()==1)if(OrderType()==0 && OrderMagicNumber()==OrderMagic) {if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red) == false) GetLastError();}
        }
     }


  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int MAsignals()
  {
   int signal=2;
   if(iMA(NULL,0,MAperiod,0,MODE_SMA,PRICE_CLOSE,0)>iMA(NULL,0,MA2period,0,MODE_SMA,PRICE_CLOSE,0)
      && iMA(NULL,0,MAperiod,0,MODE_SMA,PRICE_CLOSE,1)<iMA(NULL,0,MA2period,0,MODE_SMA,PRICE_CLOSE,1)) signal=0;
   if(iMA(NULL,0,MAperiod,0,MODE_SMA,PRICE_CLOSE,0)<iMA(NULL,0,MA2period,0,MODE_SMA,PRICE_CLOSE,0)
      && iMA(NULL,0,MAperiod,0,MODE_SMA,PRICE_CLOSE,1)>iMA(NULL,0,MA2period,0,MODE_SMA,PRICE_CLOSE,1)) signal=1;
   return(signal);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CalculateMA()
  {
   devation=iStdDev(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);
   if(devation>=devation_set.d10)
     {
      MAperiod=ma_set.m10;
      if(devation>=devation_set.d9)
        {
         MAperiod=ma_set.m9;
         if(devation>=devation_set.d8)
           {
            MAperiod=ma_set.m8;
            if(devation>=devation_set.d7)
              {
               MAperiod=ma_set.m7;
               if(devation>=devation_set.d6)
                 {
                  MAperiod=ma_set.m6;
                  if(devation>=devation_set.d5)
                    {
                     MAperiod=ma_set.m5;
                     if(devation>=devation_set.d4)
                       {
                        MAperiod=ma_set.m4;
                        if(devation>=devation_set.d3)
                          {
                           MAperiod=ma_set.m3;
                           if(devation>=devation_set.d2)
                             {
                              MAperiod=ma_set.m2;
                              if(devation>=devation_set.d1)
                                {
                                 MAperiod=ma_set.m1;
                                }
                             }
                          }
                       }
                    }
                 }
              }
           }
        }
     }
   MA2period=MAperiod*MAmultiplier;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   double risk=MaximumRisk;
   if(risk>0.12) risk=0.12;
   lot=NormalizeDouble(AccountBalance()*risk/1000.0,2);
   if(lot<0.01) lot=0.01;
   if(lot>25) lot=25;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int a)
  {
   int result=0;
   for(int k=0; k<OrdersTotal(); k++)
     {
      if(OrderSelect(k,SELECT_BY_POS)==true)
        {
         if(OrderType()==a && OrderMagicNumber()==OrderMagic)
           {result++;}
         else
           {}
           }
        }
      return(result);
     }
//+------------------------------------------------------------------+

 Результат за 2 мес на м15:

 
 
Maxim Dmitrievsky:
А че, для ребейта пойдет)
 
Oleg Tsarkov:
А че, для ребейта пойдет)
Да че ребейт этот, надо делать что бы зарабатывало. Здесь сам принцип интересен - создавать зависимости одних параметров от других, получается адаптивная система, можно через нечеткую логику присваивать значения. Как допишу другого робота, попробую этот повертеть.
 

Maxim Dmitrievsky:

...Весь код...

Сделала лот статичным - за этот год eur/usd:

на M5 - 28 непрерывных проигрышей,

на H1 - 10 непрерывных проигрышей.

Уменьшить бы количество непрерывных проигрышей, то можно ставить мартин.

 
Попробуйте расчитывать два мувинга на основе баланса и от его пересечения делать лот больше или меньше. 
Причина обращения: