新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1468

 
大家好。
我在mql4中写了一个简单的代码,每当价格从最近的本地最低点上升30点时,就在分钟图上开一个订单。开单后,当地的低点成为订单的开仓价。
void OnTick()
{
if (Bid<LoU)
LoU=Bid;
//********************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
}
}

我不喜欢我的代码是什么.....它几乎必须在每一个刻度上执行。我可以改进这段代码,它将不会在每个tick上执行,而是在几乎每分钟的蜡烛上执行。这意味着程序必须做大量的工作,以找到订单的开启点。

Q:

能否请您提出一种语言结构,帮助我找到代码中提到的订单的开仓点,而不需要尝试点位或蜡烛图,或者尽可能少的尝试,即让程序在寻找开仓点上花费尽可能少的时间

谢谢你的帮助。

 
ANDREY:
大家好。我在mql4中写了一个简单的代码,每当价格从最近的本地最低点上升30点时,就在分钟图上开一个订单。开单后,当地的低点成为订单的开仓价。

我不喜欢我的代码是什么.....它几乎必须在每一个刻度上执行。我可以改进这段代码,它将不会在每个tick上执行,而是在几乎每分钟的蜡烛上执行。这意味着程序必须做大量的工作,以找到订单的开启点。

Q:

能否请您提出一种语言结构,帮助我找到代码中提到的订单的开仓点,而不需要尝试点位或蜡烛图,或者尽可能少的尝试,即让程序在寻找开仓点上花费尽可能少的时间

谢谢你的帮助。

//+------------------------------------------------------------------+
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

谢谢你的帮助。

但我的代码的结果和我的不一样。
这是我在GBPUSD一分钟图表上的代码结果,时间为2010年1月4日到2010年1月5日。

而这是你的代码的结果

 
ANDREY:

谢谢你的帮助。

但我的代码的结果和我的不一样。
这是我在GBPUSD一分钟图表上的代码结果,时间为2010年1月4日到2010年1月5日。

这是你的代码的结果

显示代码 OnInit()

 
MakarFX:

给我看看OnInit()的代码。

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)<=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }

我刚刚把你的代码复制到MetaEditor,得到的结果就是上面的。

你的代码打开一个订单并向下计数30点(黄色),而我的代码向下计数(蓝色)。

谢谢您的帮助

 
ANDREY:

我只是把你的代码复制到MetaEditor中,得到了上面的结果。

谢谢你的帮助。

我需要你的代码来理解这一点。

在你的代码中,如果价格下跌,LoU会在每个tick 上改变,但在我的代码中,LoU只在开仓后改变。

 
MakarFX:

我需要你的代码来理解重点是什么。

在你的代码中,如果价格下跌,LoU在每个tick 上都会改变,而我的LoU只在交易开始后才改变。

你有30个点在错误的一边。我在之前的帖子中添加了一张图片
,而我的代码在第一篇帖子中。 只要价格超过当地最低点的30点,*底向上* - 开立一个订单。而我的代码完全按照我的需要打开了订单。但我希望它在这方面花费的时间最少。

在我的代码中,同意LoU在每个订单打开后的每一个tick上发生变化没有它,程序将无法找到最近的局部最低点,我们应该从那里计算30点。我正在努力寻找解决方案,所以LoU不会在每个tick或每分钟的蜡烛上发生变化,但订单会在我的代码中打开的地方打开
 
ANDREY:

我只是把你的代码复制到MetaEditor中,得到了上述结果。

你的代码打开订单并向下计算30点(黄色),而我的代码向上计算(蓝色)。

谢谢您的帮助

我的错误......更换

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid-30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
 
MakarFX:

我的错误......更换

谢谢你的帮助。
我做到了。它打开了大量的订单(27657个订单),其中有我需要的订单。

以下是初始订单的截图

 
MakarFX:

我的错误......替换

这是你的代码,其中有改动的一行。

double LoU;
int OnInit()
  {
   LoU=Bid;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if ((Bid+30*Point)>=LoU)
     {
     
      if(OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0)) LoU=Bid;
     }
  }
我怎样才能使代码只打开所需的订单?
原因: