Любые вопросы новичков по 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удя по всему это количество миллисекунд, прошедших со старта системы)

 

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

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

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