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

 
Forexman77:
Как примерно это осуществить? Если в другие функции вроде вник, но с ордерами и массивами пока у меня не совсем есть понимание.

Как-то так, наверное

 // Учёт ордеров
   Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   int Ticket[5];
   ArrayInitialize(Ticket,0);
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>5)                           // Было не более одного орд, стало не более пяти
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket[Total-1]=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
   // Открытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if (Total < 5 && Opn_B==true)     // Открытых орд. нет +. Было Total < 1, стало Total < 5
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         SL=Bid - New_Stop(StopLoss)*Point;     // Вычисление SL откр.
         TP=Bid + New_Stop(TakeProfit)*Point;   // Вычисление TP откр.
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Открытие Buy
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Buy ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
   // Закрытие ордеров
      if (Tip==0 && Cls_B==true)                // Открыт ордер Buy и есть критерий закр
        {
          for(i=0;i<5;i++)                             
          {
            if (Ticket[i]==0) continue;           

            Alert("Попытка закрыть Buy ",Ticket[i],". Ожидание ответа..");
            RefreshRates();                        // Обновление данных
         
            Ans=OrderClose(Ticket[i],Lot,Bid,2);      // Закрытие Buy

            if (Ans==true)                         // Получилось :)
            {
               Alert ("Закрыт ордер Buy ",Ticket[i]);
            }

            if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            {
               i--;
               continue;                           // Повторная попытка
            }

         }
 
Vitek2010:
Нет не устроит. я обьясню - ваш форум это как надежда на последний грамотный оплот прогеров . и вставление размера - именно так и видит это написание PERIOD_W1 но ни использование размера ни использование фиксированных точек отсчета в виде дат не ладут никакого нужного эффекта . поэтому я и написал конкретный вопрос по вставлению конкретного понятия - пятницы - кстати ваш код не компилируеться пишет 'version' - unknown property ("версия " - неизвестное свойство ) так что если не знаете как вставить DayOfWeek и цифры 5(номер пятницы) в тот код который я дал другие варианты не помогут.


Значит говорите не то

Файлы:
vitek2010.mq4  2 kb
 

Всем добрый день. Выкладываю индикатор, который, к сожалению, зависает и не рисует стрелки вовремя, а только когда обновишь график... переключая на разные ТФ-мы.

Если кто-то может сделать так, что бы индикатор обновлял себя в конце каждой свечи..., ну скажем за 5-10 секунд до закрытия свечи? Или возможно есть другой способ решить эту проблему?

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

Файлы:
 
Vinin:


Значит говорите не то


Индикатор вставил . что он показывает - не понятно . в моем варианте было условие продолжение или изменение предыдущего движения . то есть и ниже и выше нулевой линии . а у вас все выше и на всех неделях это не то все . не надо отходить от базового (моего )варианта и что то упрощать .сделать надо на основе моего индикатора . С уважением.
 
alsu:

Как-то так, наверное


Ставлю строки
int Ticket[5];
ArrayInitialize(Ticket,0);

вместо int Ticket; выходят ошибки:

'=' - left square parenthesis expected for array('=' - Левая квадратная скобка, ожидаемое для массива)

'>' - left square parenthesis expected for array ('=' - Левая квадратная скобка, ожидаемое для массива)

'>' - unexpected token('>' - Непредвиденный маркер)

')' - assignment expected(')' - Назначение ожидается )

'continue' - 'break' or 'continue' used within some cycle only('продолжать' - 'перерыв' или 'продолжать' используется в некоторых цикла только )

и много еще чего.

 

почему советник открывает бесконечное количество ордеров, помогите исправить

спасибо

extern double tp = 100;
extern double l = 0.1;




int start()
{
// 1.3600
if(OrderMagicNumber() ==1 >0){return;}
else
{
OrderSend ("EURUSD",OP_BUYLIMIT,l,1.36000,5,0,1.36000+tp*Point,"my order",1);
OrderSend ("EURUSD",OP_BUYSTOP,l,1.36000,5,0,1.36000+tp*Point,"my order",1);
}
if(OrderMagicNumber() ==2 >0){return;}
else
{
OrderSend ("EURUSD",OP_SELLLIMIT,l,1.36000,5,0,1.36000-tp*Point,"my order",2);
OrderSend ("EURUSD",OP_SELLSTOP,l,1.36000,5,0,1.36000-tp*Point,"my order",2);
}
return;
}

 
addict:

почему советник открывает бесконечное количество ордеров, помогите исправить

спасибо

extern double tp = 100;
extern double l = 0.1;




int start()

добавь if(OrdersTotal()==0)




// 1.3600
if(OrderMagicNumber() ==1 >0){return;}
else
{
OrderSend ("EURUSD",OP_BUYLIMIT,l,1.36000,5,0,1.36000+tp*Point,"my order",1);
OrderSend ("EURUSD",OP_BUYSTOP,l,1.36000,5,0,1.36000+tp*Point,"my order",1);
}
if(OrderMagicNumber() ==2 >0){return;}
else
{
OrderSend ("EURUSD",OP_SELLLIMIT,l,1.36000,5,0,1.36000-tp*Point,"my order",2);
OrderSend ("EURUSD",OP_SELLSTOP,l,1.36000,5,0,1.36000-tp*Point,"my order",2);
}
return;
}

 
denis77515:

добавь if(OrdersTotal()==0)

ордер на бай открывается один, а на сел опять таки бесконечное количество
 

Добрый день.

не пойму как такое получается

03:00:24 '9473965': order sell 0.01 GBPUSD opening at 0.00000 sl: 1.65314 tp: 0.00000 failed [Invalid S/L or T/P]

с таким кодом

RefreshRates();
tick=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),30,ssll,0,CMM,MAGIC,0,Blue);
     
почему цена открытия нулю равна
 

Добрый день.

Можете ли вы помочь с созданием такой функций?

Сколько баров текущего графика с последнего известное время сервера (TimeCurrent()) до определенного дня первым открытием бара этого дня(TimeDay(Time[80])?

Заранее благодарю!