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

 
agat8430:


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

"У гениальных людей  гениальный ответ " 


 Переменным названия придай "читабельные".
 
hoz:


 Да нет, не без стопа. Я ж кусок выложил только. Вот функцию безубытка моя:

 В строке ясно видно, что если стоп рассчитаный равен тому, который есть уже, то модификации не будет! Верно же? Значит проверка то изначально и была? Но пока в старте не вбил очередное условие перед функцией модификации ошибка 1 выскакивала постоянно:

 

Вот почему.... это я и хочу понять. Вроде я всё описал досканально.

У меня функция служит для всех модификаций как установка СЛ и ТП, перевод в Б/У, трал позиций и ордеров с попытками и проверками на ошибки.

А в старте только нужно прописывать выбор позиции, условия и предупредительные меры. Вот функция:

void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3)
  {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0)
    { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(5000); RefreshRates(); ModifyCnt++;
} } }
Маленькая да удаленькая!
 


  Спасибо!  обязательно прочту .

 

   Мир не без добрых людей.

 
hoz:

 Переменным названия придай "читабельные".


 у меня есть советник   обыкновенный мартин "Ilan"  . хочу чтоб он модифицировал не все открытые  ордера . а только начальный и последний ордер  по T/P Хочу сделать  помощника для себя .    сможешь помоги . вот его код  

 

 /* Так и до бана не далеко */
 

Всем привет.Я беру значения индикаторов в отдельном окне с уже сформерованного бара (т.е. с бара №1),которые считаю один раз на баре №0 на первом его тике.Всё работает быстро и правильно.НО стоит выключить компьютер и через какое-то время снова включить,то индикаторы продолжают исправно работать,а вот их значений на то время,когда был выключен компьютер нет.Просто пустое место.Т.е. есть значения индикаторов ДО выключения и ПОСЛЕ включения компьютера.Но стоит только переключиться туда-обратно с ТФ наТФ - все "пропавшие" значения появляются.Индикаторы стандартные - CCI,AO и т.п.Коды брал с форумов,их прилагаю.Объясните,пожалуйста,где я не прав и чего не понимаю.

 


      Код №1
        ------


int start()
  {  
              
//--------------------------------------------------------------------
   Fun_New_Bar();                               // Обращение к ф-ии
   if (New_Bar==false)                          // Если бар не новый..
      return;                                   // ..то уходим
//--------------------------------------------------------------------    
        
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------
   return(0);
 
  }
   
//+------------------------------------------------------------------+  
void Fun_New_Bar()                              // Ф-ия обнаружения ..
  {                                             // .. нового бара
   static datetime New_Time=0;                  // Время текущего бара
   New_Bar=false;                               // Нового бара нет
   if(New_Time!=Time[0])                        // Сравниваем время
     {
      New_Time=Time[0];                         // Теперь время такое
      New_Bar=true;                             // Поймался новый бар
     }
  }
//--------------------------------------------------------------------  



        Код №2
        ------


int start()
{  
     if (NewBar() == true)
  {  
         
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------           
  }    

   return(0); 
}
   
//+------------------------------------------------------------------+    
bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}


      
          Код №3
          ------


//--- buffers
double ExtMapBuffer1[];
//--- for one bar
datetime Last,New;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    New=Time[0]; 
      
     if(Last!=New)     
   {
  
  int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------             
   
    Last=New;
   }     
//----
   return(0);
  }
//+------------------------------------------------------------------+




       Код №4
       ------


int start()
  {
      if(last>=Time[0]) return;
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
        
//-------------------------------              
       
      last=Time[0];      
   } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

 
borilunad:

У меня функция служит для всех модификаций как установка СЛ и ТП, перевод в Б/У, трал позиций и ордеров с попытками и проверками на ошибки.

А в старте только нужно прописывать выбор позиции, условия и предупредительные меры. Вот функция:

Маленькая да удаленькая!

 


 Ничего себе :) Благодарю. Нужно "осмотреть" обязательно!
 
agat8430:


 у меня есть советник   обыкновенный мартин "Ilan"  . хочу чтоб он модифицировал не все открытые  ордера . а только начальный и последний ордер  по T/P Хочу сделать  помощника для себя .    сможешь помоги . вот его код  

 

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

У тебя   OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES); - это последний ордер.

А OrderSelect(0, SELECT_BY_POS, MODE_TRADES); - это будет первый ордер.

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

 
agat8430:


 у меня есть советник   обыкновенный мартин "Ilan"  . хочу чтоб он модифицировал не все открытые  ордера . а только начальный и последний ордер  по T/P Хочу сделать  помощника для себя .    сможешь помоги . вот его код  

 

Для отлова нужных позиций пользуйтесь "Полезными функциями" от Кима на почти все возможные случаи!

https://www.mql5.com/ru/forum/131859 

 
hoz:

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

У тебя   OrderSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES); - это последний ордер.

А OrderSelect(0, SELECT_BY_POS, MODE_TRADES); - это будет первый ордер.

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

Извините, это не будет работать! Не первый, ни последний!
 
MK07:

Всем привет.Я беру значения индикаторов в отдельном окне с уже сформерованного бара (т.е. с бара №1),которые считаю один раз на баре №0 на первом его тике.Всё работает быстро и правильно.НО стоит выключить компьютер и через какое-то время снова включить,то индикаторы продолжают исправно работать,а вот их значений на то время,когда был выключен компьютер нет.Просто пустое место.Т.е. есть значения индикаторов ДО выключения и ПОСЛЕ включения компьютера.Но стоит только переключиться туда-обратно с ТФ наТФ - все "пропавшие" значения появляются.Индикаторы стандартные - CCI,AO и т.п.Коды брал с форумов,их прилагаю.Объясните,пожалуйста,где я не прав и чего не понимаю.

       Код №1

        ------


int start()
  {  
              
//--------------------------------------------------------------------
   Fun_New_Bar();                               // Обращение к ф-ии
   if (New_Bar==false)                          // Если бар не новый..
      return;                                   // ..то уходим
//--------------------------------------------------------------------    
        
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------
   return(0);

  }
   
//+------------------------------------------------------------------+  
void Fun_New_Bar()                              // Ф-ия обнаружения ..
  {                                             // .. нового бара
   static datetime New_Time=0;                  // Время текущего бара
   New_Bar=false;                               // Нового бара нет
   if(New_Time!=Time[0])                        // Сравниваем время
     {
      New_Time=Time[0];                         // Теперь время такое
      New_Bar=true;                             // Поймался новый бар
     }
  }

//--------------------------------------------------------------------  

        Код №2
        ------


int start()
{  
     if (NewBar() == true)
  {  
         
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------           
  }    

   return(0); 
}
   
//+------------------------------------------------------------------+    
bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }

}

         Код №3
          ------


//--- buffers
double ExtMapBuffer1[];
//--- for one bar
datetime Last,New;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    New=Time[0]; 
      
     if(Last!=New)     
   {
  
  int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
//-------------------------------      

   { 

       Код №4
       ------


int start()
  {
      if(last>=Time[0]) return;
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
        
//-------------------------------              
       
      last=Time[0];      
   } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

         
Пользуйтесь сверху кнопкой SRC для вставки кода! Никто не будет копаться в таком виде. Я Вам вставил. Тоже самое можете сделать в своём посте.
Причина обращения: