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

 
yaaarik777:

晚上好!

请帮我写代码,我觉得我自己做不到,大意是这样的。


底线是这样的:在这条线上,帮助痛苦和寻求的人。
如果你需要为你做 - 这是一个自由职业者。并帮助你讲述你想得到的东西,展示你所做的事情,描述失败的原因。
 
Maxim Kuznetsov:
重点是:在这一主题中,帮助痛苦和寻求的人。
如果你需要为你做--那是在自由职业者中。而要获得帮助,你需要告诉你想要得到什么,展示你正在做的事情,并描述失败的原因。


问题是,我不明白如何让EA只分析某一个特定的货币对的订单,而不是分析终端中所有货币对的订单。

如果可以的话,请给我一个想法或代码例子,因为教科书上分别描述了什么工作和如何工作,但具体例子并不多。

我将感谢您的帮助。

谢谢你。

 
你好。
我已经很久没有拿起飞镖了,而当我拿起飞镖时,结果是

我不知道怎么玩。
我在请求帮助。
有一个好的老式EA,使用Rosh的ZigZag指标
而且它像瑞士钟一样工作得很好。
它附上了文本底部给出的不下载专家顾问的代码。

EA的想法是,订单的打开和关闭是在

不同ZigZag的巧合。
现在我需要用另一个Rosh指标来代替

指标,也是MT3时期ZigZag的最早版本之一。
但这个指标有不同的ZigZag绘制算法。

它的名字是High_Low v2 (ZigZag), (在附件中,由于某种原因,名字闪了一下)

通过直觉的方法,有时是有效的,我只是改变了条件
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0) 。
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0) 。
关于
double zz1 = iCustom( NULL, 0, "High_Low v2 (ZigZag)",300, 6, 0, 0) 。

double zz2 = iCustom( NULL, 0, "High_Low v2 (ZigZag)",300, 6, 0, 0) 。

也就是说,我已经替换了一个自定义指标 的名称和它的

以分形为例,它对我很有效。

.
参数是相同的,因为两个Zigzag不需要相同。

我不需要Zigzag的巧合,我只需要它的变化的事实。
我把数字60换成了0,以便在所有TF中工作。

替换后,EA的编译没有错误,但当连接到以下设备时,它强烈拒绝工作

此外,它还拒绝在策略测试器中工作。

不愿意工作。

问题是:什么是错的?
还有一个问题,什么是正确的方法?
谢谢,抱歉文字太大。


//+------------------------------------------------------------------+
//| ZZ.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp.
#属性链接 "http://www.metaquotes.net"

#include <stdlib.mqh>.

#define MAGIC 20110220

外部双倍TakeProfit = 50;
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|计算未结头寸|
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int pos=0。
//----
for(int i=0;i<OrdersTotal();i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
如果(OrderSymbol()==Symbol() && OrderMagicNumber() ==MAGIC)
{
如果(OrderType()==OP_BUY || OrderType()==OP_SELL) pos++;
}
}
//---- 退货订单量
if(pos>0) return(pos)
}
//+------------------------------------------------------------------+
//| 检查未结订单的情况 |
//+------------------------------------------------------------------+
空白的CheckForOpen()。
{
int res;

//---- 得到ZZ
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0) 。
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0) 。
//---- 购买条件
如果(CompareDoubles(zz1,Low[0]) && CompareDoubles(zz2,Low[0])
{

res=OrderSend(Symbol(,OP_BUY,1,Ask,3,0,Ask+TakeProfit*Point,"",MAGIC,0,Bl)

ue)。
返回。
}
//---- 卖出条件
如果(CompareDoubles(zz1,High[0]) && CompareDoubles(zz2,High[0])
{

res=OrderSend(Symbol(,OP_SELL,1,Bid,3,0,Bid-TakeProfit*Point,"",MAGIC,0,Re)

d);
返回。
}

//----
}
//+------------------------------------------------------------------+
//| 检查平仓的条件|
//+------------------------------------------------------------------+
空白的CheckForClose()
{
//---- 得到ZZ
double zz1 = iCustom( NULL, 60, "ZigZag_Rosh",12, 5, 3, 0, 0) 。
double zz2 = iCustom( NULL, 60, "ZigZag_Rosh",48, 20, 12, 0, 0) 。
//----
for(int i=0;i<OrdersTotal();i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
如果(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) 继续。
//---- 检查订单类型
如果(OrderType()==OP_BUY)
{
如果(CompareDoubles(zz1,High[0]) && CompareDoubles(zz2,High[0])

OrderClose(OrderTicket(),OrderLots(),Bid,3)。
突破。
}
如果(OrderType()==OP_SELL)
{
如果(CompareDoubles(zz1,Low[0]) && CompareDoubles(zz2,Low[0])

OrderClose(OrderTicket(),OrderLots(),Ask,3,White)。
突破。
}
}
//----
}
//+------------------------------------------------------------------+
//| 启动功能|
//+------------------------------------------------------------------+
空白启动()。
{
//---- 检查历史和交易情况
如果(Bars<100 || IsTradeAllowed()==false) 返回。
//---- 按当前符号计算未结订单
如果(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
否则CheckForClose()。
//----
}
//+------------------------------------------------------------------+













MetaQuotes Software Corp.
MetaQuotes Software Corp.
  • www.metaquotes.net
Торговая платформа MetaTrader 5 - это бесплатный инструмент трейдера, позволяющий торговать на форексе и фондовых биржах.
附加的文件:
 
yaaarik777:


关键是我不明白如何让EA只计算某一个特定对的订单,而不是终端中所有对的总数。

我不明白如何使EA只计算某一特定货币对的订单,而不计算终端中所有货币对的总和。

我将非常感谢您的帮助。

我将不胜感激。

请随意查看代码库 - 每个EA都有一个订单循环:-)

例如https://www.mql5.com/ru/code/16588(我遇到的第一个)

  for(int index = orders-1; index >= 0; index--)
      {
      if(OrderSelect(index,SELECT_BY_POS,MODE_HISTORY)==false)
         {
         Print("Error in history!");
         break;
         }
      if(OrderSymbol()==symbol && OrderMagicNumber()==MAGICMA)
         {
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
            {
            if(OrderProfit()>0) break;
            if(OrderProfit()<0) losses++;
            }
         }
      }

if(OrderSymbol()==符号&&OrderMagicNumber()==MAGICMA) "条件正是选择特定符号和特定MAGIC的订单。

PS/在上述复制粘贴的代码中断的情况下,OrderSelect 错误是不太正确的,而是使用continue(不管是什么原因,订单没有被选中,也许是MetaTrader的一些内部机制有问题,但下一个订单不会被跳过)。

Middle Moving Average
Middle Moving Average
  • 投票: 6
  • 2016.10.18
  • Dmitriy Kudryashov
  • www.mql5.com
Вариант советника, основанного на среднем значении цены для расчета Moving Average.
 
Maxim Kuznetsov:

请随意查看 代码库-每个 EA都有 一个订单 循环:-)

例如https://www.mql5.com/ru/code/16588(我遇到的第一个)

不仅在CodeBase中,在论坛上的两个主题之一,重要的是开始寻找,会有一百多个不同的解释。
 
谢谢你,我将会访问
 

大家好!!帮我写一个能返回买入或卖出信号的函数。我还不知道如何在MQL中使用条形图(虽然我不知道很多事情!)。

条件如下:父条是一个条形,即在高点和低点内有一个条形的收盘价(这很重要!!正是收盘价。)一旦某个条形刺穿了父条,并且收盘价高于高点或低于低点,它现在就成了父条!。

如果母条的收盘价高于开盘价,我们返回买入信号。

如果母条的收盘价低于开盘价,我们返回卖出信号。

在外部变量中设置时间框架是非常重要的。

但问题是,至少对我来说,专家顾问如何在图表上找到最后一个哑光柱? 是的,从视觉上我可以马上看到它!....。

如果我在一个外部变量中指定最后一个MAT棒的索引,然后函数将从它开始跳舞,这将是很方便的;或者另一种变体,即取一个具有索引的棒,例如50,然后通过循环到零。

非常请帮助孤儿!!!。

 

下午好!

你能给我一个想法吗?我们需要一个EA在这个价格上已经有一个订单被打开的情况下不能再打开订单。如何实施检查?

 
Kot:

下午好!

你能给我一个想法吗?我们需要一个EA在这个价格上已经有一个订单被打开的情况下不能再打开订单。如何实施检查?

这是一项艰巨的任务。出于无奈,考虑到滑坡的情况,我曾经给期望的_价格/_点数分配了一个神奇的订单。

在mql5中要容易得多:有一个价格与要求的价格不一致的头寸和一个要求价格的订单。

 
Kot:

下午好!

你能给我一个想法吗?我们需要一个EA在这个价格上已经有一个订单被打开的情况下不能再打开订单。如何实施检查?


你写一个订单的循环,在这个循环中,你将每个订单的开盘价 与给定的价格值进行比较,如果有一个匹配,那么新订单的标志就不会被提起。