Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 707

 
Roman Shiredchenko:

это не шутка  и издеваюсь не так.

Внимательно на картинку посмотри, прежде чем ересь постить.

Тема настолько избита, что уже противно такое читать... то у них визуализация пропадает, то оптимизация...

Окно раздвинь пошире и будет тебе счастье. Не перепутай какое окно раздвигать.

 
ilvic:

Проблема в разрешении экрана.

спасибо большое, стал догадываться, смотря на картинки...

 
ilvic:

Проблема в разрешении экрана.

еще раз спасибо. Все работает, проблема была в отображении размера текста (шрифта)


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

if(prev_calculated<1) limit=rates_total-1;
if(prev_calculated>0)limit=rates_total-prev_calculated;
for(i=limit; i>=0; i--)
{
yesterday_weekday = TimeDayOfWeek(iTime(Symbol(),0,i+1))-TimeDayOfWeek(iTime(Symbol(),0,i));
if (yesterday_weekday !=0) // находим открытие нового дня
{

BH=open[i];BL=open[i]; // переменные ХАЙ ЛОУ  
Closebar=open[i]; // искомая переменная 
NHT=time[i]; // переменная время последнего обновления ХАЙ
PHT=time[i]; // переменная время предпоследнего обновления хай
}
CloseD[i]=Closebar; // буфер отрисовки искомая переменная СИНИЙ ЦВЕТ
HD[i]=BH;  // буфер отрисовки ХАЙ
LD[i]=BL; // буфер отрисовки ЛОУ

if (Fun_New_Bar==false)  // находим закрытие бара                             
    {                                             
     if (Prev_Time==0) 
     {
        Prev_Time=time[i];
        Fun_New_Bar=false;
     }
   if(Prev_Time!=time[i])                        
     {
      Prev_Time=time[i];

if(iHigh(NULL,0,i+1)>BH) // проверяем есть ли обновление Хай
{
C=PHT; // присвоим переменной время предыдущего бара обновления Хай 
NHT=iTime(NULL,0,i+1); // находим время обновления Хай
Pshift=iBarShift(NULL,0,C); // находим индекс бара предыдущего обновления Хай 
P=iLow(NULL,0,iLowest(NULL,0,MODE_LOW,Pshift,i+1)); // находим наименьшее значение Лоу от обновления Хай настоящего до предыдущего (искомая величина) 
BH=iHigh(NULL,0,i+1); // прорисовываем Хай новый
Closebar=P; // прорисовываем искомую величину 
PHT=NHT; // сохраняем время последнего обновления Хай
} 
     
                             
      Fun_New_Bar=false; // ждем закрытие нового бара                           
     }
     }

Comment( NHT, C , Pshift ); // проверка

if(low[i]<BL)  BL=low[i]; // в процессе

}
   return(rates_total);
  }


 
Добрый день! помогите по советнику! Нужно сделать обычный трейлинг стоп, который работает через шаг и переводит SL в безубыток!!! Тоесть: открылся ордер, и через 25(образно говоря) пунктов в нужную сторону, SL сразу ставится на цену открытия!!!

у меня есть вот такой код, но он бежит за ценой и останавливается на цене открытия!!


bool tkt;
  for (int i = 0; i < OrdersTotal(); i++) 
  {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if (OrderType() == OP_BUY)
      {
      if(NormalizeDouble(OrderStopLoss(), Digits) < NormalizeDouble(OrderOpenPrice(), Digits) && 
      NormalizeDouble(Ask - OrderStopLoss(), Digits) > NormalizeDouble(TrailingStop * Point, Digits))
      tkt = OrderModify(OrderTicket(), 0, Ask - TrailingStop * Point, OrderTakeProfit(), OrderExpiration(), clrNONE);
      Print("Error setting Buy trailing stop: ", GetLastError());
      }
         
      if (OrderType() == OP_SELL)
      {
      if(NormalizeDouble(OrderStopLoss(),Digits) > NormalizeDouble(OrderOpenPrice(), Digits) && 
      NormalizeDouble(OrderStopLoss() - Bid, Digits) > NormalizeDouble(TrailingStop * Point, Digits))
      tkt = OrderModify(OrderTicket(), 0, Bid + TrailingStop * Point, OrderTakeProfit(), OrderExpiration(), clrNONE);
      Print("Error setting Sell trailing stop: ", GetLastError());
      }  
           }
   } 
уже неделю бьюсь головой об стену! помогите пожалуйста!!!
 
ponochka:
Добрый день! помогите по советнику! Нужно сделать обычный трейлинг стоп, который работает через шаг и переводит SL в безубыток!!! Тоесть: открылся ордер, и через 25(образно говоря) пунктов в нужную сторону, SL сразу ставится на цену открытия!!!

у меня есть вот такой код, но он бежит за ценой и останавливается на цене открытия!!


уже неделю бьюсь головой об стену! помогите пожалуйста!!!

Пожалуйста, писал для себя и ими же пользуюсь.

//======= Глобальные переменные

extern bool   UseBreakeven       = true;          //Использование безубытка
extern int    Breakeven          = 20;            //Профит безубытка
extern int    ValueBreak         = 3;             //Безубыток
extern bool   UseTrailingStop    = true;          //использование трейлинг стопа
extern int    TrailingStop       = 40;            //Величина трала
extern int    TrailingStep       = 3;             //Шиг трала 

double SL, TP;

//нннннннннннн Функция перевода в безубыток нннннннннннннннннннннннннннннннннннннннннннн
void BreakevenModify()
{ 
   int    i;
   double sl;
   
   int total = OrdersTotal();
   
   if(UseBreakeven)
   {
      for(i = total-1; i >= 0; i--)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         { 
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) 
            {
               if(OrderType() == OP_BUY)
               {
                  if(OrderStopLoss() < OrderOpenPrice() && (OrderOpenPrice() + Breakeven*point) <= Bid)
                  {   
                     sl = NormalizeDouble(OrderOpenPrice() + ValueBreak*point, Digits);
                     
                     OrderModifyX(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, 0);
                  } 
               }
            }
         }
      
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         { 
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) 
            { 
               if(OrderType() == OP_SELL)
               {
                  if(OrderStopLoss() > OrderOpenPrice() && (OrderOpenPrice() - Breakeven*point) >= Ask)
                  { 
                     sl = NormalizeDouble(OrderOpenPrice() - ValueBreak*point, Digits);
                     
                     OrderModifyX(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, 0);
                  } 
               }
            }
         }
      }
   }
}
//нннннннннннн Функция трейлинг стопа ннннннннннннннннннннннннннннннннннннннннннннннннннннн
void TrailingStopLoss()
{   
   int    i;
   double sl;
   
   int total = OrdersTotal();
   
   if(UseTrailingStop)
   {
      for(i = total-1; i >= 0; i--)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {
               if(OrderType() == OP_BUY) 
               {
                  if((OrderOpenPrice() + TakeProfit3*point) <= Bid)
                  {
                     if(OrderStopLoss() > OrderOpenPrice() && OrderStopLoss() + (TrailingStop + TrailingStep)*point <= Bid)
                     {
                        sl = NormalizeDouble(OrderStopLoss() + TrailingStep*point, Digits);
                        
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, 0);
                     } 
                  }  
               }
            }
         }
      
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            {     
               if(OrderType() == OP_SELL)
               {
                  if((OrderOpenPrice() - TakeProfit3*point) >= Ask)
                  {
                     if(OrderStopLoss() < OrderOpenPrice() && OrderStopLoss() - (TrailingStop + TrailingStep)*point >= Ask)
                     {
                        sl = NormalizeDouble(OrderStopLoss() - TrailingStep*point, Digits);
                        
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, 0);
                     } 
                  }  
               } 
            }
         }
      }
   }
}


сал для себя и ими пользуюсь.

 
Youri Lazurenko:

Пожалуйста, писал для себя и ими же пользуюсь.

это для тестера only :-)

в реальной жизни сильно чревато тралить опираясь на Bid, Ask

 
Rustam Bikbulatov:
Привет ребята. Подскажите пожалуйста почему у меня пару десятков ордеров закрываются в шахматном порядке или вообще вразнобой? И как это исправить? Есть метод закрытия разом?

закрывать нужно с конца, а не с начала

for(int i=OrdersTotal()-1; i>=0; i--)
или делать свой список и по нему закрываться
 
Taras Slobodyanik:

закрывать нужно с конца, а не с начала

или делать свой список и по нему закрываться

а как делать список?

 
Привет ребята. Подскажите пожалуйста почему у меня пару десятков ордеров закрываются в шахматном порядке или вообще вразнобой? И как это исправить? Есть метод закрытия разом?
void CloseOrdB(){  
     for(int i=0;i<OrdersTotal();i++){
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
     if(OrderSymbol()==Symbol() && OrderMagicNumber()==456){    
if(OrderClose(OrderTicket(),OrderLots(),Bid,3,clrBlue)){CloseOrdB();}}}} }
Причина обращения: