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

 
Valeriy Yastremskiy:

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

А программно это как ???
 
AIGUL SALMANOVA:
А программно это как ???
 if(OrderSelect(Ticket, SELECT_BY_TICKET)==true)
        {
         if(OrderCloseTime()==0)              // Если наш рыночный ордер не закрыт
           {
            if(flagAlert == true)
               Alert("Наш рыночный ордер жив, Модифицируем его если нужно ", Text,Ticket,". Ждём ответ..");

            ModifyTral(); // Модифицируем если нужно
           }
         if(OrderCloseTime()!=0)              // Если наш рыночный ордер закрылся
           {
            OpnOr=false;                     // Флаг открытия рыночного ордера после его закрытия делаем ЛОЖЬ
            Ticket=0;                          // Тикет ордера рыночного, он может быть только один
           
            Alert("Наш рыночный ордер закрылся. Работа Советника продолжается ","Прибыль/убыток = ",OrderProfit(),
                  " Своп = ", OrderSwap(), " Комиссия = ", OrderCommission());
            return;
           }
        }
      else
        { Alert("OrderSelect() нашего рыночного ордера вернул ошибку - ",GetLastError()); return;}
     }

Для учета по тикету. 

При открытии ордера необходимо запомнить тикет.

 Alert("Попытка открыть Buy Ожидание ответа..","SL = ",SL,"TP = ",TP,"Lts = ",Lts);
            Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,slippage,SL,TP,"QstrBuy",Magic,0,Blue);//Открытие Buy
            if(Ticket>0) // Получилось :)
              {
               Alert(Symbol(),"Открыт ордер Buy по цене ",Ask,"Ticket = ",Ticket);}
 
Valeriy Yastremskiy:

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

Нужно время в миллисекундах между 4-мя последними тиками. Обновление значений при появлении нового тика.

Индикатор пишет время последнего тика (GetTickCount()) в буфер.

Советник берет значения из индикатора и считает разницу во времени.

double buf1=iCustom(Symbol(),0,"time",0,1);
double buf2=iCustom(Symbol(),0,"time",0,2);
double buf3=iCustom(Symbol(),0,"time",0,3);
double buf4=iCustom(Symbol(),0,"time",0,4);
double delta1=buf1-buf2;
double delta2=buf2-buf3;
double delta3=buf3-buf4;
Alert(delta1,"   ",delta2,"   ",delta3);

Вроде все считается, но Alert поочередно выдает значения как на картинке.

Не понимаю почему.


 
prom18:

Нужно время в миллисекундах между 4-мя последними тиками. Обновление значений при появлении нового тика.

Индикатор пишет время последнего тика (GetTickCount()) в буфер.

Советник берет значения из индикатора и считает разницу во времени.

Вроде все считается, но Alert поочередно выдает значения как на картинке.

Не понимаю почему.


потому что не читаете документацию

в справке про GetTickCount про это написано - это целочисленное переполнение счётчика

 
Maxim Kuznetsov:

потому что не читаете документацию

в справке про GetTickCount про это написано - это целочисленное переполнение счётчика

Вы про uint? В алерте то почему выскакивает? Я же его там не прописывал.

 
prom18:

Вы про uint? В алерте то почему выскакивает? Я же его там не прописывал.

в первом Alerte вы выводите неверно(без учёта переполнений) посчитанную разницу,

второй Alert, там где большое целое значение ищите в коде, в приведённом вами фрагменте его нет :-)

 

В том то и дело, в коде нет.

Весь код индикатора.

#property  indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Aqua
double x[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(1);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,x);
   SetIndexDrawBegin(0,0);
   SetIndexLabel(0,"x");
   SetIndexShift(0,0);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   uint b=GetTickCount();
   x[0]=b;
   Alert(b);
   for(int j=ArraySize(x)-1;j>=1;j--){x[j]=x[j-1];}
   return(0);
  }
//+------------------------------------------------------------------+

Весь код советника.

#property copyright ""
#property link      ""
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   uint buf1=iCustom(Symbol(),0,"time",0,1);
   uint buf2=iCustom(Symbol(),0,"time",0,2);
   uint buf3=iCustom(Symbol(),0,"time",0,3);
   uint buf4=iCustom(Symbol(),0,"time",0,4);
   uint delta1=buf1-buf2;
   uint delta2=buf2-buf3;
   uint delta3=buf3-buf4;
   Alert(delta1,"   ",delta2,"   ",delta3);  
  }
//+------------------------------------------------------------------+
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
 
prom18:

В том то и дело, в коде нет.

Весь код индикатора.

Весь код советника.

смотрите что там у вас ещё поназапущенно.

time.mq4 посмотрите - может он алерты шлёт

 
prom18:

В том то и дело, в коде нет.

Весь код индикатора.

Весь код советника.

В индикаторе в структуре алерт. 5 строка снизу Alert(b); 

uint b=GetTickCount();
   x[0]=b;
   Alert(b);

Cудя по всему это количество миллисекунд, прошедших со старта системы)

 

Как отследить состояние кнопок быстрой торговли?

То есть присутствуют они на чарте или нет.

Подскажите функцию или другой метод какой.

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