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

 

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

https://forum.mql4.com/ru/42125

 
здраствуйте, я новичок пытаюсь понять как писать советники
подскажи как написать "если предыдущий закрытый ордер был buy и закрылся стоплоссом то продать 0.1 лот стоплосом 50 тейкпрофтом 50 " пожалуйста)
 

Специалисты! Помогите! Как это реализовать?


int start() 
{
 bool OPEN=false;

 условие1=х;//вычисление условия1
 условие2=y;//вычисление условия2
 
 if(условие1==х)OPEN=true;
 
 if(условие2==y&&OPEN==true)
 OrderSend;

Необходимо зафиксировать OPEN=true до тех пор пока не исполнится
условие2. Условие1 за это время может измениться .

Заранее спасибо!

 

вынесите за start

 bool OPEN=false;
 
sergeev:

вынесите за start


Огромное спасибо! Как говориться всё гениальное просто! А я весь день голову ломаю.
 

Приветствую! Подскажите, плиз, что делаю не так при подсчете числа первых баров ( Quant_Bars ) соответствующих условию только над или под буфером. Т.е. как только индикатор вырисовался НАД закрытым баром (1) надо подсчитать предыдущие бары с индикатором ПОД барами (исключая идущие дальше не соответствующие условию) и наоборот при обратном направлении движения. Мой вариант выдает неверные значения.

Может кто знает, как сделать?

#property indicator_chart_window     
#property indicator_buffers 1
#property indicator_color1 Green
double step = 0.1;
double max = 0.2;

int n = 1;
double S;
double barA;
double barB;
double Bufer[];
int k,k1;
//---------------------------------
int init()
{
   SetIndexStyle(0, DRAW_ARROW,EMPTY,0,Green); 
   SetIndexArrow(0, 159); 
   SetIndexBuffer(0, Bufer);
   return (0);
}
//---------------------------------
int deinit() 
{
   return (0);
}
//----------------------------------
int start()
{

 k1=k;
 for(int i=Bars-2; i>=0; i--)  
    {
     if(i == Bars-2)
       {
         Bufer[i] = Low[i] - 10.0 * Point;
         n = 1;
         S = step;
         barA = High[i];
         barB = Low[i];
       }
    else
       {
         if(Close[i] > barA)
           {
             barA = Close[i];
               if (n==1 && S <= max - step)
                  { S = S + step; }
             k=1;
           }          
         if(Close[i] < barB)
           {
            barB = Close[i];
              if (n == -1 && S <= max - step)
                 { S = S + step;}
            k=2;
           }
        if (n == 1)
           { Bufer[i] = Bufer[i + 1] + S * (barA - (Bufer[i + 1]));}
       else
           { Bufer[i] = Bufer[i + 1] + S * (barB - (Bufer[i + 1]));}
      
       if ((Bufer[i+1] < Close[i + 1] && Bufer[i] > Close[i]) || (Bufer[i + 1] > Close[i + 1] && Bufer[i] < Close[i]))
          {
           S = step;
             if (n == 1)
                {Bufer[i] = barA;}
             else
                {Bufer[i] = barB;}
           barB = Close[i];
           barA = Close[i];
           n = -1 * n;
          }
       }
   }
    
//--------------------------Подсчитать бары:
   int num1 = 2;  // бар  
   int counted_bars = IndicatorCounted(); 
 //-----СЕЛЛ
if(Bufer[2]<Close[2] && Bufer[1]>Close[1])    
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])
                                 
             {int Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }
    
 //-----БАЙ  
if(Bufer[2]>Close[2] && Bufer[1]<Close[1])     
   {
     for( i=num1; i<=Bars; i++ )
        { 
          if(Bufer[i]<Close[i])                     
            {Quant_Bars = Quant_Bars+i;}
          if(Bufer[i]>Close[i] && Bufer[i-1]<Close[i-1]) 
          break;
         }
     Alert("Число баров= ",Quant_Bars, "  counted_bars= ",counted_bars," бары= ", Bars );    
    }  

   return (0);
}
 

вопрос,

почему, когда мой советник аккуратно сливает весь депозит и практически все сделки убыточны, то при изменении "полярности" сигналов, не происходит такого же стремительного, но уже увеличения депозита? ))) точки одни и те же вроде как, ошибка, по идее, только в направлении открытия ордера? или есть еще что-то?

 
Maxaxa:

вопрос,

почему, когда мой советник аккуратно сливает весь депозит и практически все сделки убыточны, то при изменении "полярности" сигналов, не происходит такого же стремительного, но уже увеличения депозита? ))) точки одни и те же вроде как, ошибка, по идее, только в направлении открытия ордера? или есть еще что-то?

Это философия трейдинга.
 
Maxaxa:


есть еще что-то
 
Solree:

Доброго времени суток.

Есть 4 ордера, 2 сел и 2 бай. Сел создаются, образно говоря, когда цена поднимается, ну а бай, когда опускается. Сел удаляются, когда создаются бай, и наоборот. При создании тикет 1-го сел или бай запоминается в переменной pos. У всех 4 комментарии одинаковые - "Aelit". Так вот, есть код:

Выбирается ордер нормально по тикету, но очень часто сравнения комментария не проходит. Для интереса сделал else Alert(OrderComment()); и в журнале было "Alert: Aelit[sl]". Что за [sl]? Это из-за того, что все ордера имеют один и тот же комментарий? Тогда почему такой же [sl] был, когда я для теста делал комментарий, не совпадающий с другими? Если убрать проверку по комментарию, то в журнале будет ошибка тикета для OrderModify. Сначала думал, что до этого условия доходит раньше, чем создается какой-то ордер, но нет, в это время ордер уже есть, причем тикет одинаковый в случае срабатывания и не срабатывания условия. Как это понять?

Никаких чудес - это ДЦ дописывает к вашему комментарию свой - ордер закрылся при достижении StopLoss.

Вы неправильно организовали выбор ордера по тикету. При таком выборе, во-первых MODE_TRADES лишний - он опускается функцией OrderSelect(),

во-вторых, после успешного выбора ордера вы не проверяете из какого массива ордеров выбран ордер по тикету - из рыночных или из закрытых.

Для этого после выбора ордера проверяйте его время закрытия и, если оно равно нулю, то только тогда ордер является рыночным, иначе - он выбран из уже закрытых (от-туда и дописка к вашему комментарию)

Причина обращения: