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

 
hoz:


 Вчера я спешил, нужно было уйти. Написал вопрос в том момент не тот, который хотел.

 На самом деле, я имел ввиду именно эксперты, которые при заданном условии кидают пачку ордеров (сетку). Вот в таких экспертах я не встречал, чтоб проверялись ни спред, ни стоплевел, ни положение цены выше (ниже Аска или Бида) ни что-н. ещё. Щяс напишу как это вижу сам, выложу на всеобщий суд..


Зачем вообще брать в пример какие-то горе-эксперты? Как минимум они предназначены исключительно для тестера, как максимум - написаны кривыми руками, как было сказано выше...
 
alsu:

Зачем вообще брать в пример какие-то горе-эксперты? Как минимум они предназначены исключительно для тестера, как максимум - написаны кривыми руками, как было сказано выше...

Ну я понимал как это реализовать, но решил посмотреть как это делают другие.
 

Ребят, у меня очень ужасная проблема! У меня график не смещается влево, когда я сохраняю рисунок! Функция "смещение графика" активирована! Как исправить? 


 

Здравствуйте!

Хочу чтобы эксперт открывал не больше одной сделки в день. Подскажите как это сделать.  

 

Здравствуйте, я не давно начал изучать mql4 может кто то из опытных программистов поможет. Есть скрипт он локирует ордера как только они уходят в минус, как сделать чтобы он локировал с определённого уровня(например когда ордер достигнет -30 или -40) который можно будет прописывать в свойствах.

 void start()
{
    double StopLoss;
    double Lots=0;
    for(int i=0;i<OrdersTotal();i++)
    {
        if(!OrderSelect(i,SELECT_BY_POS))
            continue;
        if(OrderSymbol()!=Symbol())
            continue;
        if(OrderType()==OP_BUY)
            Lots+=OrderLots();
        if(OrderType()==OP_SELL)
            Lots-=OrderLots();
    }
    if(Lots>0)
        OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red);
    if(Lots<0)
        OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue);

 
protey7:

Здравствуйте!

Хочу чтобы эксперт открывал не больше одной сделки в день. Подскажите как это сделать.  

extern int MagicNumber=555;
//---
if (OrdersTotal()>0) // Есть ли отложенные ордера или открытые позиции
{  for (i=OrdersTotal()-1; i>=0; i--) // Перебираем ордера
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Oрдер выбирается среди открытых и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue; // Если торговый символ не тот, на котором работает эксперт - игнорируется
         if (OrderMagicNumber()!=MagicNumber) continue; // Если магик номер не тот, что надо - игнорируется
         if (OrderOpenTime()>=iTime(NULL,PERIOD_D1,0)) // Если время открытия ордера больше или равен началу открытия данной свечи,
                                                       // то дальший код эксперта не работает. Вместо PERIOD_D1 можно вставить любой другой период.
            return(0);
}  }  }
 
Wild_Wolf:

Ребят, у меня очень ужасная проблема! У меня график не смещается влево, когда я сохраняю рисунок! Функция "смещение графика" активирована! Как исправить? 

Обратите внимание: на графике вверху справа есть такой ма-а-а-ленький треугольничек. При наведении на него курсора подсказочка всплывает "Смещение графика". Зацепите его и влево сдвиньте на столько, на сколько нужно освободить место справа.
 
hoz:

Ну я понимал как это реализовать, но решил посмотреть как это делают другие.
А если другие начнут из окон выпрыгивать?
 
paladin80:


  Спасибо за подсказку!

Только в предложенном варианте эксперт не работает)))) Предлагаю рабочий вариант, который я получил :

 if (OrdersTotal()==0) // Если нет открытых позиций

{  for (int i=OrdersHistoryTotal()-1; i>=0; i--) // Перебираем ордера из списка истории счёта

   {  if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) // Oрдер выбирается среди закрытых ордеров

      {  

         if (OrderCloseTime()>=iTime(NULL,PERIOD_D1,0)) // Если время закрытия ордера больше или равен началу открытия данной свечи,

                                                       // то эксперт не работает. Вместо PERIOD_D1 можно вставить любой другой период.

            return(-1);

}  }  }

 
alsu:

Зачем вообще брать в пример какие-то горе-эксперты? Как минимум они предназначены исключительно для тестера, как максимум - написаны кривыми руками, как было сказано выше...


Написал по-своему. Особо не оптил код, писал просто что б работало, чтоб показать логику.

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_BUYSTOP,0.1,NormalizeDouble(Ask + (step*i) * pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_SELLSTOP,0.1,NormalizeDouble(Bid - (step*i)*pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Посылаем пачку ордеров на сервер                                                    |
//+-------------------------------------------------------------------------------------+
bool SendPackOfOrders(int lastPosTicket, int lastPosType, double initialOOP)
{
   if (lastPosTicket == -1)                        // Если нет рыночных ордеров, значит..
       return(false);                              //..сетку отложек не кидаем
       
  // if (lastPosType != g_lastPosType)               // Если тикет изменился, значит..
   {
      lastPosType = g_lastPosType;
      
      for (int i=1; i<=5; i++)
      {
         if (!OpenBuy(initialOOP, i))
             return(false);
         if (!OpenSell(initialOOP, i))
             return(false);
      }
   }
}

 тут step - шаг расстановки сетки ордеров.

 

Мой вопрос такой. Логика правильная моя? Может как-то можно адекватнее прооптить код чтоб он быстрее работал? С точки зрения производительности..

 Так же вот мысль есть, может нада паузы делать после каждого посыла? Ну в общем вот эти моменты мне очень интересны.

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