新人对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个刻度之间的时间,单位是毫秒。当一个新的tick发生时,更新数值。

该指标将最后一个tick的时间(GetTickCount())写进缓冲区。

专家顾问从指标中获取数值并计算出时间差。

它似乎在计数,但Alert显示的数值与图片中一样。

我不明白为什么。


因为你没有读过文件

GetTickCount 的帮助说这是一个整数计数器溢出

 
Maxim Kuznetsov:

因为你没有阅读文档。

GetTickCount引用说这是一个整数溢出。

你是说uint?为什么会在警报中弹出?我没有把它放在那里。

 
prom18:

你是说uint?为什么会在警报中弹出?我没有写在那里。

在第一篇Alerte 中,你错误地输出了(没有考虑溢出)计算的差额。

第二个警报,在代码中发现一个大的整数值,在这个片段中没有出现:-)

 

这就是问题所在,它不在代码中。

所有的指标代码。

#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);
  }
//+------------------------------------------------------------------+

所有的EA代码。

#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:

这就是问题所在,它不在代码中。

所有的指标代码。

所有的EA代码。

在指标中,在警报结构中。从底部第5行开始的警报(b)。

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

显然,这是自系统启动以来的毫秒数)

 

我如何跟踪快速交易按钮的状态?

也就是说,它们是否出现在图表上。

你能建议一个函数或其他方法吗?

原因: