[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 73

 

Здравствуйте. Как возвести в степень на MQL4?

 
Diver-si >>:
Здравствуйте. Форум большой, а в программировании я полный ноль. Возможно ли написать советник или тыкнуть носом где он есть. Вход в бай по пересечению стоха 30,  на данном ТФ, если на старшем ТФ стох растет и > 30, но  < 70. На селл - пересечение 70, если на старшем ТФ падает и > 30, но  < 70.  Выход по тейку или по стопу с возможностью менять значения. 

Готово. Вроде все что просили сделал. 

Файлы:
ctoh_1.rar  6 kb
 
Skydiver >>:

Готово. Вроде все что просили сделал. 

Спасибо огромное!!!!

 
Diver-si >>:

Спасибо огромное!!!!

А вы уже работали с этой стратегией? Успешно?

 
Skydiver >>:

А вы уже работали с этой стратегией? Успешно?

Это не стратеги, просто нужно проверить одно предположение. Кстати, почему то советник не совершает сделки? Не пойму почему.

 
В ветке "Корректное открытие нескольких позиций" приведён следующий код:


 if(iSAR(NULL,0,step0,0.1,0)<Close[0] )
         
         
        {
          RefreshRates();
      ticket = (OrderSend( Symbol(), OP_BUY,GetSizeLot(), Ask, slippage,
       Bid-StopLoss*Point,Ask+TakeProfit*Point,NameExpert,
               0, Green ) );
if(ticket<1) {Print("Ошибка открытия 1-го ордера BUY #",GetLastError());return (0); }  
if (ticket>0) //Sleep(10000);
          { //если 1-я позиция открылась, открываем вторую
          RefreshRates();       
         ticket_1 = (OrderSend( Symbol(), OP_BUY,GetSizeLot(), Ask, slippage,
       Bid-StopLoss*Point,Ask+TakeProfit*Point,NameExpert,
              0, Green ) ); 
if(ticket_1<1) {Print("Ошибка открытия 2 ордера BUY #",GetLastError());return (0); }    
if (ticket_1>0) // Sleep(10000);
         { // если вторая позиция открылась, открываем третью 
          RefreshRates();
      ticket_2 = (OrderSend( Symbol(), OP_BUY,GetSizeLot(), Ask, slippage,
       Bid-StopLoss*Point,Ask+TakeProfit*Point,NameExpert,
              0, Green ) );
           if(ticket_2<1)
          {Print("Ошибка открытия 3 ордера BUY #",GetLastError());return (0); }   
         } 
       }    
     }

            
      if(iSAR(NULL,0,step0,0.1,0)>Close[0])
    {
        
        //---- открываем СЕЛЛ позицию
      RefreshRates();
      ticket = (OrderSend( Symbol(), OP_SELL,GetSizeLot(), Bid, slippage,
        Ask+StopLoss*Point,Bid-TakeProfit*Point, NameExpert,
              0, Red ));
              
           if(ticket<1) {Print("Ошибка открытия 1-го ордера SELL #",GetLastError());return (0); }  
if (ticket>0) //Sleep(10000);
          { //если 1-я позиция открылась, открываем вторую
       RefreshRates();      
      ticket_1 = (OrderSend( Symbol(), OP_SELL,GetSizeLot(), Bid, slippage,
        Ask+StopLoss*Point,Bid-TakeProfit*Point, NameExpert,
             0, Red ));
             
          if(ticket_1<1) {Print("Ошибка открытия 2 ордера SELL #",GetLastError());return (0); }    
if (ticket_1>0) // Sleep(10000);
         { // если вторая позиция открылась, открываем третью        
      RefreshRates(); 
      ticket_2 = (OrderSend( Symbol(), OP_SELL,GetSizeLot(), Bid, slippage,
        Ask+StopLoss*Point,Bid-TakeProfit*Point, NameExpert,
              0, Red ));               
                if(ticket_2<1)
          {Print("Ошибка открытия 3 ордера SELL #",GetLastError());return (0); }   
         } 
       }    
     }
   
    return(0);
    
}



Подскажите, пожалуйста, как в эту конструкцию if(iSAR(NULL,0,step0,0.1,0)<Close[0]) вставить условие, при котором, например, если открыты позиции на покупку, то позиции на продажу не открываются пока не будут закрыты ВСЕ позиции на покупку. То есть, цикл торговли, купили 3 позиции, ждём пока все три не закроются. Позиции закрывадются только по стоплоссу или по тейкпрофиту. Закрылись все позиции, ждём сигнала, поступил сигнал, покупаем или продаём (в зависимости от сигнала) три позиции и т.д. "Полезные функции от KimIV" изучил. Можно использовать функции CountOrders(), ExistOrders(), ExistPositions(). Но как их практически вставить? Конструкция if((iSAR(NULL,0,step0,0.1,0)>Close[0])&& ExistPositions(NULL,OP_SELL)==false) не работает. Понимаю, что надо вставить логическую переменную, но как это сделать практически? Чего то я не догоняю.

 
anat >>:



Подскажите, пожалуйста, как в эту конструкцию if(iSAR(NULL,0,step0,0.1,0)<Close[0]) вставить условие, при котором, например, если открыты позиции на покупку, то позиции на продажу не открываются пока не будут закрыты ВСЕ позиции на покупку. То есть, цикл торговли, купили 3 позиции, ждём пока все три не закроются. Позиции закрывадются только по стоплоссу или по тейкпрофиту. Закрылись все позиции, ждём сигнала, поступил сигнал, покупаем или продаём (в зависимости от сигнала) три позиции и т.д. "Полезные функции от KimIV" изучил. Можно использовать функции CountOrders(), ExistOrders(), ExistPositions(). Но как их практически вставить? Конструкция if((iSAR(NULL,0,step0,0.1,0)>Close[0])&& ExistPositions(NULL,OP_SELL)==false) не работает. Понимаю, что надо вставить логическую переменную, но как это сделать практически? Чего то я не догоняю.


Их можно открывать, но тут же автоматом перекрывать по встречной. Причем выполнять это отдельным советником гораздо проще, нежели лепить дополнительный код в уже готовый советник. см. Corrector.mq4



 
(NULL,PERIOD_M1, 14, 0, 1, PRICE_CLOSE, 1, 1 ) < Ask) { // если цена выше линии то селл <--------- правильно ли это?



(NULL,PERIOD_M1, 14, 0, 1, PRICE_CLOSE, 2, 1 ) > Bid) { // если цена ниже линии то бай <----- правильно ли с логикой или я что то путаю?



Помогите плз...

 
1Rakso писал(а) >>
(NULL,PERIOD_M1, 14, 0, 1, PRICE_CLOSE, 1, 1 )

А что это за конструкция вообще?

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