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

 
Tretyakov Rostyslav #:

понятно. спасибо.

 
Порт-моне тв #:

спасибо! эта проблема ушла. остался маленький штрих. через раз закрываются все ордера(надо чтобы все и всегда!), но иногда  если наоткрываю 3-4 ордера, то может закрыться только 2 или 1. Вот так происходит войд по закрытию. вроде специальная i-тая проверка стоит, может подскажешь. 

Не стоит пренебрегать скобками, попробуй так

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {
   int pos=OrdersTotal()-1;
   for(int i=pos; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_BUY)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Bid, 0, NULL))
              {
               Print("Order Close");
              }
           }
        }
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseSellPositions2()
  {
   int pos=OrdersTotal()-1;
   for(int i=pos; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Ask, 0, NULL))
              {
               Print("Order Close");
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
Как получить экстремумы ZZ в формате D' 2021.01.05
за несколько лет?
 
Vladimir Baskakov #:
Как получить экстремумы ZZ в формате D' 2021.01.05
за несколько лет?
if(ZZ[i]!=EMPTY_VALUE) string iDate=TimeToString(time[i],TIME_DATE|TIME_MINUTES);
 
Tretyakov Rostyslav #:
Скрипта нет?
 
Vladimir Baskakov #:
Скрипта нет?
Нет
 
Всем здравствуйте. Может кто-нибудь помочь подредактировать советника. Нужно убрать функцию открытия ордеров, чтобы советник сам не открывал ордера, а работал только с открытыми вручную ордерами. Заранее спасибо.  
Файлы:
 
Vladimir Baskakov #:
Скрипта нет?

Берем зиг-заг и в OnCalculace проверяем его буфер на значения обычно больше 0 (значит, что в буфере записано значение экстремума, low или high). Перебираем буфер с помощью цикла

int OnCalculate( const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[]         // Spread 
) {
 // код зиг-зага
 ...
 if (prev_calculated > 0) // дальнейший код сработает только один раз
   return (rates_total);
 // обработка значений зиг-зага
 for (int i = rates_total - 1; i >= 0; i--) {
   if (zigZag[i] > 0) { // найден экстремум
     // сохраняем time[i] в любую удобную форму для дальнейшей работы
   }
 }
 return (rates_total);
}

цикл приведённый выше (справа налево) предназначен для MQL5

для MQL4 цикл будет слева направо

for (int i = 0; i < rates_total; i++)

Приведённые примеры дают сначала новые по времени значения. Чтобы получить сначала старшие по времени значения используем ArraySetAsSeries или меняем направление перебора цикла на противоположное.

Из скрипта данные можно получить с помощью iCustom, CopyTime либо iTime, а также iBars (вместо rates_total).

 
Tretyakov Rostyslav #:

я наверное что то не правильно понимаю

если включаю функцию в 

void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.
   
// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     } 
       DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2)));
       DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2)));
       TrailingOrders();
  }

то происходит мгновенное перемещение стопа и тейка бесконечное число раз

если никуда TrailingOrders(); не подставлять то вообще ничего не смещается.

я себе ставил задачу не трейлиг сделать а одно/двукратное перемещение стопа и тейка.

целый день сегодня "изобретаю" ничего пока не выходит толкового.

 
законопослушный гражданин #:

я наверное что то не правильно понимаю

если включаю функцию в 

то происходит мгновенное перемещение стопа и тейка бесконечное число раз

если никуда TrailingOrders(); не подставлять то вообще ничего не смещается.

я себе ставил задачу не трейлиг сделать а одно/двукратное перемещение стопа и тейка.

целый день сегодня "изобретаю" ничего пока не выходит толкового.

Трал должен срабатывать если цена пошла в направлении ТП и ничего не делать если цена откатилась назад. Уровень СЛ при этом должен идти только в направлении ТП и не откатываться назад.