[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 484

 
И что-то не то с опираторами иф!!!
 
Dimka-novitsek:

Спасибо!!    Вписал нормализацию...     А чёртте-ЧТО вобще происходит!!!!!!   Просто голова горит.. Вроде проще школьной геометрии



Да не нужна для ASK и BID нормализация, нужен Sleep(Ща1сек-5сек);
 

Понял! А дело-то в чём! Щас ка я сфармулирую...    Спасибо огромное всем за участие, за помощ. Я сам ничего не пойму Обратите внимание на вышеприведеный код. Там условие 

 if (strela1<strela2&&SELL==0&&BUY!=0
  ){ udalenie ();

Если..и если..и Если ордеров бай нет.То-есть есть,есть! Их не ноль. Как видно на скрине, код только начал работу, ордеров бай нет! Ну точно нет! А условие выполняется, хоть и не должно! 

Это видно иззззз сообщения принта в окне эксперты. Ордер к стати при выполнении условия был проставлен прекрасно, то-есть, был проставлен! 

 Выходит что, я неверно прописал условие??   

 

Конечно, тут же срабатывает следующее условие кода,

if (strela1<strela2&&BUY==0&&SELL==0){

вот которое и должно было срабатывать при даных обстоятельствах!

В чём же дело!!?? 

Что же не так с логическим условием??? 

Как же так, чёрт возззззьми, выполняются они оба сразззу?? 

 

Смотрю, не пойму... Таки два сразу условия выполняются!!  Наверно я баран.. Но непойму. Вот уж нелепица. Видать я разучился оператор иф прописывать!  

Блин, весь код

//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot=1;                          
  extern int taymfreym=0 ;                           
  extern double  stoplos=200 ;                          
  extern double  takeprofit=500 ; 
  extern double  magicnumber=350 ;                          


void BreakPoint(){//if (!IsVisualMode()) return(0);
keybd_event(19,0,0,0);
Sleep(10);
keybd_event(19,0,2,0);}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  НачалоНачал " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int i;
int start()
  {Print (   "  Начало " ); 
//----
for( int A=0; A<100 ; A++){
            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, A);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, A);
            
            int BUY=0,SELL=0;int ticket; 
            Print ( A,  "  strela1 " , strela1 , "    strela2  " , strela2 ); 
            
    
            
            for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );Print( "BUY++   " , BUY  ,"  ticket ",ticket);}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );Print( "SELL++   " , SELL  ,"  ticket ",ticket);}    } }
         
  
  if (strela1<strela2&&SELL==0&&BUY!=0
  ){ udalenie ();
              
   OrderSend(Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
      Print( "strela1<strela2&&BUY==0&&SELL!=0 " , GetLastError()); }
            
  if (strela1>strela2){ udalenie ();
                
   OrderSend(Symbol( ), OP_SELL, lot,NormalizeDouble( Bid, Digits), 3*Point, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1>strela2&&SELL==0&&BUY!=0 " , GetLastError()); }
      
    if (strela1<strela2&&BUY==0&&SELL==0){    
            
           OrderSend( Symbol( ), OP_BUY, lot, NormalizeDouble(Ask, Digits), 3*Point, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);  
            Print( "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
 NormalizeDouble( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }
           
   if (strela1>strela2&&BUY==0&&SELL==0){  
   
            OrderSend( Symbol( ), OP_SELL, lot,NormalizeDouble( Bid, Digits), 3*Point, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1>strela2&& OP_SELL  " , GetLastError()   ,"  Bid ",Bid,"    stoplos=   NormalizeDouble( Ask- (stoplos*Point),Digits)  ",
 NormalizeDouble( Ask- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));
            Print( "strela1>strela2&& OP_SELL   " , GetLastError()  ," (stoplos*Point) ",(stoplos*Point),"   Point  ", Point,"   Digits  ", Digits); }
               
    
   
   
     } Print (   "  Конец " ); BreakPoint();     
//----
   return(0);
  }
//+------------------------------------------------------------------+

void udalenie (){ int total = OrdersTotal();
  for(i=total-1;i>=0;i--)
    {
    OrderSelect(i, SELECT_BY_POS);
   int type   = OrderType();  bool result = false;
    switch(type)
          { 
          case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3*Point, CLR_NONE ); break;
          case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3*Point, CLR_NONE ); break; 
          }
    if(!result)
      {
      int error =  GetLastError(); 
      string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
      Print(errorcomment);
      }  
    }       
   }

 Обьяснение, чтоб же проще было.. Стандартный как мне кажется пирибор ордеров. Щёт отдельно открытым настоящим ордерам ордерам в переменных  BUY++,  SELL++   .

Дальше эти переменные участвуют в логических условиях. Остальное, как мне кажется, к вопросу значения не имеет, хотя кто его зна. 

 

Вобще-то щитает их чётко, что я видел по принтам.  

 
aedu:
Скачал советника для работы в "один клик",Скомпилировал - ошибок нет,но Кроме "рожицы"в углу ничего не кажет .Помогите!!!!!!!!!!!!!
советник, который Вы скачали требует для своей работы некий файл "McTrader_"+Symbol()+"_command.dat", я так понимаю что то типа скрипта с командами для советника. Сам он его не создает. Поэтому обращайтесь в разработчику за разъяснениями.
 
Dimka-novitsek:

Смотрю, не пойму... Таки два сразу условия выполняются!!  Наверно я баран.. Но непойму. Вот уж нелепица. Видать я разучился оператор иф прописывать!  

Блин, весь код

 Обьяснение, чтоб же проще было.. Стандартный как мне кажется пирибор ордеров. Щёт отдельно открытым настоящим ордерам ордерам в переменных  BUY++,  SELL++   .

Дальше эти переменные участвуют в логических условиях. Остальное, как мне кажется, к вопросу значения не имеет, хотя кто его зна. 

 

Вобще-то щитает их чётко, что я видел по принтам.  

"индикатор" не дадите?

хотя не надо 

 
 

А казачок то засланный, чего он так раздухарился?  
 
Dimka-novitsek:

Смотрю, не пойму... Таки два сразу условия выполняются!!  Наверно я баран.. Но непойму. Вот уж нелепица. Видать я разучился оператор иф прописывать!  

Блин, весь код

 Обьяснение, чтоб же проще было.. Стандартный как мне кажется пирибор ордеров. Щёт отдельно открытым настоящим ордерам ордерам в переменных  BUY++,  SELL++   .

Дальше эти переменные участвуют в логических условиях. Остальное, как мне кажется, к вопросу значения не имеет, хотя кто его зна. 

 

Вобще-то щитает их чётко, что я видел по принтам.  

Куча логических и технических ошибок. Логика открытия ордеров не прослеживается (пришлось подключить фантазию). Нужно учиться САМОМУ, ковыряя свой корявый код (пока он не "выпрямится") ИЛИ изучать ЧУЖИЕ коды. Я сделал за Вас Ваш код. - поможет ли это Вам???

P.S. Как я уже говорил, для тестера цены нормализовать не нужно. А вот одной из возможных причин, выдающих ошибку "Не правильная цена" при исполнени торгового приказа, может быть Slippage, который у Вас 3 * Point (при переводе в int) = 0.

Файлы:
rcjipewc.mq4  6 kb
 
Спасибо!!!!!
 
san44es:

Народ, подскажите!

Есть пользовательская функция, которая считает Low цены 5-го бара фонового таймфрейма, как сделать так чтобы она считала цену определенного таймфрейма?

iLow