Уважаемые прогера, пожалуйста "сломайте" мой советник. ( ниже описание ).

 

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

Ссылка на скачивание http://www.forexdengi.com/attachment...8&d=1367836099 , тема советника моя тут http://www.forexdengi.com/threads/44...iya-c-sovetnik . 

На данный момент. Сов берёт данные 5 минутной свечки ( или любого тайм фрейма, который выставлен на графике ) и согласно всем данным открывает сделку. И ждёт исполнения закрытия этой сделки. И уже после всех нюансов, выставляет сделку. 

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

 

Т.е выглядеть это будет так: 5 минут свеча закрылась. Советник произвёл нужные подсчёты. Выставил сделку тем лотом, что прописано в сове. Дальше следующая 5 минут свеча закрылась, и открылась сделка. И так каждая завершённая свеча является причиной открытия сделки.

 

 

*** Ну. Ни хочу привлекать лишнее внимание. Но я участвовал им в http://championship.mql5.com/2012/ru/users/Alekcey  . Очень и Очень жаль, что перестал быть такой конкурс. Было очень весело в нём участвовать. Столько людей. Столько знакомств. :)

Файлы:
 

А при чём здесь "сломайте мой советник"?  Это по мотивам "ломай меня полностью" чтоль? ))

 

 
//+------------------------------------------------------------------+
//|                                              FIBO_harmonious.mq4 |
//+------------------------------------------------------------------+
//+ Other: Radishevskiy Alekcey Sergeevich :*******+
//+ Programmin: Nelzin Yriu :***********                     +
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
extern bool time_on=False;//если True то первую свечу по времени, если False то по линии
extern int hour_start=21;//час первой свечи справа за пиковой
extern int minute_start=10;//минута первой свечи справа за пиковой

extern double tek_lot=1;//лот - если 0, то будет расчитан из % риска
int sl=15;//стоплосс в пунктах
extern double k_tp=1.5;//коэффициент для 1-й формулы
extern double k_napr_1=0.6180;//1 коэффициент для 2-й формулы
extern double k_napr_2=1.6180;//2 коэффициент для 2-й формулы
extern int max_tp=70;//максимальный профит в пунктах
extern int min_tp=20;//минимальный профит в пунктах
extern int Risk=1;//процент риска на 1 сделку

extern bool spread_stop=False;//учитывать потерю спреда и стопа в следующей сделке


extern double Lots_New=0.01;

extern string lin="777";//имя линии

int tp,napr;
bool SellOp, BuyOp;
int i,total,ticket, razr=0;
int otkr_b=0, otkr_s=0;
double O,C,L,H;
double pr_h, pr_l;//уровни пробития
datetime sStartTime;//дата линии
double tek_tp;

bool fractal_low=False;
bool fractal_high=False;

double lot1;
double pp=1;//стоимость 1 пункт/лота
datetime time1;
int spread;
double profit1;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

int start(){///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   if(Bars<100){
      Print("bars less than 100");
      return(0);
   }
set_pos();


{//первая свеча для теста===================================================

{//смотрим указанное время для свечи



if(H!=L)
{


tp=sl=NormalizeDouble(MathAbs(((O-C)/(H-L)*k_tp/100)/Point),0);
tp=sl=NormalizeDouble(tp-MarketInfo(Symbol(),MODE_SPREAD),0);
napr=MathFloor(MathAbs((O-C)/(H-L)*k_napr_1*k_napr_2*100)); // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++1

if(napr*0.5==MathFloor(napr*0.5)&&napr>0){tek_tp=C+tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=True;SellOp=False;}}
if(napr*0.5!=MathFloor(napr*0.5)&&napr>0){tek_tp=C-tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=False;SellOp=True;}}



}
if(H==L){Comment("error");}
set_lot();

if(spread_stop==True)
{//spread_stop================================================
spread = MarketInfo(Symbol(),MODE_SPREAD);
set_history();
if(profit1<0)
{//если последняя сделка закрылась по стопу
Lots_New = NormalizeDouble(((((lot1*spread)+(lot1*sl))/tp +lot1) +(lot1/tp*sl)+(lot1*spread/tp))/pp,2);
if(Lots_New==lot1){Lots_New=lot1+0.01;}
}//если последняя сделка закрылась по стопу
}//spread_stop================================================

if (BuyOp == True&&SellOp==False&&otkr_b==0&&otkr_s==0){ticket = OrderSend(Symbol(),OP_BUY, Lots_New ,Ask, 3, Bid-sl*Point, Ask + tp*Point, "21082012", 21082012, 0, Green);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;time_on=false;}}
if (SellOp == True&&BuyOp==False&&otkr_b==0&&otkr_s==0){ticket = OrderSend(Symbol(), OP_SELL,Lots_New,Bid, 3, Ask+sl*Point, Bid - tp*Point, "21082012", 21082012, 0, Red);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;time_on=false;}}
Comment(sStartTime, "  Open=", O, "   Close=",C , "   High=",H,"   Low=",L,"   tp=",tp,"   NAPR=",napr,"   tek_tp=",tek_tp,"   lot=",Lots_New);



}//смотрим указанное время для свечи
}//первая свеча для теста==================================================


if(ObjectFind(lin)!=-1&&razr==0&&time_on==False) 
    {//есть такая линия=============================================================================================================
sStartTime = ObjectGet("777", OBJPROP_TIME1);
O=Open[iBarShift(Symbol(), PERIOD_M5, sStartTime)];
C=Close[iBarShift(Symbol(), PERIOD_M5, sStartTime)];
H=High[iBarShift(Symbol(), PERIOD_M5, sStartTime)];
L=Low[iBarShift(Symbol(), PERIOD_M5, sStartTime)];

SellOp=False;
BuyOp=False;


if(H!=L)
{
tp=sl=NormalizeDouble(MathAbs(((O-C)/(H-L)*k_tp/100)/Point),0);
tp=sl=NormalizeDouble(tp-MarketInfo(Symbol(),MODE_SPREAD),0);
napr=MathFloor(MathAbs((O-C)/(H-L)*k_napr_2*k_napr_2*100));//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2

if(napr*0.5==MathFloor(napr*0.5)&&napr>0){tek_tp=C+tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=True;SellOp=False;}}
if(napr*0.5!=MathFloor(napr*0.5)&&napr>0){tek_tp=C-tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=False;SellOp=True;}}



}
if(H==L){Comment("error");}
set_lot();

if(spread_stop==True)
{//spread_stop================================================
spread = MarketInfo(Symbol(),MODE_SPREAD);
set_history();
if(profit1<0)
{//если последняя сделка закрылась по стопу
Lots_New = NormalizeDouble(((lot1*spread)+(lot1*sl))/tp +lot1 +(lot1/tp*sl)+(lot1*spread/tp)/pp,2);
if(Lots_New==lot1){Lots_New=lot1+0.01;}
}//если последняя сделка закрылась по стопу
}//spread_stop================================================

if (BuyOp == True&&SellOp==False&&otkr_b==0&&otkr_s==0){ticket = OrderSend(Symbol(),OP_BUY, Lots_New ,Ask, 3, Bid-sl*Point, Ask + tp*Point, "21082012", 21082012, 0, Green);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
if (SellOp == True&&BuyOp==False&&otkr_b==0&&otkr_s==0){ticket = OrderSend(Symbol(), OP_SELL,Lots_New,Bid, 3, Ask+sl*Point, Bid - tp*Point, "21082012", 21082012, 0, Red);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
Comment(sStartTime, "  Open=", O, "   Close=",C , "   High=",H,"   Low=",L,"   tp=",tp,"   NAPR=",napr,"   tek_tp=",tek_tp,"   lot=",Lots_New);

    }//есть такая линия===========================================================================================================

if(time_on==False)
{//если время не задано
if(ObjectFind(lin)==-1||razr==1) 
    {//нет линии=============================================================================================================


if(razr==0)//0
{//
O=iOpen(Symbol(), PERIOD_M5, 3);
C=iClose(Symbol(), PERIOD_M5, 3);
H=iHigh(Symbol(), PERIOD_M5, 3);
L=iLow(Symbol(), PERIOD_M5, 3);
}//

if(razr==1)//1
{//
O=iOpen(Symbol(), PERIOD_M5, 3);
C=iClose(Symbol(), PERIOD_M5, 3);
H=iHigh(Symbol(), PERIOD_M5, 3);
L=iLow(Symbol(), PERIOD_M5, 3);
}//


SellOp=False;
BuyOp=False;

if(H!=L)
{
tp=sl=NormalizeDouble(MathAbs(((O-C)/(H-L)*k_tp/100)/Point),0);
tp=sl=NormalizeDouble(tp-MarketInfo(Symbol(),MODE_SPREAD),0);
napr=MathFloor(MathAbs((O-C)/(H-L)*k_napr_1*k_napr_2*100));

if(napr*0.5==MathFloor(napr*0.5)&&napr>0){tek_tp=C+tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=True;SellOp=False;}}
if(napr*0.5!=MathFloor(napr*0.5)&&napr>0){tek_tp=C-tp*Point;if(tp>=min_tp&&tp<=max_tp){BuyOp=False;SellOp=True;}}


}
if(H==L){Comment("error");}

if(razr==0)
{//если первая сделка

fractal_low=False;fractal_high=False;set_fractal();set_lot();

if(spread_stop==True)
{//spread_stop================================================
spread = MarketInfo(Symbol(),MODE_SPREAD);
set_history();
if(profit1<0)
{//если последняя сделка закрылась по стопу
Lots_New = NormalizeDouble(((lot1*spread)+(lot1*sl))/tp +lot1 +(lot1/tp*sl)+(lot1*spread/tp)/pp,2);
if(Lots_New==lot1){Lots_New=lot1+0.01;}
}//если последняя сделка закрылась по стопу
}//spread_stop================================================

if (fractal_low==True&&BuyOp == True&&SellOp==False&&otkr_b==0&&otkr_s==0&&(tek_tp-Ask)/Point>10){ticket = OrderSend(Symbol(),OP_BUY, Lots_New ,Ask, 3, Bid-sl*Point, Ask + tp*Point, "21082012", 21082012, 0, Green);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
if (fractal_high==True&&SellOp == True&&BuyOp==False&&otkr_b==0&&otkr_s==0&&(Bid-tek_tp)/Point>10){ticket = OrderSend(Symbol(), OP_SELL,Lots_New,Bid, 3, Ask+sl*Point, Bid - tp*Point, "21082012", 21082012, 0, Red);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
Comment(sStartTime, "  Open=", O, "   Close=",C , "   High=",H,"   Low=",L,"   tp=",tp,"   NAPR=",napr,"   tek_tp=",tek_tp,"   pr_h==",pr_h,"   pr_l=",pr_l,"   lot=",Lots_New,"  balance=",AccountBalance(),"   marga=",AccountFreeMargin());


}//если первая сделка


if(razr==1)
{//если не первая сделка

set_lot();

if(spread_stop==True)
{//spread_stop================================================
spread = MarketInfo(Symbol(),MODE_SPREAD);
set_history();
if(profit1<0)
{//если последняя сделка закрылась по стопу
Lots_New = NormalizeDouble(((lot1*spread)+(lot1*sl))/tp +lot1 +(lot1/tp*sl)+(lot1*spread/tp)/pp,2);
if(Lots_New==lot1){Lots_New=lot1+0.01;}
}//если последняя сделка закрылась по стопу
}//spread_stop================================================

if (BuyOp == True&&SellOp==False&&otkr_b==0&&otkr_s==0&&(tek_tp-Ask)/Point>10&&Ask>pr_h){ticket = OrderSend(Symbol(),OP_BUY, Lots_New ,Ask, 3, Bid-sl*Point, Ask + tp*Point, "21082012", 21082012, 0, Green);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
if (SellOp == True&&BuyOp==False&&otkr_b==0&&otkr_s==0&&(Bid-tek_tp)/Point>10&&Bid<pr_l){ticket = OrderSend(Symbol(), OP_SELL,Lots_New,Bid, 3, Ask+sl*Point, Bid - tp*Point, "21082012", 21082012, 0, Red);if(ticket>0){razr=1;pr_h=Ask+tp*Point;pr_l=Bid-tp*Point;}}
Comment(sStartTime, "  Open=", O, "   Close=",C , "   High=",H,"   Low=",L,"   tp=",tp,"   NAPR=",napr,"   tek_tp=",tek_tp,"   pr_h==",pr_h,"   pr_l=",pr_l,"   lot=",Lots_New,"  balance=",AccountBalance(),"   marga=",AccountFreeMargin());

}//если не первая сделка


   }//нет линии=============================================================================================================
}//если время не задано

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







void set_pos()
{

total=OrdersTotal();
otkr_s=0; otkr_b=0;

for(i=0;i<total;i++)    {//перебор всех открытых ордеров
                        OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
                        if(OrderSymbol()==Symbol())
                        {///
                        if(OrderType()==OP_SELL && OrderMagicNumber()==21082012) //OP_SELL
                        {////
                        otkr_s=1;
                        }////

                        if(OrderType()==OP_BUY && OrderMagicNumber()==21082012) //OP_BUY
                        {////
                        otkr_b=1;                      
                        }////
 
                        }///
                     }//перебор всех открытых ордеров
}





void set_fractal()
{
if(iHigh(Symbol(),PERIOD_M5,3)>iHigh(Symbol(),PERIOD_M5,5)&&iHigh(Symbol(),PERIOD_M5,3)>iHigh(Symbol(),PERIOD_M5,4)&&iHigh(Symbol(),PERIOD_M5,3)>iHigh(Symbol(),PERIOD_M5,2)&&iHigh(Symbol(),PERIOD_M5,3)>iHigh(Symbol(),PERIOD_M5,1)){fractal_high=True;}
if(iLow(Symbol(),PERIOD_M5,3)<iLow(Symbol(),PERIOD_M5,5)&&iLow(Symbol(),PERIOD_M5,3)<iLow(Symbol(),PERIOD_M5,4)&&iLow(Symbol(),PERIOD_M5,3)<iLow(Symbol(),PERIOD_M5,2)&&iLow(Symbol(),PERIOD_M5,3)>iLow(Symbol(),PERIOD_M5,1)){fractal_low=True;}


}


void set_lot()
{

double Free   =AccountFreeMargin();         // Свободные средства
double maxlot=Free/(100*((Ask+Bid)/2));

if(tek_lot==0)

{//если размер лота не задан
   double One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);//Стоим. 1 лота
   double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT);// Мин. размер. лотов
   double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
   double Step   =MarketInfo(Symbol(),MODE_LOTSTEP);//Шаг изменен размера
   
   double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота
   

Lots_New =MathFloor((Free*Risk/1000)/(sl*LotVal)/Step)*Step;


      if(Lots_New<Min_Lot){Lots_New=Min_Lot;}
      if(Lots_New>Max_Lot) {Lots_New=Max_Lot;}
      if(Lots_New>maxlot){Lots_New=maxlot;}
      
Lots_New=NormalizeDouble(Lots_New,2);



  int time=0;
  double Lots_Old=0;
  double profit_old=0;
  for (int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) break;
    if(((OrderMagicNumber()==21082012))
       && ((OrderSymbol()==Symbol()))
       && OrderCloseTime()>time) {
      time=OrderCloseTime();
      Lots_Old=OrderLots();
      profit_old=OrderProfit();
    } 
  }

if(profit_old<0){Lots_New=Lots_Old;if(Lots_New>maxlot){Lots_New=maxlot;}}

}//если размер лота не задан


if(tek_lot!=0){Lots_New=tek_lot;if(Lots_New>maxlot){Lots_New=maxlot;}}//если размер лота задан вручную

}

void set_history()
{

total=OrdersHistoryTotal();
time1=0;

for(i=0;i<total;i++)    {//перебор всех открытых ордеров
                        OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
                        if(OrderSymbol()==Symbol())
                        {///
                        if(OrderType()==OP_SELL || OrderType()==OP_BUY)
                        {////

                        if(OrderMagicNumber()==21082012)
                        {////
                        
                        if(OrderCloseTime()>time1)
                        {/////
                        
                        time1 = OrderCloseTime();
                        lot1 = OrderLots();
                        profit1= OrderProfit();
                        
                        }/////
                        
                        
                        }////

                   
                        }////
 
                        }///
                     }//перебор всех открытых ордеров



}

 

 

 

Подскажите. Где тут что сделать. Чтобы каждую новую свечу, советник выставлял сделку. ? Потому что сейчас советник ждёт стопа. и после выставляет сделку.