Yoursin
забанен

 
Уровень 2


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от Yoursin



Доработать советника Комментариев 17
2017-09-10 12:28:24Рейтинг 0

Доработать советника

Здравствуйте, очень прошу доработать двух советников! А именно добавить в них функцию Мартингейла с возможностью изменения множителя лота, также функцией открытия ордера обЪемом от баланса или постоянным размером и отключения данных функций вовсе. За ранее СПАСИБО!
ВОТ собственно коды советников:

Первый советник:

//+------------------------------------------------------------------+
//|                                                 BrickWalker3.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+

extern double LOT=0.1;           // Размер торгуемого лота
extern int Trend=0;              // 0-не торгует, 1-только sell, 2-только buy, 3-sell и buy
extern int Диапазон=5;          // не открывает новые ордера, если в этом диапазоне уже есть открытые ордера
extern bool MM=false;             // true-размер ордера зависит от эквити, false-размер ордера постоянный = LOT
extern double Risk =0.5;         // расчитывается по формуле: AccountEquity*Risk/100000
extern int    SL=0;              // Размер фиксированного стопа
extern int    TP=0;              // Размер фиксированного тэйка
extern bool Скрыть_SL_TP=false;
extern int    Slip=30;           // Проскальзывание цены
extern int Баров_для_входа=1;    // число баров для анализа
extern int Баров_для_выхода=100; // число баров для анализа
extern int Количество_ордеров=50;// максимально допустимое количество открытых ордеров
extern int Filter=0; // 0 - не использовать фильтры, 1 - фильтр 4D-RangeSwitch, 2 - фильтр Waddah Attar Explosion, 3 - два фильтра одновременно.
extern int  Sensetive=150;
extern int Spred=3; // максимально допустимый спред во время открытия ордера
extern bool Закрывать_ордера_в_пятницу=false;
extern int Время_закрытия_в_пятницу=20;
extern bool Использ_трал=false;  // вкл/выкл трала
extern double TrailingStart=100; // расстояние начала трала
extern int    TrailingStop=100;  // Фиксированный размер трала
extern int    TrailingStep=100;  // Шаг трала
extern bool реверс=false;        // открывает противоположные ордера: sell>buy, buy>sell
extern double SumProfit=1000;   // сумма профита для закрытия всех ордеров
extern int  ReversProfit=0; // 0 - не использовать
                            // 1 - закрывать все ордера, положительные и отрицательные, при появлении противоположного сигнала
//  2 - закрывать все только ПОЛОЖИТЕЛЬНЫЕ ордера при появлении противоположного сигнала, а отрицательные оставлять открытыми
extern string Coment="100";        // комментарий к ордерам
extern int Magic=100;              // магик ордера
extern bool   UseSound     = True;          // Использовать звуковой сигнал
extern string SoundSuccess = "expert.wav";  // Звук успеха
extern string SoundError   = "timeout.wav"; // Звук ошибки
color  clCloseBuy   = Lime;            // Цвет значка закрытия покупки
color  clCloseSell  = Red;             // Цвет значка закрытия продажи
static int бар=0;
double pp,pm,Profit,drange,Wadahgreen,Wadahred,Wadahyellov;int Nb=1;int Ns=1;int hWindow=0;
int oldBars=0;
int signbuy,signsell,closebuy,closesell,g,nsell,nbuy,BUY,SELL,SPREAD;datetime timeopen;
#include <stdlib.mqh> 
#include <WinUser32.mqh>
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   hWindow=WindowHandle(Symbol(),Period());
   oldBars=Bars; // we need that for 
//----
   бар=Time[0];
   Sleep(10000);
//----
   ObjectDelete("состояние"); ObjectDelete("magic");ObjectDelete("Profit");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
//--------------------------------------------------------------------
  {

   if(Digits<4)
      pp=0.01;
   else
      pp=0.0001;
   if(Digits==4 || Digits==2)pm=1;
   else pm=10;
   SPREAD=MarketInfo(Symbol(),MODE_SPREAD)/pm;
   double lotdigits;
   double maxLot=MarketInfo(Symbol(),MODE_MAXLOT);
   double minLot=MarketInfo(Symbol(),MODE_MINLOT);
   double lotstep=MarketInfo(Symbol(),MODE_LOTSTEP);
   if(lotstep==0.01)lotdigits=2;
   if(lotstep==0.1)lotdigits=1;
   if(lotstep==1)lotdigits=0;
   if(MM==true)
      LOT=NormalizeDouble(AccountEquity() *Risk/10000/10,lotdigits);
   if(LOT > maxLot) LOT = maxLot;
   if(LOT < minLot) LOT = minLot;
   int n=CountTrades();
   Modif();
   string txt="no trade";
   if(Trend==1)txt="only sell"+"("+SELL+")";
   if(Trend==2)txt="only buy"+"("+BUY+")";
   if(Trend>=3)txt="sell"+"("+SELL+")"+" &"+" buy"+"("+BUY+")";
   if(Использ_трал==true)
      Tral();
   if(Profit>SumProfit)ClosePosFirstProfit(Symbol(),-1,Magic);
   if(ObjectFind("Profit")==-1)
     {
      ObjectCreate("Profit",OBJ_LABEL,0,0,1);
      ObjectSet("Profit",OBJPROP_CORNER,3);
      ObjectSet("Profit",OBJPROP_XDISTANCE,15);
      ObjectSet("Profit",OBJPROP_YDISTANCE,10);
     }
   ObjectSetText("Profit","Profit: "+DoubleToStr(Profit,2),11,"Courier New",Yellow);
   if(ObjectFind("состояние")==-1)
     {
      ObjectCreate("состояние",OBJ_LABEL,0,0,1);
      ObjectSet("состояние",OBJPROP_CORNER,3);
      ObjectSet("состояние",OBJPROP_XDISTANCE,15);
      ObjectSet("состояние",OBJPROP_YDISTANCE,30);
     }
   ObjectSetText("состояние",txt,11,"Courier New",Yellow);
   if(ObjectFind("magic")==-1)
     {
      ObjectCreate("magic",OBJ_LABEL,0,0,1);
      ObjectSet("magic",OBJPROP_CORNER,3);
      ObjectSet("magic",OBJPROP_XDISTANCE,15);
      ObjectSet("magic",OBJPROP_YDISTANCE,50);
     }
   ObjectSetText("magic","Magic: "+Magic,11,"Courier New",Yellow);

//робота по открыт. бара
   if(Time[0]==бар)
     {Sleep(50);return(0);}

   drange=iCustom(NULL,0,"4D - Range Switch",0,1);
   Wadahgreen=iCustom(NULL,0,"Waddah_Attar_Explosion",0,Sensetive,15,15,15,0,1);
   Wadahred=iCustom(NULL,0,"Waddah_Attar_Explosion",0,Sensetive,15,15,15,1,1);
   Wadahyellov=iCustom(NULL,0,"Waddah_Attar_Explosion",0,Sensetive,15,15,15,2,0);
   Comment(Wadahyellov);
   бар=Time[0];
   int signal_выхода=Проверка_условий_выхода();
   if(signal_выхода==3)ClosePosFirstProfit(Symbol(), OP_BUY, Magic);
   if(signal_выхода==4)ClosePosFirstProfit(Symbol(), OP_SELL, Magic);

   if(Закрывать_ордера_в_пятницу==true && ((DayOfWeek()==5 && Hour()>=Время_закрытия_в_пятницу) || DayOfWeek()>=6))
     {ClosePosFirstProfit(Symbol(),-1,Magic);return(0); }

   int signal_входа=Проверка_условий_входа();
   int nnb=0;int mb=-1;int nns=0;int ms=-1;
   if((Wadahgreen>Wadahyellov && Filter==2) || (Wadahgreen>Wadahyellov && Filter==3) || Filter==0 || Filter==1)
     {
      if((Bid>drange && Filter==1) || (Bid>drange && Filter==3) || Filter==0 || Filter==2)
        {
         if(signal_входа==1 && n<Количество_ордеров && timeopen<iTime(Symbol(),0,0) && Trend!=0 && Trend!=1 && nbuy==0 && SPREAD<Spred)
           {
            if(ReversProfit!=0)
               ClosePosFirstProfit1(Symbol(),OP_SELL,Magic);
            while(nnb<5)
              {
               if(IsTradeContextBusy()==false)
                 {

                  mb=OrderSend(Symbol(),0,LOT,Ask,Slip,0,0,Coment,Magic,0,Lime);
                  nnb++;
                  if(mb>0)break;
                 }
               Sleep(100);
              }
           }
        }
     }
   if((Wadahred>Wadahyellov && Filter==2) || (Wadahred>Wadahyellov && Filter==3) || Filter==0 || Filter==1)
     {
      if((Bid<drange && Filter==1) || (Bid<drange && Filter==3) || Filter==0 || Filter==2)
        {
         if(signal_входа==2 && n<Количество_ордеров && timeopen<iTime(Symbol(),0,0) && Trend!=0 && Trend!=2 && nsell==0 && SPREAD<Spred)
           {
            if(ReversProfit!=0)
               ClosePosFirstProfit1(Symbol(),OP_BUY,Magic);
            while(nns<5)
              {
               if(IsTradeContextBusy()==false)
                 {
                  ms=OrderSend(Symbol(),1,LOT,Bid,Slip,0,0,Coment,Magic,0,Red);
                  nns++;
                  if(ms>0)break;
                 }
               Sleep(100);
              }
           }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Modif()
  {

   int nnb=0;bool mb=false;int nns=0;bool ms=false;

   for(int j=0; j<OrdersTotal(); j++)
     {
      if(OrderSelect(j,SELECT_BY_POS))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)

           {

            //вычисляем стоплосс и такепрофит
            if(OrderType()==OP_BUY)
              {
               if(Bid>OrderOpenPrice()+TP*pp && Скрыть_SL_TP==true && TP!=0)
                  g=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Lime);
               if(Bid<OrderOpenPrice()-SL*pp && Скрыть_SL_TP==true && SL!=0)
                  g=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Lime);
               if((OrderStopLoss()==0 && SL!=0) || (OrderTakeProfit()==0 && TP!=0))
                 {
                  double SLb=NormalizeDouble(OrderOpenPrice()-SL*pp,Digits);
                  if(SL==0 || Скрыть_SL_TP==true)SLb=OrderStopLoss();
                  double TPb=NormalizeDouble(OrderOpenPrice()+TP*pp,Digits);
                  if(TP==0 || Скрыть_SL_TP==true)TPb=OrderTakeProfit();
                  while(nnb<5)
                    {
                     if(IsTradeContextBusy()==false)
                       {
                        mb=OrderModify(OrderTicket(),0,SLb,TPb,Lime);
                        nnb++;
                        if(mb==true)break;
                       }
                     Sleep(100);
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(Ask<OrderOpenPrice()-TP*pp && Скрыть_SL_TP==true && TP!=0)
                  g=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
               if(Ask>OrderOpenPrice()+SL*pp && Скрыть_SL_TP==true && SL!=0)
                  g=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Lime);
               if((OrderStopLoss()==0 && SL!=0) || (OrderTakeProfit()==0 && TP!=0))
                 {
                  double SLs=NormalizeDouble(OrderOpenPrice()+SL*pp,Digits);
                  if(SL==0 || Скрыть_SL_TP==true)SLs=OrderStopLoss();
                  double TPs=NormalizeDouble(OrderOpenPrice()-TP*pp,Digits);
                  if(TP==0 || Скрыть_SL_TP==true)TPs=OrderTakeProfit();
                  while(nns<5)
                    {
                     if(IsTradeContextBusy()==false)
                       {
                        ms=OrderModify(OrderTicket(),0,SLs,TPs,Red);
                        nns++;
                        if(ms==true)break;
                       }
                     Sleep(100);
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;Profit=0; timeopen=0;nsell=0;nbuy=0;SELL=0;BUY=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      g=OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && (OrderType()==OP_SELL || OrderType()==OP_BUY) && OrderMagicNumber()==Magic)
        {
         count++;
         Profit=Profit+OrderProfit()+OrderSwap()+OrderCommission();
         if(OrderType()==OP_SELL)SELL++;
         if(OrderType()==OP_BUY)BUY++;
         if(OrderOpenTime()>timeopen)
            timeopen=OrderOpenTime();
         if(OrderType()==OP_SELL && OrderOpenPrice()>(Bid-Диапазон/2*pp) && OrderOpenPrice()<(Bid+Диапазон/2*pp))
            nsell++;
         if(OrderType()==OP_BUY && OrderOpenPrice()>(Ask-Диапазон/2*pp) && OrderOpenPrice()<(Ask+Диапазон/2*pp))
            nbuy++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Проверка_условий_входа()
  {
   double napravl=0;  signbuy=0;signsell=0;
   for(int z=1;z<=Баров_для_входа;z++)
     {
      if(реверс==false)
         napravl=iClose(Symbol(),0,z)-iOpen(Symbol(),0,z);
      else
         napravl=iOpen(Symbol(),0,z)-iClose(Symbol(),0,z);
      if(napravl>0)signbuy++;
      if(napravl<0)signsell++;
     }
   if(signbuy==Баров_для_входа)return(1);
   if(signsell==Баров_для_входа)return(2);
   else return(0);

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Проверка_условий_выхода()
  {
   double napravl=0;  closebuy=0;closesell=0;
   for(int z=1;z<=Баров_для_выхода;z++)
     {
      if(реверс==false)
         napravl=iClose(Symbol(),0,z)-iOpen(Symbol(),0,z);
      else
         napravl=iOpen(Symbol(),0,z)-iClose(Symbol(),0,z);
      if(napravl>0)closesell++;
      if(napravl<0)closebuy++;
     }
   if(closebuy==Баров_для_выхода)return(3);
   if(closesell==Баров_для_выхода)return(4);
   else return(0);

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Tral()
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>TrailingStart*pp)
                 {
                  if(OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*pp)
                    {
                     ModifyStopLoss(Bid-TrailingStop*pp);

                    }
                 }

              }
            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice() -Ask>TrailingStart*pp)
                 {
                  if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0)
                    {
                     ModifyStopLoss(Ask+TrailingStop*pp);

                    }
                 }

              }
           }
        }
     }

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss)
  {
   bool fm;

   fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);

  }
//|  Описание: Закрытие одной предварительно выбранной позиции                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect()
  {
   bool   fc;
   color  clClose;
   double ll,pa,pb,pp1;
   int    dg=MarketInfo(OrderSymbol(),MODE_DIGITS),err,it;

   if(OrderType()==OP_BUY || OrderType()==OP_SELL)
     {
      for(it=1; it<=5; it++)
        {
         if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
           {
            Print("ClosePosBySelect(): Остановка работы функции");
            break;
           }
         while(!IsTradeAllowed()) Sleep(5000);
         RefreshRates();
         pa=MarketInfo(OrderSymbol(), MODE_ASK);
         pb=MarketInfo(OrderSymbol(), MODE_BID);
         if(OrderType()==OP_BUY)
           {
            pp1=pb; clClose=clCloseBuy;
              } else {
            pp1=pa; clClose=clCloseSell;
           }
         ll=OrderLots();
         pp1=NormalizeDouble(pp1,dg);
         fc=OrderClose(OrderTicket(),ll,pp1,10,clClose);
         if(fc)
           {
            if(UseSound) PlaySound(SoundSuccess); break;
              } else {
            err=GetLastError();
            if(UseSound) PlaySound(SoundError);
            if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
            Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
                  ErrorDescription(err),", try ",it);
            Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp1);
            Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
                  "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
            Sleep(1000*5);
           }
        }
     }
   else Print("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
  }
//|  Описание : Закрытие позиций по рыночной цене сначала прибыльных           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="",int op=-1,int mn=-1)
  {
   int i,k=OrdersTotal();
   if(sy=="0") sy=Symbol();

// Сначала закрываем прибыльные позиции
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==Symbol()) && (op<0 || OrderType()==op))
           {
            if((OrderType()==OP_BUY) || (OrderType()==OP_SELL))
              {
               if(OrderMagicNumber()==Magic)
                 {
                  if(OrderProfit()+OrderCommission()+OrderSwap()>0) ClosePosBySelect();
                 }
              }
           }
        }
     }
// Потом все остальные
  
      k=OrdersTotal();
      for(i=k-1; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            if((OrderSymbol()==Symbol()) && (op<0 || OrderType()==op))
              {
               if((OrderType()==OP_BUY && OrderComment()!="две_маши_лок_селл") || (OrderType()==OP_SELL && OrderComment()!="две_маши_лок_бай"))
                 {
                  if(OrderMagicNumber()==Magic) ClosePosBySelect();
                 }
              }
           }
        }
    
  }
//|  Описание : Возвращает наименование торговой операции                      |

string GetNameOP(int op)
  {
   switch(op)
     {
      case OP_BUY      : return("Buy");
      case OP_SELL     : return("Sell");
      case OP_BUYLIMIT : return("BuyLimit");
      case OP_SELLLIMIT: return("SellLimit");
      case OP_BUYSTOP  : return("BuyStop");
      case OP_SELLSTOP : return("SellStop");
      default          : return("Unknown Operation");
     }
  }
//+------------------------------------------------------------------+
void ClosePosFirstProfit1(string sy="",int op=-1,int mn=-1)
  {
   int i,k=OrdersTotal();
   if(sy=="0") sy=Symbol();

// Сначала закрываем прибыльные позиции
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==Symbol()) && (op<0 || OrderType()==op))
           {
            if((OrderType()==OP_BUY) || (OrderType()==OP_SELL))
              {
               if(OrderMagicNumber()==Magic)
                 {
                  if(OrderProfit()+OrderCommission()+OrderSwap()>0) ClosePosBySelect();
                 }
              }
           }
        }
     }
// Потом все остальные
   if(ReversProfit!=2)
     {
      k=OrdersTotal();
      for(i=k-1; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            if((OrderSymbol()==Symbol()) && (op<0 || OrderType()==op))
              {
               if((OrderType()==OP_BUY && OrderComment()!="две_маши_лок_селл") || (OrderType()==OP_SELL && OrderComment()!="две_маши_лок_бай"))
                 {
                  if(OrderMagicNumber()==Magic) ClosePosBySelect();
                 }
              }
           }
        }
     }
  }


ВТОРОЙ СОВЕТНИК:

//+------------------------------------------------------------------+
//|                                                        Sigma.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double Profit     = 0.1;      // общий язь в валюте
extern double BuyProfit  = 0;        // язь по баям
extern double SellProfit = 0;        // язь по селам
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int CandleProfit  = 0;        // 1-кроем профит в конце свечи
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseType(int type)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY && type==0)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL && type==1)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      if(Close[1]>Open[1])
        {
         PutOrder(0,Ask);
        }
      if(Close[1]<Open[1])
        {
         PutOrder(1,Bid);
        }
      // кроем профит в конце свечи
      if(CandleProfit>0 && AllProfit()>0) CloseAll();      
      t=Time[0];
     }

//кроем все 
   if(Profit>0 && AllProfit()>Profit)
     {
      CloseAll();
     }

//кроем баи 
   if(BuyProfit>0 && AllProfit(0)>BuyProfit) CloseAll(0);

//кроем селы
   if(SellProfit>0 && AllProfit(1)>SellProfit) CloseAll(1);

   Comment("\n All Profit: ",AllProfit(),
           "\n Buy Profit: ",AllProfit(0),
           "\n Sell Profit: ",AllProfit(1));
  }
//+------------------------------------------------------------------+
  • +1
  • Просмотров: 31218
  • 10 сентября 2017, 12:28
  • Yoursin
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
MA сейф
Следующая запись в группе  
Совмещение двух индикаторов
09 сентября 2017
10 сентября 2017

Брокер для ваших роботов, 15 лет на рынке

Комментарии (17)

+
0
Просьба пользоваться тегами для вставки кода, как сейчас(поправил).
Бесплатно трейдерам от 3-го уровня или с поручителем. См. правила: project.opentraders.ru/20424.html

Внимание! Одно из основных условий — заказы принимаются в бесплатную работу только с 3-го уровня и не более 1 заказа в месяц. Однако, даже если у Вас нет нужного уровня, Вы можете воспользоваться поручительством другого пользователя (см. пункт 1.7)
Подробнее в правилах ниже.
avatar

  35  AM2 Сообщений: 16273 - Андрей

  • 10 сентября 2017, 13:03
+
0
Андрей привет! Я поклоник Мартина и хочу стать поручителем Yoursin *friends* 
avatar

  13  Jora1973 Сообщений: 114

  • 10 сентября 2017, 13:09
+
0
В среду будет по очереди.
avatar

  35  AM2 Сообщений: 16273 - Андрей

  • 10 сентября 2017, 13:23
+
0
*drinks* 
avatar

  2  Yoursin Автор Сообщений: 38 - забанен

  • 10 сентября 2017, 15:04
+
0
Спасибо, Вам огромное))))
avatar

  2  Yoursin Автор Сообщений: 38 - забанен

  • 10 сентября 2017, 15:05
+
0
Вроде-как нащупал профит в этих двух советниках НО очень не достает «МАРТИНА»(((
avatar

  2  Yoursin Автор Сообщений: 38 - забанен

  • 10 сентября 2017, 15:07
комментарий был удален 2017-09-11 04:06:35 Yoursin

+
+1
Зачем 2 раза повторяешь? За лохов нас держишь чтоли? <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/003.gif' alt=' :D '>&nbsp; 
Как в анекдоте про Баден Баден <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; 

«Летит самолет, в самолете сидит новый русский, стюардесса обявляет:
— Господа пассажиры, через несколько минут мы приземляемся в городе Баден-Баден.
Новый русский:
— Ты что за лохов нас держишь 2 раза повторяешь!»

Редактирован: 10 сентября 2017, 16:23
avatar

  35  AM2 Сообщений: 16273 - Андрей

  • 10 сентября 2017, 16:19
+
0
А где индикаторы от брикволкера?

2017.09.13 20:27:18.377 2017.01.16 19:00:00 cannot open file 'D:\Program Files\Alpari Limited MT4\MQL4\indicators\4D — Range Switch.ex4' [2]
2017.09.13 20:27:18.373 2017.01.16 18:45:00 cannot open file 'D:\Program Files\Alpari Limited MT4\MQL4\indicators\Waddah_Attar_Explosion.ex4' [2]

avatar

  35  AM2 Сообщений: 16273 - Андрей

  • 13 сентября 2017, 19:28
+
0
В сигму добавил: www.opentraders.ru/downloads/1117/

avatar

  35  AM2 Сообщений: 16273 - Андрей

  • 13 сентября 2017, 19:55
+
0
У меня он без индикаторов работает…
avatar

  2  Yoursin Автор Сообщений: 38 - забанен

  • 14 сентября 2017, 09:16
+
0
В советнике SIGMA «мартин» работает не так как нужно После открытия ордера, допустим в SELL лотом 0.1 следующий ордер будет открыт с удвоением, но так же в направлении SELL. А ордер между ними открывшийся в BUY советник открывает начальным лотом. А нужно открыть удвоением согласно очередности: 1-йSell 0.1 2-й Sell 0.4 3-й Buy 0.6 и т.д.

Сейчас происходит Так:)  Sell -0.1- 2) Sell -0.4- 3) Buy -0.1- 5) Buy -0.4- 6) Sell -0.8- и т.д
Такой алгоритм вызывает большие просадки и риск слива депо
avatar

  2  Yoursin Автор Сообщений: 38 - забанен

  • 16 сентября 2017, 08:08
+
0
После открытия ордера, допустим в SELL лотом 0.1 следующий ордер будет открыт с удвоением, но так же в направлении SELL. А ордер между ними открывшийся в BUY советник открывает начальным лотом. А нужно открыть удвоением согласно очередности: 1-йSell 0.1 2-й Sell 0.4 3-й Buy 0.6 и т.д.


А почему в начале об этом не было ни слова?
avatar

  35  AM2 Сообщений: 16273 - Андрей

  • 16 сентября 2017, 16:38
комментарий был удален 2017-09-30 19:30:57 Yoursin

комментарий был удален 2017-09-30 19:31:23 Yoursin

комментарий был удален 2017-09-30 19:29:54 Yoursin

комментарий был удален 2017-09-30 19:31:03 Yoursin


Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий