Jump to content

Напишу советник, скрипт, индикатор на MQL бесплатно


Capman
Message added by Capman,

Данная ветка предназначена для тех, кто ищет помощи специалистов в реализации своих торговых идей для терминала MetaTrader, а также для специалистов MQL, готовых воплощать интересные идеи трейдеров на безвозмездной основе.

 

Вот рекомендации, которым нужно следовать:

  • Идея торговой системы/индикатора/скрипта должна быть полностью описана Вами в сообщении.
  • Выкладывать декомпилированный код запрещено.
  • Программы, изготавливаемые по публичным заданиям, должны выкладываться с открытым кодом.
  • Конфиденциальность гарантируется только при заказе советника за деньги. Самым надежным способом заказа советника является сервис "Работа" от компании MetaQuotes. В этом разделе форума запрещено оставлять объявления о заказе или выполнении работ по написанию советников. Для этого используйте раздел "Реклама".
  • Если кого-либо из программистов заинтересует Ваша идея, или он просто захочет помочь, то займется написанием. Отсутствие ответов означает, что Ваша идея никого пока не заинтересовала. Повторять пост с просьбой в этом случае не нужно (такие посты нарушают правило форума 10).

Recommended Posts

zNatali1984

Всем привет! Помогите пожалуйста найти индикатор для MT4. Необходимо раскрашивать (или отмечать значком) бары/свечи заданным цветом по заданным параметрам (с возможностью выбора отдельного цвета для свечей вверх и отдельного цвета для свечей вниз):

  • размер тела в процентах от всей длины свечи
  • размер от O до H в процентах от всей длины свечи
  • размер от C до L в процентах от всей длины свечи
  • размер тела бара/свечи в пунктах

Что-то подобное, но с параметрами в пунктах есть. А вот в процентах не получилось найти 😢
Заранее всем спасибо за помощь 🙏😇

 

Link to post
Share on other sites
  • Replies 143
  • Created
  • Last Reply

Top Posters In This Topic

  • DVargo

    24

  • Ugar68

    16

  • Pirojoque Project

    13

  • BooGUY

    13

Top Posters In This Topic

Popular Posts

Код, отслеживающий спред, должен быть внедрён в торгующий советник, иначе выйдет добротный велосипед на костылях. Более того, от ТС поведение при событиях по спреду могут сильно различаться, т.е. подо

Если данные свечей больше нигде не будут нужны, то и запоминать их не зачем. Да и без массивов можно обойтись. Всё делать в момент открытия свечи. Если сформировалась свеча >= X, то переб

Советник называется cm partial closing position 1.Советник отслеживает открытые позиции по всем или заданному инструменту. 2 При достижении указанной прибыли закрывает часть позиции. Можно у

Posted Images

S_69

Нужен простой советник/эксперт на Мт5.

Чтобы сразу после взятия позиции выставлялся стоп и тейк на заданную величину пунктов.

Link to post
Share on other sites
  • 1 month later...
cmillion
29.08.2020 в 22:09, S_69 сказал:

Нужен простой советник/эксперт на Мт5.

Чтобы сразу после взятия позиции выставлялся стоп и тейк на заданную величину пунктов.

Советник работает только с тем инструментом в окне которого он установлен.

Если нужно чтобы советник сопровождал все открываемые Вами позиции, то ставьте его на все инструменты по которым торгуете.

Если у позиции уже открыт стоплосс в убыток (выше цены открытия для sell) и в параметрах установить стоплосс = 0 то стоплосс будет обнулен. Если же стоплосс переведен в безубыток, то параметр стоплосс на него не будет влиять. Т.е. стоплосс переносится только в более выгодное положение.

Если на момент установки скрипта тейкпрофит меньше текущей прибыли позиции, то тейкпрофит будет установлен от текущей цены. Т.е. в более выгодное положение. Но если цена будет откатываться, то тейкпрофит будет перемещен на заданное расстояние от цены открытия позиции.

В советнике всего 4 параметра

Stoploss - стоплоссв пунктах

Takeprofit - тейкпрофит 

NoLoss - безубыток - профит в пунктах при котором стоплосс позиции переносится на минимальную прибыль, если 0, то нет перевода в безубыток

MinProfitNoLoss - минимальная прибыль при переводе вбезубыток

 

NL

 

cm_SL NL TP.mq5


Пишу на заказ советники, индикаторы и скрипты для MT4 и MT5  

Link to post
Share on other sites
  • 3 weeks later...
Radislav

Короче, есть чужая старая идея, прикрутить к советнику в проверку открытия ордеров значения канала ТМА на тф H1 (индикатор ExtremeTMALine с параметрами TMAPeriod = 34;ATRMultiplier = 2.5; ATRPeriod = 100;)

+ трендовый WATR, будет мартингейл по тренду, это старая идея, но мне очень понравилась. Может есть кто сможет? Выложите плиз в *.mq4

Неделю уже бьюсь, чтобы понять как, С# проще.

Заранее спасибо

 

2sides_v5_0c1.mq4

Link to post
Share on other sites
EideMANIs

Доброго времени суток , уважаемые программисты, нужен индикатор определения разворотных точек по Ларри Уильямсу. Суть индикатора:

Индикатор должен строить линии по экстремумам от максимумов к минимумам и наоборот подобно ZigZag.

Краткосрочный максимум (Kmax) - это максимум бара (high) по обеим сторонам которого максимумы ниже(на подобие фрактала, только тут участвуют 3 бара)

Краткосрочный минимум (Kmin) - это минимум бара (low) по обеим сторонам которого минимумы выше.

Среднесрочный максимум (Cmax) - это краткосрочный максимум(Kmax) по обеим сторонам которого краткосрочные максимумы ниже.

Среднесрочный минимум (Cmin) - это краткосрочный минимум(Kmin) по обеим сторонам которого краткосрочные минимумы выше.

Долгосрочный максимум (Dmax) - это среднесрочный максимум (Cmax) по обеим сторонам которого среднесрочные максимумы ниже. 

Долгосрочный минимум(Dmin) - это среднесрочный минимум(Cmin) по обеим сторонам которого среднесрочные минимумы выше.

 

Важные условия: рынок движется от максимума к минимуму и наоборот, т.е  например не может быть подряд два максимума, а потом минимум . От максимума к минимуму , от минимума к максимуму и.т.д

Также есть понятие внутрений бар - это бар, максимумы(high) и минимумы(low) которого находятся внутри предыдущего, в случае  такой ситуации считаем такой паттерн за экстремум если он подтвердился. Для подтверждения в примере допустим с краткосрочным максимумом нужно чтоб цена 3-его бара в этом паттерне опустилась ниже минимума (low) бара , который мы считаем за краткосрочный максимум. С краткосрочным минимумом все так же в зеркальном отражении.

В индикаторе нужны следующие параметры : Нужно чтоб каждый экстремум подсвечивался разным цветом по иерархии  (Kmin,Kmax-Cmin,Cmax-Dmin,Dmax) и также устанавливалась разная толщина линий для данных экстремумов.

Edited by EideMANIs
Link to post
Share on other sites
EideMANIs

Ошибся не много . Для подтверждения в примере допустим с краткосрочным максимумом нужно чтоб цена опустилась ниже минимума (low) бара, который мы считаем за краткосрочный максимум.

Скрытый текст

Краткосрочный мин и макс.png

 

Link to post
Share on other sites
  • 1 month later...
osandr
29.10.2020 в 01:07, cmillion сказал:

Советник работает только с тем инструментом в окне которого он установлен.

Если нужно чтобы советник сопровождал все открываемые Вами позиции, то ставьте его на все инструменты по которым торгуете.

Если у позиции уже открыт стоплосс в убыток (выше цены открытия для sell) и в параметрах установить стоплосс = 0 то стоплосс будет обнулен. Если же стоплосс переведен в безубыток, то параметр стоплосс на него не будет влиять. Т.е. стоплосс переносится только в более выгодное положение.

Если на момент установки скрипта тейкпрофит меньше текущей прибыли позиции, то тейкпрофит будет установлен от текущей цены. Т.е. в более выгодное положение. Но если цена будет откатываться, то тейкпрофит будет перемещен на заданное расстояние от цены открытия позиции.

В советнике всего 4 параметра

Stoploss - стоплоссв пунктах

Takeprofit - тейкпрофит 

NoLoss - безубыток - профит в пунктах при котором стоплосс позиции переносится на минимальную прибыль, если 0, то нет перевода в безубыток

MinProfitNoLoss - минимальная прибыль при переводе вбезубыток

 

NL

 

cm_SL NL TP.mq5 10 kB · 2 скачивания

Не работает .

2020.12.21 13:52:32.492    Trades    '5281701': failed modify order #0 buy 0  at market sl: 0.00000 tp: 0.00000 -> market, sl: 0.74759 tp: 0.75659 [Invalid request]

Edited by osandr
Link to post
Share on other sites
  • 2 weeks later...
Mikhail76

Всем Здравия. Помогите создать стрелочник. За раннее спасибо. Материал и ТЗ прилагаю.

https://yadi.sk/d/tbj_ZrQH31a-GA

Edited by Mikhail76
дописал про ТЗ
Link to post
Share on other sites
  • 3 weeks later...
demonzah

Прошу помощи в написании советника на основе индикатора RSI с использованием усреднения (для МТ4).

Вариация автопрофита.

Link to post
Share on other sites
Ugar68
19 часов назад, demonzah сказал:

Прошу помощи в написании советника на основе индикатора RSI с использованием усреднения (для МТ4).

Вариация автопрофита.

Обычно помогают в соседней ветке. Но... Что уже написано? В чём сложности?


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
Mx-Sunny

Коллеги, день добрый. 

 

Подскажите, тема "Напишу советник, скрипт, индикатор на MQL бесплатно" еще актуальная? 

Есть проверенная на истории, в ручном режиме, стратегия полуавтоматической торговли на полосах Болинджера. 

Есть потребность в реализации Советника с целью проверить достоверность полученных данных. 

 

Требования:

Платформа MT5

Торговать отложенными ордерами: Лимитниками (на пробой уровня) тейк на границе канала

Интервал: Д

Фондовый рынок: NYSE; NASDAQ; HONG KONG; LSI; LSE; JAPAN; MOEX; GERMANY

Основной индикатор для генерации сигнала Bollinger Bands параметры стандартные:

Средняя 20, 2 станартных отклонения 

Торгуем без плечей

 

Если будет обратная связь опишу детали стратегии

 

Пример варианта торговли

ApXrROWS

Edited by Mx-Sunny
Link to post
Share on other sites
cmillion

посмотрите готовый

 


Пишу на заказ советники, индикаторы и скрипты для MT4 и MT5  

Link to post
Share on other sites
  • 1 month later...
vovchik261

Здравствуйте. Помогите пожалуйста исправить советник.

1.В нем стоп активируется только при активации тралла. Нужно сделать что бы стоп ставился сразу.

2.Еще при закрытии сделки, сова сразу открывает сделку в том же направлении, если тренд идет в ту же сторону. Нужно сделать что бы при закрытии сделки, сова ждала противоположный сигнал.

3.Нужно убрать из совы все что отвечает за сетки ордеров. Нужна одна сделка в одном направлении.

4. Нужна включаемая функция ( к примеру есть сделка в бай, появился сигнал в селл, сова должна открыть селл не дожидаясь закрытия бай) Хотелось бы эту функцию включаемой.

Скрытый текст

 

.


//+------------------------------------------------------------------+
//|                                                     Experts1.mq4 |
//|                               Copyright 2021, Samodurov Vladimir |
//|                                       [email protected] |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, Samodurov Vladimir"
#property link      "[email protected]"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
extern double Stoploss= 500.0;            //уровень безубытка
extern int TrailStart= 10; // старт трала
extern int TrailStop = 10; // размер трала
extern bool ReverseTrade=false; // реверс сделок (вместо бай - селл и наоборот)
//+--------------------------------------------------------------------------------------------------------------+
input bool   FixLot=true;    //FixLot Фиксированный лот для начала торгов?
input double FixedLot=0.01; //FixedLot Фиксированный объём лота для начала торгов
input double LotSizeMultiplier=0.05; //LotSizeMultiplier Процент риска от эквити для расчета лота
//+------------------------------------------------------------------+
extern double LotExponent=1.4;   // на сколько умножать лот при выст-нии следующего колена.
extern string l1=" пример: первый лот 0.1, серия: 0.16, 0.26, 0.43 ... ";
extern double slip = 3.0;           // Slippage ((насколько может отличаться цена)
extern int lotdecimal = 2;          // знаков после запятой в лоте рассчитывать 
extern string l2=" 0 - нормальные лоты (1), 1 - минилоты (0.1), 2 - микро (0.01) ";
extern double TakeProfit=50.0;    // по достижении скольких пунктов прибыли закрывать сделку
extern double Pipstep=40.0;      // шаг между выставление новых колен
extern double PipStepExponent=1.2;
extern string Quant="Вкл/Выкл. режима изменения шага. TRUE-включен";
extern bool QuantumStep=true;    //включаем ли режим квантования изменения шага
extern string StartStepExpSrting="После какого колена шаг начинает увеличиваться на PipStepExponent";
extern int StartStepExp=5;       //после какого колена начинается увеличиваться шаг
sinput string __________="------------------------------";
sinput string _MagicNumList="MagicNumList";
extern int MagicNumber=2222;      // волшебное число (помогает советнику отличить свои ставки от чужих)
extern  string   MagicNumList       =    "777 0 1 888"; // Magic номера (через пробел), которые советник подхватывает (0 - ручные)
//+------------------------------------------------------------------+
extern int MaxTrades= 999;          //максимально количество ордеров в серии
extern int MaxOpenTrades= 999;      // максимально количество одновременно открытых ордеров
input bool UseEquityStop=false;  // останавливать, если Equity на критическом уровне
extern double TotalEquityRisk = 20.0; // Уровень риска Equity
input bool UseTrailingStop = false;  // Использовать трал
input bool UseTimeOut = false;            // использовать таймаут (закрывать сделки если они "висят" слишком долго)
extern double MaxTradeOpenHours = 48.0;    // время таймаута сделок в часах (через сколько закрывать зависшие сделки)
extern bool StatShow=true; //Показывать статистику на графике?
input int Graf_WIDTH = 500; //Ширина графика в пикселях, при которой прятать кнопки
//+------------------------------------------------------------------+
//|      //Блок - настройки Fisher_LexLmod индикатора.               |
//+------------------------------------------------------------------+
input string _1="Fisher_LexLmod";// ---------настройки индикатора Fisher_LexLmod
extern ENUM_TIMEFRAMES TimeFrameFisher_LexLmod=PERIOD_H1;
extern int    Период=70;
double Уровень_Buy     = 0.25;  // 0.25
double Уровень_Sell    = -0.25; // -0.25
bool   ЗВУК=false;//(TRUE)
string Звуковой_файл="alert2.wav";//("alert2.wav")
double Fisher;
string TrendUpDown;
input double FisherUPtrend = 0.1; //Настройка порога Fisher при тренде вверх 
input double FisherDOWNtrend = -0.1; //Настройка порога Fisher при тренде вниз
// Fisher=iCustom(_Symbol,PERIOD_CURRENT,"Fisher_LexLmod",Период,Уровень_Buy,Уровень_Sell,ЗВУК,Звуковой_файл,0,0);//имя, настройки, буфер, старт свеча
//+------------------------------------------------------------------+
//|      //Блок - настройки Alien_Force индикатора.                  |
//+------------------------------------------------------------------+
input string _2="Alien_Force";// ---------настройки индикатора Alien_Force
extern ENUM_TIMEFRAMES TimeFrameAlien_Force=PERIOD_CURRENT;
extern double FastLimit = 0.5;
extern double SlowLimit = 0.05;
extern ENUM_APPLIED_PRICE Price=PRICE_MEDIAN;
extern int PriceFilter=5;
extern ENUM_MA_METHOD PriceFilterMode=MODE_EMA;
bool AlertsOn=false;
bool AlertsOnCurrent=false;
bool AlertsMessage=false;
bool AlertsSound=false;
bool AlertsNotify= false;
bool AlertsEmail = false;
string soundFile = "alert2.wav";
int arrowthickness=1;
bool ArrowsOnFirstBar=true;
extern int NoCandlesForOpen=0; // на какой свече по счету открывать сделку (0 = сразу)
//+------------------------------------------------------------------+
double Lots=0.01;//переменная для хранения размера лота
double zalog; //маржа
double PriceTarget,StartEquity,BuyTarget,SellTarget;
double AveragePrice,SellLimit,BuyLimit;
double LastBuyPrice,LastSellPrice,Spread;
bool flag;
string EAName="Ilan1.6 Quantum";
int timeprev = 0, expiration;
int NumOfTrades=0;
double iLots;
double PipStepE;
int cnt=0,total;
double Stopper= 0.0;
bool TradeNow = false,LongTrade = false,ShortTrade = false;
int ticket;
bool  NewOrdersPlaced=FALSE;
double AccountEquityHighAmt,PrevEquity;
int order1;
int      ArrayMagic[], cmagic;
bool TradeAllowedFlag = true;
int YesNo=0;
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
int OnInit()

  {
   Spread=MarketInfo(Symbol(),MODE_SPREAD)*Point;
   EventSetTimer(5);
   
     //--- инициализация кнопок
   PutButton("B",100,50,"CLOSE SYMBOL");
   PutButton("S",230,50,"TRADE ON");
   PutButton("C",360,50,"CLOSE PROFIT");
   
//+------------------------------------------------------------------+
//|        Magic лист                                                |

   cmagic=0; string st; int k=StringLen(MagicNumList); ArrayResize(ArrayMagic,k);
   for(int a=0; a<k; a++)
     {
      if(StringSubstr(MagicNumList,a,1)!=" ")
        {
         st=st+StringSubstr(MagicNumList,a,1);
         if(a<k-1) continue;
        }
      if(st!="") {ArrayMagic[cmagic]=StringToInteger(st); cmagic++; st="";}
     }
   ArrayResize(ArrayMagic,cmagic);
//+------------------------------------------------------------------+ 
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
   EventKillTimer();
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
   ObjectDelete(0,"C");
   ObjectDelete(0,"Trade");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {

  }
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
void OnTick()
  {
  
     if (ChartWidthInPixels() < Graf_WIDTH) 
   {
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
   ObjectDelete(0,"C");   
   }
   else 
   {
   PutButton("B",100,50,"CLOSE SYMBOL");
   PutButton("S",230,50,"TRADE ON");
   PutButton("C",360,50,"CLOSE PROFIT");
   }
   
   if (!TradeAllowedFlag) { TradeAllowed(false); return; }
   FilterFisher();
   CalculateProfit();
   if(StatShow) StatOnGraf();
   
//--- Инициализация объёма сдеки
   if(!FixLot) Lots=LotsOptimized();
   else Lots=FixedLot;
//+------------------------------------------------------------------+

   if(OrdersTotal()>MaxOpenTrades)
     {
      order1=OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && MagicCheck())
        {
         if(OrderType()==OP_BUY)
            order1=OrderClose(OrderTicket(),OrderLots(),SymbolInfoDouble(_Symbol,SYMBOL_BID),3,0);
         if(OrderType()==OP_SELL)
            order1=OrderClose(OrderTicket(),OrderLots(),SymbolInfoDouble(_Symbol,SYMBOL_ASK),3,0);
        }
     }
//+------------------------------------------------------------------+
   PipStepE=NormalizeDouble(Pipstep*MathPow(PipStepExp(NumOfTrades),TradeStepExp(NumOfTrades)),0);
//+------------------------------------------------------------------+

   if(UseTrailingStop) TrailingAlls(TrailStart,TrailStop,AveragePrice);
//+------------------------------------------------------------------+

   if(UseTimeOut)
     {
      if(TimeCurrent()>=expiration)
        {
         CloseThisSymbolAll();
         Print("Closed All due to TimeOut");
        }
     }
//+------------------------------------------------------------------+
   if(timeprev == Time[0]) return;
   timeprev=Time[0];
   double CurrentPairProfit=CalculateProfit();
   if(UseEquityStop)
     {
      if(CurrentPairProfit<0.0 && MathAbs(CurrentPairProfit)>TotalEquityRisk/100.0*AccountEquityHigh())
        {
         CloseThisSymbolAll();
         Print("Closed All due to Stop Out");
         NewOrdersPlaced=false;
        }
     }

   total=CountTrades();
   if(total==0) flag=false;
   for(cnt=OrdersTotal()-1; cnt>=0; cnt--)
     {
      order1=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol() || !MagicCheck()) continue;
      if(OrderSymbol()==Symbol() && MagicCheck())
        {
         if(OrderType()==OP_BUY)
           {
            LongTrade=true;
            ShortTrade=false;
            break;
           }
        }
      if(OrderSymbol()==Symbol() && MagicCheck())
        {
         if(OrderType()==OP_SELL)
           {
            LongTrade=false;
            ShortTrade=true;
            break;
           }
        }
     }
   if(total>0 && total<=MaxTrades)
     {
      RefreshRates();
      LastBuyPrice=FindLastBuyPrice();
      LastSellPrice=FindLastSellPrice();
      if(LongTrade  &&  LastBuyPrice-SymbolInfoDouble(_Symbol,SYMBOL_ASK)>=PipStepE*Point && Signal_Alien_Force()==1) TradeNow=true;
      if(ShortTrade && SymbolInfoDouble(_Symbol,SYMBOL_BID)-LastSellPrice>=PipStepE*Point && Signal_Alien_Force()==2) TradeNow=true;
     }
   if(total<1)
     {
      ShortTrade= false;
      LongTrade = false;
      TradeNow=true;
      StartEquity=AccountEquity();
     }
//+------------------------------------------------------------------+
   if(TradeNow)
     {
      LastBuyPrice=FindLastBuyPrice();
      LastSellPrice=FindLastSellPrice();
      if(ShortTrade)
        {
         NumOfTrades=total;
         iLots=NormalizeDouble(Lots*MathPow(LotExponent,NumOfTrades),lotdecimal);
         RefreshRates();
         ticket=OpenPendingOrder(1,iLots,SymbolInfoDouble(_Symbol,SYMBOL_BID),slip,SymbolInfoDouble(_Symbol,SYMBOL_ASK),0,0,EAName+"-"+IntegerToString(NumOfTrades),MagicNumber,0,HotPink);
         if(ticket<0)
           {
            Print("Error: ",GetLastError());
            return;
           }
         LastSellPrice=FindLastSellPrice();
         TradeNow=false;
         NewOrdersPlaced=true;
           } else {
         if(LongTrade)
           {
            NumOfTrades=total;
            iLots=NormalizeDouble(Lots*MathPow(LotExponent,NumOfTrades),lotdecimal);
            ticket=OpenPendingOrder(0,iLots,SymbolInfoDouble(_Symbol,SYMBOL_ASK),slip,SymbolInfoDouble(_Symbol,SYMBOL_BID),0,0,EAName+"-"+IntegerToString(NumOfTrades),MagicNumber,0,Lime);
            if(ticket<0)
              {
               Print("Error: ",GetLastError());
               return;
              }
            LastBuyPrice=FindLastBuyPrice();
            TradeNow=false;
            NewOrdersPlaced=true;
           }
        }
     }
//+------------------------------------------------------------------+
//|  Если сделок еще нет и надо открыть новую серию, то              |
//+------------------------------------------------------------------+

   if(ReverseTrade)
     {
      if(TradeNow && total<1)
        {
            SellLimit= SymbolInfoDouble(_Symbol,SYMBOL_BID);
            BuyLimit = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
            if(!ShortTrade && !LongTrade)
              {
               NumOfTrades=total;
               iLots=NormalizeDouble(Lots*MathPow(LotExponent,NumOfTrades),lotdecimal);
               if(FilterFisher()==2)
                 {
                  ticket=OpenPendingOrder(0,iLots,BuyLimit,slip,BuyLimit,0,0,EAName+"-"+IntegerToString(NumOfTrades),MagicNumber,0,HotPink);
                  if(ticket<0)
                    {
                     Print("Error: ",GetLastError());
                     return;
                    }
                  LastSellPrice=FindLastSellPrice();
                  NewOrdersPlaced=true;
                 }
               if(FilterFisher()==1)
                 {
                  ticket=OpenPendingOrder(1,iLots,SellLimit,slip,SellLimit,0,0,EAName+"-"+IntegerToString(NumOfTrades),MagicNumber,0,Lime);
                  if(ticket<0)
                    {
                     Print("Error: ",GetLastError());
                     return;
                    }

                  LastBuyPrice=FindLastBuyPrice();
                  NewOrdersPlaced=true;
                 }
               if(ticket>0) expiration=TimeCurrent()+60.0 *(60.0*MaxTradeOpenHours);
               TradeNow=false;
              }
        }
     }
   if(!ReverseTrade)
     {
      if(TradeNow && total<1)
        {
            SellLimit= SymbolInfoDouble(_Symbol,SYMBOL_BID);
            BuyLimit = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
            if(!ShortTrade && !LongTrade)
              {
               NumOfTrades=total;
               iLots=NormalizeDouble(Lots*MathPow(LotExponent,NumOfTrades),lotdecimal);
               if(FilterFisher()==2)
                 {
                  ticket=OpenPendingOrder(1,iLots,SellLimit,slip,SellLimit,0,0,EAName+"-"+IntegerToString(NumOfTrades),MagicNumber,0,HotPink);
                  if(ticket<0)
                    {
                     Print("Error: ",GetLastError());
                     return;
                    }
                  LastBuyPrice=FindLastBuyPrice();
                  NewOrdersPlaced=true;
                 }
               if(FilterFisher()==1)
                 {
                  ticket=OpenPendingOrder(0,iLots,BuyLimit,slip,BuyLimit,0,0,EAName+"-"+IntegerToString(NumOfTrades),MagicNumber,0,Lime);
                  if(ticket<0)
                    {
                     Print("Error: ",GetLastError());
                     return;
                    }
                  LastSellPrice=FindLastSellPrice();
                  NewOrdersPlaced=true;
                 }
               if(ticket>0) expiration=TimeCurrent()+60.0 *(60.0*MaxTradeOpenHours);
               TradeNow=false;
              }
        }
     }

//+------------------------------------------------------------------+
   total=CountTrades();
   AveragePrice = 0;
   double Count = 0;
   for(cnt=OrdersTotal()-1; cnt>=0; cnt--)
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
     {
      order1=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=_Symbol || !MagicCheck()) continue;
      if(OrderSymbol()==_Symbol && MagicCheck())
        {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            AveragePrice+=OrderOpenPrice()*OrderLots();
            Count+=OrderLots();
           }
        }
     }
   if(total>0) AveragePrice=NormalizeDouble(AveragePrice/Count,_Digits);
//---
   if(NewOrdersPlaced)
     {
      for(cnt=OrdersTotal()-1; cnt>=0; cnt--)
        {
         order1=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()!=_Symbol || !MagicCheck()) continue;
         if(OrderSymbol()==_Symbol && MagicCheck())
           {
            if(OrderType()==OP_BUY)
              {
               PriceTarget=AveragePrice+TakeProfit*_Point;
               BuyTarget=PriceTarget;
               Stopper=AveragePrice-Stoploss*_Point;
               flag=TRUE;
              }
           }
         if(OrderSymbol()==_Symbol && MagicCheck())
           {
            if(OrderType()==OP_SELL)
              {
               PriceTarget= AveragePrice - TakeProfit * _Point;
               SellTarget = PriceTarget;
               Stopper=AveragePrice+Stoploss*_Point;
               flag=TRUE;
              }
           }
        }
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(NewOrdersPlaced)
     {
      if(flag==true)
        {
         for(cnt=OrdersTotal()-1; cnt>=0; cnt--)
           {
            order1=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()!=_Symbol || !MagicCheck()) continue;
            if(OrderSymbol()== _Symbol && MagicCheck()) order1 = OrderModify(OrderTicket(),AveragePrice,OrderStopLoss(),PriceTarget,0,Yellow);
            NewOrdersPlaced = false;
           }
        }
     }
   
  }
//=========================================================================================//
// Функция контроля наличия своего магика                                                  //
//=========================================================================================//

bool MagicCheck()
  {
   for(int i=0; i<cmagic; i++)
     {
      if(OrderMagicNumber()==ArrayMagic[i] || OrderMagicNumber()==MagicNumber) return(true);
     }
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      order1=OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol() || !MagicCheck()) continue;
      if(OrderSymbol()==Symbol() && MagicCheck())
         if(OrderType()==OP_SELL || OrderType()==OP_BUY) count++;
     }
   return (count);
  }
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

void CloseThisSymbolAll()
  {
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      order1=OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol())
        {
         if(OrderSymbol()==Symbol() && MagicCheck())
           {
            if(OrderType() == OP_BUY) order1 = OrderClose(OrderTicket(), OrderLots(), SymbolInfoDouble(_Symbol,SYMBOL_BID), slip, Blue);
            if(OrderType() == OP_SELL) order1 = OrderClose(OrderTicket(), OrderLots(), SymbolInfoDouble(_Symbol,SYMBOL_ASK), slip, Red);
           }
         Sleep(1000);
        }
     }
  }
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

int OpenPendingOrder(int pType,double pLots,double pLevel,int sp,double pr,int sl,int tp,string pComment,int pMagic,int pDatetime,color pColor)
  {
   ticket=0;
   int err=0;
   int c=0;
   int NumberOfTries=100;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   switch(pType)
     {
      case 2:
         for(c=0; c<NumberOfTries; c++)
           {
            ticket=OrderSend(_Symbol,OP_BUYLIMIT,pLots,pLevel,sp,StopLong(pr,sl),TakeLong(pLevel,tp),pComment,pMagic,pDatetime,pColor);
            err=GetLastError();
            if(err==0/* NO_ERROR */) break;
            if(!(err==4/* SERVER_BUSY */ || err==137/* BROKER_BUSY */ || err==146/* TRADE_CONTEXT_BUSY */ || err==136/* OFF_QUOTES */)) break;
            Sleep(1000);
           }
         break;
      case 4:
         for(c=0; c<NumberOfTries; c++)
           {
            ticket=OrderSend(_Symbol,OP_BUYSTOP,pLots,pLevel,sp,StopLong(pr,sl),TakeLong(pLevel,tp),pComment,pMagic,pDatetime,pColor);
            err=GetLastError();
            if(err==0/* NO_ERROR */) break;
            if(!(err==4/* SERVER_BUSY */ || err==137/* BROKER_BUSY */ || err==146/* TRADE_CONTEXT_BUSY */ || err==136/* OFF_QUOTES */)) break;
            Sleep(5000);
           }
         break;
      case 0:
         for(c=0; c<NumberOfTries; c++)
           {
            RefreshRates();
            ticket=OrderSend(_Symbol,OP_BUY,pLots,SymbolInfoDouble(_Symbol,SYMBOL_ASK),sp,StopLong(SymbolInfoDouble(_Symbol,SYMBOL_BID),sl),TakeLong(SymbolInfoDouble(_Symbol,SYMBOL_ASK),tp),pComment,pMagic,pDatetime,pColor);
            err=GetLastError();
            if(err==0/* NO_ERROR */) break;
            if(!(err==4/* SERVER_BUSY */ || err==137/* BROKER_BUSY */ || err==146/* TRADE_CONTEXT_BUSY */ || err==136/* OFF_QUOTES */)) break;
            Sleep(5000);
           }
         break;
      case 3:
         for(c=0; c<NumberOfTries; c++)
           {
            ticket=OrderSend(_Symbol,OP_SELLLIMIT,pLots,pLevel,sp,StopShort(pr,sl),TakeShort(pLevel,tp),pComment,pMagic,pDatetime,pColor);
            err=GetLastError();
            if(err==0/* NO_ERROR */) break;
            if(!(err==4/* SERVER_BUSY */ || err==137/* BROKER_BUSY */ || err==146/* TRADE_CONTEXT_BUSY */ || err==136/* OFF_QUOTES */)) break;
            Sleep(5000);
           }
         break;
      case 5:
         for(c=0; c<NumberOfTries; c++)
           {
            ticket=OrderSend(_Symbol,OP_SELLSTOP,pLots,pLevel,sp,StopShort(pr,sl),TakeShort(pLevel,tp),pComment,pMagic,pDatetime,pColor);
            err=GetLastError();
            if(err==0/* NO_ERROR */) break;
            if(!(err==4/* SERVER_BUSY */ || err==137/* BROKER_BUSY */ || err==146/* TRADE_CONTEXT_BUSY */ || err==136/* OFF_QUOTES */)) break;
            Sleep(5000);
           }
         break;
      case 1:
         for(c=0; c<NumberOfTries; c++)
           {
            ticket=OrderSend(_Symbol,OP_SELL,pLots,SymbolInfoDouble(_Symbol,SYMBOL_BID),sp,StopShort(SymbolInfoDouble(_Symbol,SYMBOL_ASK),sl),TakeShort(SymbolInfoDouble(_Symbol,SYMBOL_BID),tp),pComment,pMagic,pDatetime,pColor);
            err=GetLastError();
            if(err==0/* NO_ERROR */) break;
            if(!(err==4/* SERVER_BUSY */ || err==137/* BROKER_BUSY */ || err==146/* TRADE_CONTEXT_BUSY */ || err==136/* OFF_QUOTES */)) break;
            Sleep(5000);
           }

     }

   return (ticket);
  }
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
double StopLong(double price,int stop)
  {
   if(stop == 0) return (0);
   else return (price - stop * Point);
  }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
double StopShort(double price,int stop)
  {
   if(stop == 0) return (0);
   else return (price + stop * Point);
  }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
double TakeLong(double price,int stop)
  {
   if(stop == 0) return (0);
   else return (price + stop * Point);
  }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
double TakeShort(double price,int stop)
  {
   if(stop == 0) return (0);
   else return (price - stop * Point);
  }
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
double CalculateProfit()
  {
   double Profit=0;
   for(cnt=OrdersTotal()-1; cnt>=0; cnt--)
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
     {
      order1=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=_Symbol || !MagicCheck()) continue;
      if(OrderSymbol()==_Symbol && MagicCheck())
         if(OrderType()==OP_BUY || OrderType()==OP_SELL) Profit+=OrderProfit();
     }
   return (Profit);
  }
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
void TrailingAlls(int pType,int stop,double AvgPrice)
  {
   int profit;
   double stoptrade;
   double stopcal;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(stop!=0)
     {
      for(int trade=OrdersTotal()-1; trade>=0; trade--)
        {
         if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderSymbol()!=_Symbol || !MagicCheck()) continue;
            if(OrderSymbol()==_Symbol || MagicCheck())
              {
               if(OrderType()==OP_BUY)
                 {
                  profit=NormalizeDouble((SymbolInfoDouble(_Symbol,SYMBOL_BID)-AvgPrice)/_Point,0);
                  if(profit<pType) continue;
                  stoptrade=OrderStopLoss();
                  stopcal=SymbolInfoDouble(_Symbol,SYMBOL_BID)-stop*Point;
                  if(stoptrade==0.0 || (stoptrade!=0.0 && stopcal>stoptrade)) order1=OrderModify(OrderTicket(),AvgPrice,stopcal,OrderTakeProfit(),0,Aqua);
                 }
               if(OrderType()==OP_SELL)
                 {
                  profit=NormalizeDouble((AvgPrice-SymbolInfoDouble(_Symbol,SYMBOL_ASK))/_Point,0);
                  if(profit<pType) continue;
                  stoptrade=OrderStopLoss();
                  stopcal=SymbolInfoDouble(_Symbol,SYMBOL_ASK)+stop*_Point;
                  if(stoptrade==0.0 || (stoptrade!=0.0 && stopcal<stoptrade)) order1=OrderModify(OrderTicket(),AvgPrice,stopcal,OrderTakeProfit(),0,Red);
                 }
              }
            Sleep(1000);
           }
        }
     }
  }
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

double AccountEquityHigh()
  {
   if(CountTrades()==0) AccountEquityHighAmt=AccountEquity();
   if(AccountEquityHighAmt<PrevEquity) AccountEquityHighAmt=PrevEquity;
   else AccountEquityHighAmt=AccountEquity();
   PrevEquity=AccountEquity();
   return (AccountEquityHighAmt);
  }
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн

double FindLastBuyPrice()
  {
   double oldorderopenprice=0;
   int oldticketnumber;
   double unused=0;
   int ticketnumber=0;
   for(cnt=OrdersTotal()-1; cnt>=0; cnt--)
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
     {
      order1=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=_Symbol || !MagicCheck()) continue;
      if(OrderSymbol()==_Symbol && MagicCheck() && OrderType()==OP_BUY)
        {
         oldticketnumber=OrderTicket();
         if(oldticketnumber>ticketnumber)
           {
            oldorderopenprice=OrderOpenPrice();
            unused=oldorderopenprice;
            ticketnumber=oldticketnumber;
           }
        }
     }
   return (oldorderopenprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   double oldorderopenprice=0;
   int oldticketnumber;
   double unused=0;
   int ticketnumber=0;
   for(cnt=OrdersTotal()-1; cnt>=0; cnt--)
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
      //+------------------------------------------------------------------+
      //|                                                                  |
      //+------------------------------------------------------------------+
     {
      order1=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=_Symbol || !MagicCheck()) continue;
      if(OrderSymbol()==_Symbol && MagicCheck() && OrderType()==OP_SELL)
        {
         oldticketnumber=OrderTicket();
         if(oldticketnumber>ticketnumber)
           {
            oldorderopenprice=OrderOpenPrice();
            unused=oldorderopenprice;
            ticketnumber=oldticketnumber;
           }
        }
     }
   return (oldorderopenprice);
  }
//+------------------------------------------------------------------+
//|  Сигнал на открытие ордера по индикатору Alien_Force
//+------------------------------------------------------------------+
int Signal_Alien_Force()
  {
   double up,dn;
   int TradeType=0;

   up=iCustom(_Symbol,TimeFrameAlien_Force,"Alien_Force",TimeFrameAlien_Force,FastLimit,SlowLimit,Price,PriceFilter,PriceFilterMode,AlertsOn,AlertsOnCurrent,AlertsMessage,AlertsSound,AlertsNotify,AlertsEmail,soundFile,arrowthickness,ArrowsOnFirstBar,2,NoCandlesForOpen);//имя,настройки, буфер, старт свеча для BUY
   dn=iCustom(_Symbol,TimeFrameAlien_Force,"Alien_Force",TimeFrameAlien_Force,FastLimit,SlowLimit,Price,PriceFilter,PriceFilterMode,AlertsOn,AlertsOnCurrent,AlertsMessage,AlertsSound,AlertsNotify,AlertsEmail,soundFile,arrowthickness,ArrowsOnFirstBar,3,NoCandlesForOpen);//имя,настройки, буфер, старт свеча для SELL
   
{

}
     {
      
      
     }
   

   return (TradeType);
  }
//+------------------------------------------------------------------+
//|  Фильтр на открытие первого ордера по индикатору Fisher_LexLmod
//+------------------------------------------------------------------+  
int FilterFisher()
  {
   int TradeType=0;
   Fisher=iCustom(_Symbol,TimeFrameFisher_LexLmod,"Fisher_LexLmod",Период,Уровень_Buy,Уровень_Sell,ЗВУК,Звуковой_файл,0,0);//имя, настройки, буфер, старт свеча
   if(Fisher>FisherUPtrend) 
   {
   TradeType=1; //покупка
   TrendUpDown = "Тренд BUY /\\";
   }
   if(Fisher<FisherDOWNtrend)
   {
    TradeType=2; //продажа
    TrendUpDown = "Тренд SELL \\/";
    }
   if(Fisher<FisherUPtrend && Fisher>FisherDOWNtrend) TrendUpDown = "FLAT ~~";
   return (TradeType);

  }
//--------------------Начинаем растить шаг спустя StartStepExp колен-------------------------------

double PipStepExp(int Step)
  {
   double QStepEx =  0;
   if(QuantumStep == true && Step >= StartStepExp)
      QStepEx=PipStepExponent;
   else
      QStepEx=1;
   return (QStepEx);
  }
//==================== Считаем колени ============================
int TradeStepExp(int Trades)
  {
   double TradeStep=0;
   if(QuantumStep==true && Trades>=StartStepExp)
      TradeStep=Trades-StartStepExp+1;
   else
      TradeStep=Trades;
   return (TradeStep);
  }
//+------------------------------------------------------------------+
//|     расчет лота mql4
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot2;
   double Free= AccountInfoDouble(ACCOUNT_FREEMARGIN);   //средства    
   double m_b = MarketInfo(Symbol(),MODE_MARGINREQUIRED);// залог на 1 лот
   lot2=NormalizeDouble(Free*LotSizeMultiplier/100/m_b,2);
   if(lot2<0.01) lot2=0.01;
   if(lot2>100) lot2=100;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   if(FixLot)
     {
      lot2=FixedLot;
      zalog=NormalizeDouble(lot2*m_b/1,2);
      if(lot2<0.01) lot2=0.01;
      if(lot2>100) lot2=100;
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   else
     {
      zalog=NormalizeDouble(lot2*m_b/1,2);
     }
   return(lot2);
  }
//+------------------------------------------------------------------+
void StatOnGraf()
  {
   if(ReverseTrade)
     {
      Comment("                              Robot Ilan 1.6 PipStepExponent 1.4 Gus Reverse Mod\n","                              Copyright © 2017, pulio5g\n\n","                              Forex Account Server:",AccountServer(),
              "\n","                              Размер начального лота:  ",NormalizeDouble(Lots,2),
              "\n","                              Символ для торговли: ",_Symbol,
              "\n","                              Дата: ",Month(),"-",Day(),"-",Year()," Server Time: ",Hour(),":",Minute(),":",Seconds(),
              "\n                              Account Equity (средства)= ",NormalizeDouble(AccountEquity(),2),
              "\n                              Колличество открытых позиций = ",IntegerToString(CountTrades()),
              "\n                              Профит открытых позиций = ",DoubleToString(CalculateProfit(),2),
              "\n                              Fisher = ",NormalizeDouble(Fisher,3)," ",TrendUpDown,
              "\n                              Magic № ордеров, с которыми работаем (0 - ручные): ",IntegerToString(MagicNumber)," ",MagicNumList,"\n",
              "\n                              ВНИМАНИЕ! ВКЛЮЧЕН РЕВЕРС СДЕЛОК!!!",
              "\n");
     }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   else
     {
      Comment("                              Robot Ilan 1.6 PipStepExponent 1.4 Gus Reverse Mod\n","                              Copyright © 2017, pulio5g\n\n","                              Forex Account Server:",AccountServer(),
              "\n","                              Размер начального лота:  ",NormalizeDouble(Lots,2),
              "\n","                              Символ для торговли: ",_Symbol,
              "\n","                              Дата: ",Month(),"-",Day(),"-",Year()," Server Time: ",Hour(),":",Minute(),":",Seconds(),
              "\n                              Account Equity (средства) = ",NormalizeDouble(AccountEquity(),2),
              "\n                              Колличество открытых позиций = ",IntegerToString(CountTrades()),
              "\n                              Профит открытых позиций = ",DoubleToString(CalculateProfit(),2),
              "\n                              Fisher = ",NormalizeDouble(Fisher,3)," ",TrendUpDown,
              "\n                              Magic № ордеров, с которыми работаем (0 - ручные): ",IntegerToString(MagicNumber)," ",MagicNumList,"\n",
              "\n");
     }
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|             Функция установки объекта «Кнопка»                   |
//+------------------------------------------------------------------+

void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);

//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,120);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,10);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }

// нажатие мышкой на кнопке  
//+------------------------------------------------------------------+
//|   PutButton("B",50,50,"CLOSE SYMBOL");
//|   PutButton("S",150,50,"CLOSE ALL");
//|   PutButton("C",250,50,"CLOSE PROFIT");
//+------------------------------------------------------------------+

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- проверим событие на нажатие кнопки мышки

   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      string clickedChartObject=sparam;
      //--- если нажатие на объекте с именем "B"
      if(clickedChartObject=="B")
        {
            YesNo = MessageBox("Закрыть все ордера по символу "+Symbol()+" и остановть торговлю?","",MB_YESNO);
            if(YesNo==IDYES)     { CloseThisSymbolAll(); TradeAllowedFlag = false;}
        }

      if(clickedChartObject=="S")
        {
            YesNo = MessageBox("Возобновить торговлю по символу "+Symbol()+" ?","",MB_YESNO);
            if(YesNo==IDYES)     { TradeAllowedFlag = true; TradeAllowed(true);}
        }

      if(clickedChartObject=="C")
        {
            YesNo = MessageBox("Закрыть профитные ордера по всем символам?","",MB_YESNO);
            if(YesNo==IDYES)     { CloseProfit();}
        }

      ChartRedraw();// принудительно перерисуем все объекты на графике
     }
  }
  
//+------------------------------------------------------------------+
//|    вывод информации - ТОРГОВЛЯ ОСТОНОВЛЕНА!
//+------------------------------------------------------------------+
   void TradeAllowed(bool allow)
     {
      if(!allow)
        {
         ObjectCreate(0,"Trade",OBJ_LABEL,0,0,0);
         ObjectSetInteger(0,"Trade",OBJPROP_CORNER,CORNER_LEFT_UPPER);
         ObjectSetInteger(0,"Trade",OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
         ObjectSetInteger(0,"Trade",OBJPROP_XDISTANCE,20);    // смещение надписи в бок 5-15-35-55- и т.д.
         ObjectSetInteger(0,"Trade",OBJPROP_YDISTANCE,200);   // смещение надписи вниз  15-30-45-50- и т.д.
         ObjectSetString(0,"Trade",OBJPROP_FONT,"Arial Black");
         ObjectSetInteger(0,"Trade",OBJPROP_FONTSIZE,40);
         ObjectSetInteger(0,"Trade",OBJPROP_COLOR,Red);
         ObjectSetString(0,"Trade",OBJPROP_TEXT,"ТОРГОВЛЯ ОСТОНОВЛЕНА!");
        }
      else ObjectDelete(0,"Trade");
     }
//+------------------------------------------------------------------+
//| Функция получает значение ширины графика в пикселях.             |
//+------------------------------------------------------------------+
int ChartWidthInPixels(const long chart_ID=0)
  {
//--- подготовим переменную для получения значения свойства
   long result=-1;
//--- сбросим значение ошибки
   ResetLastError();
//--- получим значение свойства
   if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_PIXELS,0,result))
     {
      //--- выведем сообщение об ошибке в журнал "Эксперты"
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- вернем значение свойства графика
   return((int)result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

void CloseProfit()
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if(OrderType()==OP_BUY  || OrderType()==OP_SELL)
         {
            if (OrderProfit()+OrderSwap()+OrderCommission()>0)
            {
               if(OrderType()==0)
                 {
                  RefreshRates();
                  cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),100,White);
                 }
               if(OrderType()==1)
                 {
                  RefreshRates();
                  cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),100,White);
                 }
            
            }
         }
        Sleep(500);  
      }
     }
   Alert("Профитные ордера закрыты!");
  }

 

.

 

 

Edited by Capman
Link to post
Share on other sites
  • 5 weeks later...
Cenmax

Всем привет!  Нужен советник, который умеет через указанное расстояние закрывать половину ордера и переводить в безубыток + в настройках указываешь на сколько пунктов ставить безубыток от ордера.

С уважением...


"Зло растет и увеличивается, если вы прячетесь от него или делаете вид, что не замечаете.."

Link to post
Share on other sites
  • Capman pinned this topic
  • 1 month later...
Da.Ro.V

Господа, помогите разобраться, наткнулся на сборный индикатор RSI_DeMarker_Super_Position, и вроде бы все хорошо ... НО, не могу понять почему у него линия Demarker-а отрисовывается иначе чем в стандартном Demarker-е ... параметры одни и теже (15). RSI и MA-шки отрисовываются вроде вполне стандартно, а вот Demarker почему-то отличается. и Да, эта отрисовка мне нравится больше стандарта, т.к. она менее "прыгающая", поэтому попытался своими руками вытащить как-то параметры но у меня ничего не вышло. Если бы вы могли помочь с извлечением был бы признателен.

e7f65d00e2[1].png

RSI_DeMarker_Super_Position.mq4

Link to post
Share on other sites
  • 2 weeks later...
cmillion
11.04.2021 в 21:14, Cenmax сказал:

Всем привет!  Нужен советник, который умеет через указанное расстояние закрывать половину ордера и переводить в безубыток + в настройках указываешь на сколько пунктов ставить безубыток от ордера.

С уважением...

Советник называется cm partial closing position

1.Советник отслеживает открытые позиции по всем или заданному инструменту.

2 При достижении указанной прибыли закрывает часть позиции. Можно указать 4 уровня закрытия позиций. Например через 50 пунктов закрыть 50% Через 100 пунктов закрыть еще 30? Чрез 150 пунктов закрыть 1-% и через 250 пунктов закрыть оставшиеся 10%

3 При первом частичном закрытии советник переводит позицию в безубыток + NoLoss пунктов прибыли. Например NoLoss=10 g тогда при достижении 100 п прибыли советник закроет 50% позиции и поставит SL выше (для buy) цены открытия на 10 пунктов

 

Подробнее в ветке:

 

  • Thanks 1

Пишу на заказ советники, индикаторы и скрипты для MT4 и MT5  

Link to post
Share on other sites
  • 4 weeks later...
loewe

Если интересно, мне, лично, очень, то напишите, пожалуйста, советник или скрипт, собирающий статистику.

От даты DateStart до DateStop. Ищутся движения с откатами МЕНЬШЕ эаданной величины Rollback.

Другими словами. Сколько может пройти цена не откатив на Rollback и какова вероятность этого?

Link to post
Share on other sites
Caspa_Realize

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

ModStopReverse_v_7_aligator.mq4

Link to post
Share on other sites
cmillion
23.07.2021 в 15:00, loewe сказал:

Если интересно, мне, лично, очень, то напишите, пожалуйста, советник или скрипт, собирающий статистику.

От даты DateStart до DateStop. Ищутся движения с откатами МЕНЬШЕ эаданной величины Rollback.

Другими словами. Сколько может пройти цена не откатив на Rollback и какова вероятность этого?

Вот посмотрите, я его правда давно писал, но проверил и он вполне рабочий

1a6f8451f.png

 

ea-MaxTrend.mq4

Edited by Capman

Пишу на заказ советники, индикаторы и скрипты для MT4 и MT5  

Link to post
Share on other sites
loewe
21 час назад, cmillion сказал:

Вот посмотрите, я его правда давно писал, но проверил и он вполне рабочий

1a6f8451f.png

 

ea-MaxTrend.mq4 29 kB · 0 скачиваний

ЗдОрово. Спасибо. Для максимальных трендов было бы полезно знать их даты, чтобы не искать на графике.

Я, наверно, не все понял правильно. Величину отката можно задавать с помощью кнопок и тренды должны пересчитываться. Для GBPUSD на M30 с 15.07.2021 до 24.07.2021, я уменьшил откат со 100 до 10, а максимальные тренды не изменились (748 / 693). Кроме того, при смене таймфрейма все величины изменяются...

Edited by loewe
Link to post
Share on other sites
loewe

Есть ли хороший бесплатный копировщик сделок с исходниками для MT5?

Edited by loewe
Link to post
Share on other sites
  • 1 month later...
AiBay

Помогите написать советник по уровням поддержки и сопротивления

Link to post
Share on other sites
  • 1 month later...
loewe

Не секрет, что ночью спред СИЛЬНО раздвигается, снося стопы и исполняя отложенные ордера. Если есть сомнения, то посмотрите АНАЛИЗ СПРЕДА ПО ЦЕНАМ BID И ASK В METATRADER 5.

Думаю будет полезен эксперт, отслеживающий спред и защищающий от ложных срабатываний.

Я вижу его так.

 

Параметры.

TimeStart - время начала анализа спреда

TimeStop - время окончания анализа спреда

SpreadMax - максимальный спред

CountOfTriggering - число последовательных превышений спреда и, при возврате, последовательных спредов ниже максимального

 

Описание работы эксперта.

Если TimeStart > TimeStop (например, 23:00 и 02:00), то анализируется переход через полночь. В противном случае - внутри дня. Если 00:00 и 00:00, то целый день.

Если спред превысил SpreadMax (последовательно больше CountOfTriggering числа раз), то записывается состояние всех ордеров и позиций (например, в файл) и все отложенные ордера убираются, а у позиций удаляется стопы. При возврате спреда к норме (последовательно больше CountOfTriggering числа раз), ордера и стопы восстанавливаются, а файл переводится а архив (например, переименовывается).

 

Замечание.

Надо предусмотреть ПОДТВЕРЖДАЮЩИЙ ЗАПРОС (а не делать это автоматически), если в момент перезапуска терминала, возникнут условия для восстановления позиций.

 

 

Link to post
Share on other sites
Pirojoque Project
23 часа назад, loewe сказал:

Думаю будет полезен эксперт, отслеживающий спред и защищающий от ложных срабатываний.

Код, отслеживающий спред, должен быть внедрён в торгующий советник, иначе выйдет добротный велосипед на костылях. Более того, от ТС поведение при событиях по спреду могут сильно различаться, т.е. подобные решения не универсальны.

 

30.10.2021 в 10:02, loewe сказал:

Если спред превысил SpreadMax (последовательно больше CountOfTriggering числа раз), то [...] все отложенные ордера убираются, а у позиций удаляется стопы. При возврате спреда к норме (последовательно больше CountOfTriggering числа раз), ордера и стопы восстанавливаются

В случае разлёта спреда возле самих стопов, можно уже не успеть их удалить-восстановить — они просто сработают. Может лучше тогда вовсе перейти на "виртуальные стопы" (когда советник с учётом "приемлемости спреда" сам будет закрывать позиции при переходе "стоп-цены")?

  • Upvote 2
Link to post
Share on other sites
Ugar68

Ну допустим советник удалил отложки и стопы на ночь запомнив куда их вернуть. А когда спред нормализовался цена пересекла уровни стопов или срабатывания отложки. Вернуть на то же место не сможет.

  • Upvote 1

Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...