Yoursin
забанен

 
Уровень 2


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

Рейтинг 2156



РЕКОМЕНДУЮ




Лучшее от 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
  • Просмотров: 31325
  • 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 Сообщений: 16530 - Андрей

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

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

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

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

  • 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 Сообщений: 16530 - Андрей

  • 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 Сообщений: 16530 - Андрей

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

avatar

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

  • 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 Сообщений: 16530 - Андрей

  • 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


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