初学者的问题 MQL4 MT4 MetaTrader 4 - 页 31

 
另外,请告知如何将这个删除功能写进这个条件。
 
spoiltboy:
另外,请告诉我如何在这个条件下写这个删除函数。

您必须首先定义要删除的待处理订单的票据

如果票据为空或未定义 - 那么就不要删除它

 
spoiltboy:

这是针对不同的订单。通过一个条件去除一个,无条件去除另一个的功能。

问题是,为什么在我的案例中,删除函数在没有条件的情况下能成功工作,但如果我把它放在一个条件中,当条件发生时就会产生一个错误。

条件必须得到纠正,没有条件就不能做,日志会占用整个硬盘的。
 
Renat Akhtyamov:

你必须首先定义要删除的 ticketD 和 ticketUP

如果票据为空或未定义,则不删除

如此定义,一个是 ticketD,另一个ticketUP

还是我混淆了什么?

 
spoiltboy:

如此定义,一个是 ticketD,另一个ticketUP

还是我混淆了什么?

如果ticketUP已经被删除,如何定义它

你已经删除了,更新ticketUP到你需要的状态,在这个状态下,删除ticketUP的条件不会起作用,这个条件也必须加到代码中去

 
Renat Akhtyamov:

如果TicketUP已经被删除,如何定义它

你已经删除了,更新ticketUP到你需要的状态,在这个状态下,删除票据的条件将不起作用,这个条件也必须被添加到代码中。

因此,带有ticketD、另一个ticketUP 的订单首先被创建(根据缺席条件),之后它们已经被删除。

if(BuyLimitCount()==0&& BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
int ticketUP=OrderSend(Symbol() 。OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red);
if(ticketUP==-1)Print("ERROR OP_BUY"); elsePrint("OP_BUY OK"); }

if(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
int ticketD=OrderSend(Symbol()OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue);
if(ticketD==-1)Print("ERROR OP_SELL"); elsePrint("OP_SELL OK"); }

if(x!=maxpr1){x=maxpr1;OrderDelete(ticketD); }

OrderDelete(ticketUP)

如果我感到困惑,是什么?

 
spoiltboy:

因此,带有ticketD 的订单,另一个ticketUP 首先被创建(根据缺席条件),然后它们被删除。

如果(BuyLimitCount()==0&& BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5)。
tpB=NormalizeDouble(minpr1+pointsl*Point,5)。
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB," ", MagicB,0, Red)
如果(ticketUP==-1Print("ERROR OP_BUY"); elsePrint("OP_BUY OK");}

如果(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point5)。
tpS=NormalizeDouble(maxpr1+pointsl*Point5)。
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue)
如果(ticketD==-1Print("ERROR OP_SELL"); elsePrint("OP_SELL OK");}

如果(x!=maxpr1){x=maxpr1;OrderDelete(ticketD);}

OrderDelete(ticketUP)

如果我混淆了什么?

你又有了一个没有条件的命令。

OrderDelete(ticketUP)

你为什么不改变代码?

至少花点时间 "思考 "一下,整理一下+看看你写了什么,给了什么建议。

顺便说一下,这里有自由职业者 ,如果你不能...

 
Renat Akhtyamov:

所以你又有了一个没有条件的命令。

OrderDelete(ticketUP)

你为什么不改变代码?

至少花点时间 "思考 "一下,弄清楚+读一下别人给你写的东西,给你的建议。

顺便说一下,这里有自由职业者 ,如果不成功的话......

它是没有条件的--因为清除就是这样发生的,而有条件的--没有。于是写道:"我不能。你可以这样写。

OrderDelete(ticketD)。

OrderDelete(ticketUP)。

然后每一个tick都会删除在每一个tick上已经创建的订单(根据缺席条件)。而如果我们写的时候有条件。

如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。

如果(z!=minpr1){z=minpr1;OrderDelete(ticketUP);}。

然后当条件发生时,它就会写下一个删除错误。

我如何在这个条件下写出删除指定的订单?

 
spoiltboy:

它是没有条件的--因为切除就是这样发生的,但有条件就没有了。我这样写是为了指出我不能做什么。如果你这样写的话。

OrderDelete(ticketD)。

OrderDelete(ticketUP)。

然后每一个tick都会删除在每一个tick上已经创建的订单(根据缺席条件)。而如果我们写的时候有条件。

如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。

如果(z!=minpr1){z=minpr1;OrderDelete(ticketUP);}。

然后当条件发生时,它就会写下一个删除错误。

我们应该如何编写删除指定订单的条件?


你不能取消删除订单的条件!

开票时应将ticketUP和ticketD写入全局变量 中。

GlobalVariableSet("ticketUP",ticketUP)。

GlobalVariableSet("ticketD",ticketD)。

并在删除待处理票据前从那里读取

ticketUP=GlobalVariableGet("ticketUP")

ticketD=GlobalVariableGet("ticketD")

顺便说一下,看看那里(全局)--你有什么,票据上写的是什么

我想,在那之后,一切都会按部就班地进行。

 
你好!谁能帮助解决这个问题,我正在为一个动态数组 写一个蝰蛇,下面是这个类的代码。
class CArray
{  
private:
   template <typename T>
   T _array[];
   int _index;
   int _err;
   int _err_sys;
public:
   CArray(){_index = -1; _err = 0; _err_sys = 0;}
   ~CArray(){}
  // template <typename T>
   T operator[](int i){
      if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
      return (_array[i]);
   }
   T at(int i){  
      if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
      return (_array[i]);
   }
   void push_back(T value){
      _array[++_index] = value;
   }
};

程序代码的一部分。

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.1"
#property strict

#include "Array.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
CArray *array;


int OnInit()
  {
  int b = 1;
   array = new CArray();
   array.push_back(b);
   int a = array.at(0);
  
//---
   return(INIT_SUCCEEDED);
  }
...

尝试在真实数据上运行专家顾问后,出现了以下错误:内部错误#-1005

我做错了什么?提前感谢!