Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай, как вставлять видео в редакторе сообщений
Mihail Marchukajtes
3296
Mihail Marchukajtes 2012.02.13 15:35 

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

Вот собственно код совентника

#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link  "1"
extern double TakeProfit=10000;
extern double StopLoss=10000;
extern double OPTakeProfit=1000;
extern double OPStopLoss=1000;
extern double TralingStop=1000;
extern int set=5;
extern int up=5;
extern int zukko1=0;
extern int TT=7;
extern int step=150;
extern double Lot=0.1;
double support, resist, support1,resist1;
bool seljak=true, bajak=true,seljak1=false, bajak1=false;
int b;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
support=NormalizeDouble(iCustom(NULL, 0, "TDSEQUENTA v0000",set,up,zukko1,TT,0,0),4);
resist=NormalizeDouble(iCustom(NULL, 0, "TDSEQUENTA v0000",set,up,zukko1,TT,1,0),4);
support1=NormalizeDouble(iCustom(NULL, 0, "TDSEQUENTA v0000",set,up,zukko1,TT,0,1),4);
resist1=NormalizeDouble(iCustom(NULL, 0, "TDSEQUENTA v0000",set,up,zukko1,TT,1,1),4);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
int TotalOrders, TotalOrders1;
int i,ticket=-1,ticket1=-1;
//if (b!=Bars){
b=Bars;
support=NormalizeDouble(iCustom(NULL, 0, "TDSEQUENTA v0000",set,up,zukko1,TT,0,0),4);
resist=NormalizeDouble(iCustom(NULL, 0, "TDSEQUENTA v0000",set,up,zukko1,TT,1,0),4);
Comment ("Последний лось тип и цена открытия",Last_Close_Loss(),"Наличие ордера на этом уровне",Prezent_Order());

if ((Last_Close_Loss()>0)&&(Prezent_Order()==false)){
               if (NormalizeDouble(MathAbs(Last_Close_Loss()),4)==resist+step*Point){
                        ticket=OrderSend(Symbol(),OP_BUYSTOP,Lot,resist+step*Point,3,resist-step*Point,Ask+TakeProfit*Point);  
                        if (ticket<0) return(0);
                        }
               if (NormalizeDouble(MathAbs(Last_Close_Loss()),4)==support+step*Point){
                        ticket=OrderSend(Symbol(),OP_BUYSTOP,Lot,support+step*Point,3,support-step*Point,resist-step*Point); 
                        if (ticket<0) return(0);
                        }
}
if ((Last_Close_Loss()<0)&&(Prezent_Order()==false)){
               if (NormalizeDouble(MathAbs(Last_Close_Loss()),4)==resist-step*Point){                         
                        ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,resist-step*Point,3,resist+step*Point,support-step*Point);  
                        if (ticket<0) return(0);
               }
//вот сюда он заходит
               if (NormalizeDouble(MathAbs(Last_Close_Loss()),4)==support-step*Point){
                        // А вот сюда как то через раз.
                        ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,support-step*Point,3,support+step*Point,Ask-TakeProfit*Point); 
                        if (ticket<0) return (0);
               }

}



 if ((support!=support1)||(resist!=resist1)){
        TotalOrders=OrdersTotal();
        for (i=0; i<=TotalOrders; i++){
                 if (OrderSelect(0,SELECT_BY_POS)==true){
                    if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,5,Red);
                    if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,5,Red);
                    if (OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket(),Green);
                    if (OrderType()==OP_BUYSTOP) OrderDelete(OrderTicket(),Green);
                    if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket(),Green);
                    if (OrderType()==OP_BUYLIMIT) OrderDelete(OrderTicket(),Green);
                 
                 }
        }
                      
}  
if (support!=support1){
         if (support<resist){
 
            ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,support-step*Point,3,support+step*Point,Ask-TakeProfit*Point);
            ticket1=OrderSend(Symbol(),OP_BUYLIMIT,Lot,support+step*Point,3,support-step*Point,resist-step*Point); 

            ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lot,resist-step*Point,3,resist+step*Point,support+step*Point);
            ticket1=OrderSend(Symbol(),OP_BUYSTOP,Lot,resist+step*Point,3,resist-step*Point,Ask+TakeProfit*Point); 
            if (ticket<0) return(0); 
            if (ticket1<0) return(0);          
         

}
}
if (resist!=resist1){
         if (support<resist){
       
            ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,support-step*Point,3,support+step*Point,Ask-TakeProfit*Point);
            ticket1=OrderSend(Symbol(),OP_BUYLIMIT,Lot,support+step*Point,3,support-step*Point,resist-step*Point); 

            ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lot,resist-step*Point,3,resist+step*Point,support+step*Point);
            ticket1=OrderSend(Symbol(),OP_BUYSTOP,Lot,resist+step*Point,3,resist-step*Point,Ask+TakeProfit*Point); 
            if (ticket<0) return(0); 
            if (ticket1<0) return(0);          
         
}
}




resist1=resist;
support1=support;


//}
   
  return(0);
  }
  
 //Проверка лосей 
double Last_Close_Loss(){
double Last_profit=0, Last_close_lots=0,Last_Type=0,Last_Open_Price=0 ; int time=0; 
//---------
   for (int i=OrdersHistoryTotal();i>=1;i--){
         if(OrderSelect(i-1, SELECT_BY_POS, MODE_HISTORY))
         if(OrderSymbol ()!= Symbol())continue;
         if(OrderType() <=1 )
           {if(OrderCloseTime()>time){time=OrderCloseTime();
                                      Last_profit=OrderProfit()+OrderSwap();
                                      Last_Type=OrderType();
                                      Last_Open_Price=OrderOpenPrice();
                                      }
           }
        }    
if(Last_profit<0){
   if (Last_Type==OP_SELL) Last_Open_Price=Last_Open_Price*(-1);
   return(Last_Open_Price);
}
 return (0);    
   
} 
//Проверка наличия отложенника по цене.   
bool Prezent_Order(){
bool Chek=false; 
int TotalOrders,i;
        TotalOrders=OrdersTotal();
        for (i=0; i<=TotalOrders; i++){
                 if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
                  if (NormalizeDouble(OrderOpenPrice(),4)==NormalizeDouble(MathAbs(Last_Close_Loss()),4)) Chek=true;   
                 }
        }

 return(Chek);  
} 

Во и думаеться мне неужели это происки тестера. Блин то откроет ордер то не ставит его ни в какую, причём ошибок никаких нет. Помогите Бразы, уже второй день не сплю :(((((

Наглядный пример что работает через раз.... как такое может быть????

Mihail Marchukajtes
3296
Mihail Marchukajtes 2012.02.13 15:45  
Я даже в коде пометил куда он не заходит, вернее заходит через раз. как то :(((((
Роман
7939
Роман 2012.02.13 15:50  
Это не просто тестер - это бот "хозяев", через которых Вы этот терминал ставили себе на комп, от Всемирного Консорциума банков, уже в тестере прощупывает слабые места Вашего грааля для последующего слива Вашего дЕпа у них на реале... Будьте осторожны - особенно с ДЦ кухнями...
Mihail Marchukajtes
3296
Mihail Marchukajtes 2012.02.13 15:59  
Да пипец, а я думал что код советника беспрестрастен к подобным явлениям :(((((( СЦУКО!!!!!!
Vladimir
1592
Vladimir 2012.02.13 16:05  

Это для пятизнака, я так понял ? А Slip=3 не маловато тогда ?

extern double OPStopLoss=1000;
extern double TralingStop=1000;
Mihail Marchukajtes
3296
Mihail Marchukajtes 2012.02.13 16:06  
Ладно, шутки шутками, а с кодом то что не так?????
Mihail Marchukajtes
3296
Mihail Marchukajtes 2012.02.13 16:06  
BeerGod:

Это для пятизнака, я так понял ? А Slip=3 не маловато тогда ?



Етить мадрить и вправду яж под 5 знак это всё делал. Сейчас попробую....
Alexey Subbotin
4999
Alexey Subbotin 2012.02.13 16:21  

Хорошо бы для чисел с плавающей точкой вместо

 if (NormalizeDouble(MathAbs(Last_Close_Loss()),4)==support-step*Point){

вот так

 if (NormalizeDouble(MathAbs(Last_Close_Loss())-(support-step*Point),4)==0){
Mihail Marchukajtes
3296
Mihail Marchukajtes 2012.02.13 16:21  

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

Последний лось был от села (знак минус) с ценой открытия 1.4322 и в данный момент ордер на этом уровне отсутствует. Тоесть условия все соблюдены, а позиция так и не открыта. Как такое может быть??? Где ошибка????

Mihail Marchukajtes
3296
Mihail Marchukajtes 2012.02.13 16:22  
alsu:

Хорошо бы для чисел с плавающей точкой вместо

вот так




Сейчас попробую....
Mihail Marchukajtes
3296
Mihail Marchukajtes 2012.02.13 16:31  
alsu:

Хорошо бы для чисел с плавающей точкой вместо

вот так




УРРРААА!!!!!! Заработало. Никогда не дружил с числами с плавающей точкой. Сначало мне вообще показалось что у Вас ошибка, но чёрт подери РАБОТАЕТ. теперь ставит всё правильно. Осталось дописать модуль отыгрша и уже будет видно что да как :))))
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий