Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 199

 

Добрый вечер.

Подскажите, пожалуйста, как добавить закрытие всех позиций и удаление всех ордеров по окончании торговой недели?

Спасибо!

 
Antonius:

Добрый вечер.

Подскажите, пожалуйста, как добавить закрытие всех позиций и удаление всех ордеров по окончании торговой недели?

Спасибо!

Написать такой скрипт, потом кидать его на график когда требуется всё закрыть и удалить. Делов-то...

Пожалуйста!

 
artmedia70:

Написать такой скрипт, потом кидать его на график когда требуется всё закрыть и удалить. Делов-то...

Пожалуйста!



Спасибо:) Уточняю запрос.

Нужно добавить в советник код, который закроет все ордера и позиции по окончании торговой недели.

Не могли бы Вы написать данный код?

 
Antonius:


Спасибо:) Уточняю запрос.

Нужно добавить в советник код, который закроет все ордера и позиции по окончании торговой недели.

Не могли бы Вы написать данный код?

Я могу. Не вопрос. А вы хоть что-то сделали сами? Это ветка не для получения готового нахаляву, а для помощи тем, кто сам пытается кодить.
 
artmedia70:
Я могу. Не вопрос. А вы хоть что-то сделали сами? Это ветка не для получения готового нахаляву, а для помощи тем, кто сам пытается кодить.


Посмотрел тут https://book.mql4.com/ru/trading/orderclose

Поискал в гугле, на форуме. Не обнаружил. Возможно, неправильно пишу запрос.

Решил спросить в теме для новичков.

 

Как прописать?

как запускаешь скрипт:

высвечивается окно с вкладками "общие" и "входные параметры".

мне надо вводить дату во входных параметрах.

А можно ли, чтоб при запуске скрипта просто выводилось окошко для даты, я вбивал дату, нажимал на окей и все работало?

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

 
artmedia70:

Функция определения последней закрытой позиции по стопу имеет тип bool, а вы пытаетесь возвращать из неё тип double. Соответственно, она вам возвращает либо 0, либо 1.

Я ж вам писал, что в неё нужно добавить передачу одной переменной по ссылке:

Теперь проверяем, например, последнюю Buy:

Примерно так...


Большое спасибо.
 
artmedia70:

Функция определения последней закрытой позиции по стопу имеет тип bool, а вы пытаетесь возвращать из неё тип double. Соответственно, она вам возвращает либо 0, либо 1.

Я ж вам писал, что в неё нужно добавить передачу одной переменной по ссылке:

Теперь проверяем, например, последнюю Buy:

Примерно так...


Сделал все как Вы сказали. Все компилируется......но функция при тестировании советника не работает.....все позиции советник открывает 0.1 лота.

double  Magic, Lot;

int start()
  {
        

  
 double Price=iOpen (Symbol (),0,0);
 

          
 int last_order_bar = 0;                                                                                                                        
 int ot = OrdersTotal();                                                                                                                        
                                                                                                                        
 if (ot>0) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if (OrderSelect (ot-1,SELECT_BY_POS))                                                                                                                        
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL )                                                                                                                       
         last_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());                                                                                                             
 }                                                                                                                      
                                                                                                                        
 int last_hist_order_bar = 0;                                                                                                                   
 int oht = OrdersHistoryTotal();                                                                                                                        
                                                                                                                
 if (oht>0)                                                                                                                     
 {                                                                                                                      
   if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY))                                                                                                                         
      if (OrderType ()==OP_BUY || OrderType ()==OP_SELL)                                                                                                                        
         last_hist_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());
                                                                                                        
        }

                                                                                                        
if (ot==0)

 if (Bid ==Price)
//=============================================================== 
  
if(((Open[1]-Close[1])>100*Point)&&((Open[1]-Close[1])<120*Point))
if(((High[1]-Open[1])>40*Point)&&((High[1]-Open[1])<60*Point))
if(((Close[1]-Low[1])>40*Point)&&((Close[1]-Low[1])<60*Point))

//============================================================
                                                                           // задавать минимальное значение лота я не стал,мне кажется для тестера это не обязательно
if (isCloseLastPosByStop(Symbol(), OP_BUY, Magic, Lot))                        
{
Lot=Lot*2;
OrderSend(Symbol(),OP_SELL,Lot,Bid,1,Ask+1500*Point,Ask-300*Point,"jfh",123 );
}
else
{

Lot=0.1;        
OrderSend(Symbol(),OP_SELL,1,Bid,Lot,Ask+1500*Point,Ask-300*Point,"jfh",123 );
}
   return(0);
  }
//============================================================  
bool isCloseLastPosByStop(string sy, int op, int mn, double ll)       //у Вас перед названием формального  параметра  11 стоял знак &- я его убрал.
{
   double   pt;
   datetime t;                                                       //у вас тип переменной t был int - я сделал datetime
   int       dg, i, j=-1, k=OrdersHistoryTotal()-1;

   for (i=k; i>=0; i--) 
   {
     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) 
     {
         if (OrderMagicNumber()!=mn)   continue;   // если магик не тот, переходим к следующему
         if (OrderSymbol()!=sy)        continue;   // если символ не тот, переходим к следующему
         if (OrderType()!=op)           continue;   // если тип не тот, переходим к следующему
         if (t<OrderCloseTime()) 
         {
            t=OrderCloseTime();
            j=i;
            }
         }
      }
      
   if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) 
   {
      dg=MarketInfo(OrderSymbol(), MODE_DIGITS);      // количество знаков в цене символа ордера
      pt=MarketInfo(OrderSymbol(), MODE_POINT);       // размер пункта инструмента в валюте котировки ордера
      if (MathAbs(OrderClosePrice()-OrderStopLoss())< 0.5*pt) // Если закрыт по стопу
      { 
         ll=OrderLots();                              // записываем количество лотов в ордере, закрытом по стопу
         return(true);                                // возвращаем истину
         }
      }
      
   return(False);                                     // возвращаем ложь (позиции нету, либо не по стопу)
}

Подскажите пожалуйста в чем моя ошибка.

Не понимаю такой момент - как вы правильно заметили функция возвращает значение типа bool,а в вызове функции,в который функция должна положить значение типа bool

Вы предлагаете указать другие типы значений .

Спасибо.

 
solnce600:

Сделал все как Вы сказали. Все компилируется......но функция при тестировании советника не работает.....все позиции советник открывает 0.1 лота.

Подскажите пожалуйста в чем моя ошибка.

Не понимаю такой момент - как вы правильно заметили функция возвращает значение типа bool,а в вызове функции,в который функция должна положить значение типа bool

Вы предлагаете указать другие типы значений .

Спасибо.


bool isCloseLastPosByStop(string sy, int op, int mn, double ll)       //у Вас перед названием формального  параметра  11 стоял знак &- я его убрал.

Зачем убрали. Если бы оставили, то все бы работало

 
Vinin:

Зачем убрали. Если бы оставили, то все бы работало

Интересно ..... а что означает этот знак.... в учебнике по поводу него я ничего не могу припомнить.