编码帮助 - 页 238 1...231232233234235236237238239240241242243244245...786 新评论 matmar 2014.03.04 06:54 #2371 是否有机会增加选择的选项? 比如说。 分开,购买,和单独销售 修改一下。BE全部买入0,或+1,或+2点,或全部卖出BE 0,1或2点? 有可能吗? be.mq4 附加的文件: be.mq4 1 kb SuLaimon 2014.03.04 09:29 #2372 你好,Mladen , 谁能告诉我我做错了什么,我主要是用FX Gen写我的EA,用mq4编译器和在线论坛上的例子编写代码,我试图用代码编写我的策略以方便交易,我已经能够用这个代码成功选择最后一笔订单。 空白的OpenNewTrade() { datetime lastTime = 0; int lastTicket = -1; // None open. for (int i=OrdersTotal()-1; i >= 0; i--) 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket ) { lastTime = OrderOpenTime(); lastTicket = OrderTicket()。 如果(OrderType() == OP_BUY || OrderType() == OP_SELL && Ask - OrderOpenPrice() >= Grid*PipValue*Point { { BuyOrder()。 } } 如果(OrderType() == OP_BUY || OrderType() == OP_SELL && OrderOpenPrice() - Bid >= Grid*PipValue*Point { { SellOrder(); } } } return(lastTicket)。 } 否则 Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。 } 你能看一下这段代码吗?我试图用日期时间和订单票据先删除最古老的订单,例如,如果打开的订单>2,就删除最古老的订单。 //------------------------------------------------------------- // Etasoft Inc.外汇EA和脚本生成器4.1版EA //------------------------------------------------------------- // 关键词。MT4,外汇EA生成器,创建EA,专家顾问开发者 #property copyright "Copyright © 2011, Etasoft Inc.外汇EA生成器 v4.1" #property link #include #include //导出的变量 extern int OrderId = 1; extern int Slippage = 2; extern double Lots = 0.01; extern int MaxOrdersAllowed = 2;//允许操作买入和操作卖出 extern int Grid = 10; // 与开仓订单的总距离(点数)。 Extern string EAComment = "564 testing"; // 本地变量 double PipValue=1; // 这个变量是用来支持5位数的经纪商的。 bool Terminated = false; string LF = "\n"; // 在你需要换行的自定义或实用程序块中使用这个变量 int NDigits = 4; // 主要用于Flex类型块中的NormalizeDouble。 int ObjCount = 0; // 计算图表上创建的所有对象,允许创建具有唯一名称的对象 int current = 0; int init() { NDigits = Digits; if (false) ObjectsDeleteAll(); // 清除图表 Comment(""); // 清除图表 } // 专家开始 int start() { 如果(Bars < 10) { Comment("没有足够的条数")。 返回(0)。 } 如果(Terminated == true) { Comment("EA终止了。")。 返回(0)。 } OnEveryTick1(); } 空白 OnEveryTick1() { 如果(true == false && false)PipValue = 10。 如果(true && (NDigits == 3 || NDigits == 5))PipValue = 10。 IfOrderDoesNotExist2()。 IfOrderDoesNotExist4(); 最大订单()。 } 空白 IfOrderDoesNotExist2() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) { 如果(OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { 存在 = 真。 } } 否则 { Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。 } 如果(existence == false) { BuyPendingOrder()。 } } void IfOrderDoesNotExist4() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) { 如果(OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { 存在 = 真。 } } 否则 { Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。 } 如果(existence == false) { SellPendingOrder()。 } } 空白的BuyPendingOrder() { int expire = TimeCurrent() + 60 * 0; double price = NormalizeDouble((Ask-((Ask-Bid)/2), NDigits) + Grid*PipValue*Point; 双重SL = 价格 - 0*PipValue*Point。 如果(0 == 0)SL = 0。 双重TP = 价格 + 0*PipValue*Point。 如果(0 == 0)TP = 0。 如果(0 == 0)expire = 0。 int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue) 。 如果(ticket == -1) { Print("OrderSend() error - ", ErrorDescription(GetLastError()))。 } } void SellPendingOrder() { int expire = TimeCurrent() + 60 * 0; double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point; 双重 SL = 价格 + 0*PipValue*Point。 如果(0 == 0)SL = 0。 双重TP = 价格 - 0*PipValue*Point。 如果(0 == 0)TP = 0。 如果(0 == 0)expire = 0。 int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red) 。 如果(ticket == -1) { Print("OrderSend()错误 - ", ErrorDescription(GetLastError()))。 } } 空白的MaximumOrder() { 如果(MaxOrdersAllowed> 0) { OrderCount()。 } } 空白的OrderCount() { int count = 0; for (int i=OrdersTotal()-1; i >= 0; i--) 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 如果(OrderSymbol() == Symbol() 如果(OrderMagicNumber() == OrderId) 如果(OrderType() == OP_BUY || OrderType() == OP_SELL) { count++; } } 否则 { Print("OrderSend() error - ", ErrorDescription(GetLastError()))。 } 如果(count > MaxOrdersAllowed ) { DeleteOldestOrder()。 } } 空白的DeleteOldestOrder() { datetime lastTime = 0; int lastTicket = -1; // 无开放。 for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket ) { lastTime = OrderOpenTime(); lastTicket = OrderTicket(); 如果(OrderType() == OP_BUY || OrderType() == OP_SELL ) { { OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red)。 } } } return(lastTicket)。 } 否则 Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。 } int deinit() { 如果(false)ObjectsDeleteAll()。 } Coding help [存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. 通用MA交叉EA Mladen Rakic 2014.03.04 10:17 #2373 sulaimoney: Hello Mladen ,谁能告诉我我做错了什么,我主要是用FX Gen写我的EA,用mq4编译器和在线论坛上的例子来编写代码。 空白的OpenNewTrade() { datetime lastTime = 0; int lastTicket = -1; // None open. for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket ) { lastTime = OrderOpenTime(); lastTicket = OrderTicket()。 如果(OrderType() == OP_BUY || OrderType() == OP_SELL && Ask - OrderOpenPrice() >= Grid*PipValue*Point { { BuyOrder()。 } } 如果(OrderType() == OP_BUY || OrderType() == OP_SELL && OrderOpenPrice() - Bid >= Grid*PipValue*Point { { SellOrder(); } } } return(lastTicket)。 } 否则 Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。 } 你能看一下这段代码吗?我试图用日期时间和订单票据先删除最古老的订单,例如,如果打开的订单>2,就删除最古老的订单。 //------------------------------------------------------------- // Etasoft Inc.外汇EA和脚本生成器4.1版EA //------------------------------------------------------------- // 关键词。MT4,外汇EA生成器,创建EA,专家顾问开发者 #property copyright "Copyright © 2011, Etasoft Inc.外汇EA生成器 v4.1" #property link #include #include //导出的变量 extern int OrderId = 1; extern int Slippage = 2; extern double Lots = 0.01; extern int MaxOrdersAllowed = 2;//允许操作买入和操作卖出 extern int Grid = 10; // 与开仓订单的总距离(点数)。 Extern string EAComment = "564 testing"; // 本地变量 double PipValue=1; // 这个变量是用来支持5位数的经纪商的。 bool Terminated = false; string LF = "\n"; // 在你需要换行的自定义或实用程序块中使用这个变量 int NDigits = 4; // 主要用于Flex类型块中的NormalizeDouble。 int ObjCount = 0; // 计算图表上创建的所有对象,允许创建具有唯一名称的对象 int current = 0; int init() { NDigits = Digits; if (false) ObjectsDeleteAll(); // 清除图表 Comment(""); // 清除图表 } // 专家开始 int start() { 如果(Bars < 10) { Comment("没有足够的条数")。 返回(0)。 } 如果(Terminated == true) { Comment("EA终止了。")。 返回(0)。 } OnEveryTick1(); } 空白 OnEveryTick1() { 如果(true == false && false)PipValue = 10。 如果(true && (NDigits == 3 || NDigits == 5))PipValue = 10。 IfOrderDoesNotExist2()。 IfOrderDoesNotExist4(); 最大订单()。 } 空白 IfOrderDoesNotExist2() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) { 如果(OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { 存在 = 真。 } } 否则 { Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。 } 如果(existence == false) { BuyPendingOrder()。 } } void IfOrderDoesNotExist4() { bool exists = false; for (int i=OrdersTotal()-1; i >= 0; i--) 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) { 如果(OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1) { 存在 = 真。 } } 否则 { Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。 } 如果(existence == false) { SellPendingOrder()。 } } 空白的BuyPendingOrder() { int expire = TimeCurrent() + 60 * 0; double price = NormalizeDouble((Ask-((Ask-Bid)/2), NDigits) + Grid*PipValue*Point; 双重SL = 价格 - 0*PipValue*Point。 如果(0 == 0)SL = 0。 双重TP = 价格 + 0*PipValue*Point。 如果(0 == 0)TP = 0。 如果(0 == 0)expire = 0。 int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue) 。 如果(ticket == -1) { Print("OrderSend() error - ", ErrorDescription(GetLastError()))。 } } void SellPendingOrder() { int expire = TimeCurrent() + 60 * 0; double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point; 双重 SL = 价格 + 0*PipValue*Point。 如果(0 == 0)SL = 0。 双重TP = 价格 - 0*PipValue*Point。 如果(0 == 0)TP = 0。 如果(0 == 0)expire = 0。 int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red) 。 如果(ticket == -1) { Print("OrderSend()错误 - ", ErrorDescription(GetLastError()))。 } } 空白的MaximumOrder() { 如果(MaxOrdersAllowed> 0) { OrderCount()。 } } 空白的OrderCount() { int count = 0; for (int i=OrdersTotal()-1; i >= 0; i--) 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 如果(OrderSymbol() == Symbol() 如果(OrderMagicNumber() == OrderId) 如果(OrderType() == OP_BUY || OrderType() == OP_SELL) { count++; } } 否则 { Print("OrderSend() error - ", ErrorDescription(GetLastError()))。 } 如果(count > MaxOrdersAllowed ) { DeleteOldestOrder()。 } } 空白的DeleteOldestOrder() { datetime lastTime = 0; int lastTicket = -1; // 无开放。 for (int i=OrdersTotal()-1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 如果(OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket ) { lastTime = OrderOpenTime(); lastTicket = OrderTicket(); 如果(OrderType() == OP_BUY || OrderType() == OP_SELL ) { { OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red)。 } } } return(lastTicket)。 } 否则 Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。 } int deinit() { 如果(false)ObjectsDeleteAll()。 } 尝试使用这样的函数。 void DeleteOldestOrder() { datetime lastTime = Time[0]+Period()*60; int lastTicket = -1; // None open. for (int i=OrdersTotal()-1; i >= 0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime) { lastTime = OrderOpenTime(); lastTicket = OrderTicket(); } } if (lastTicket>-1) if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES)) OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red); } Coding help 编码帮助......我如何让指标过滤而不是警报? 问吧! SuLaimon 2014.03.04 12:31 #2374 谢谢Mladen 它工作得完美无缺,另外,我为在论坛上发布这么长的代码感到抱歉。我还在适应这个界面。谢谢你。 [删除] 2014.03.04 17:28 #2375 指标不能自动刷新。 我有一个非常适合我交易的指标。 不幸的是,他不能自动更新。我必须总是手动刷新他,使其更新。 有什么办法解决这个问题吗? 这将是非常有帮助的!! 谢谢。 P.S.: 附上我的所有资料。 附加的文件: macfibo_v1.1.ex4 14 kb macfibo_v1.1.mq4 5 kb mac-fibo.ex4 14 kb mac-fibo.mq4 6 kb ms03-039 2014.03.05 15:12 #2376 他想收到短信通知。代码是怎样的? Mladen Rakic 2014.03.05 15:14 #2377 popej30: 他想发送通知短信。这段代码看起来如何? popej30 像这样做。 SendNotification("你想发送的通知信息")。 ms03-039 2014.03.05 15:28 #2378 你在哪里插入你的电话号码?我的号码是0039 555-23-45。在哪里输入? 例子。 #property indicator_separate_window #property indicator_minimum -1.1 #property indicator_maximum 1.1 #property indicator_buffers 2 #property indicator_color1 Aqua #property indicator_color2 Lime extern int period = 25; extern int limit = 5000; double g_ibuf_84[]; double g_ibuf_88[]; double g_ibuf_92[]; int init() { IndicatorBuffers(3); SetIndexStyle(0, DRAW_ARROW); SetIndexStyle(1, DRAW_ARROW); SetIndexStyle(2, DRAW_NONE); SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); SetIndexArrow(0, 233); SetIndexArrow(1, 234); SetIndexBuffer(0, g_ibuf_88); SetIndexBuffer(1, g_ibuf_92); SetIndexBuffer(2, g_ibuf_84); IndicatorShortName("BR16"); return (0); } int start() { double ld_72; double ld_24 = 0; double ld_32 = 0; double ld_unused_40 = 0; double ld_unused_48 = 0; double ld_56 = 0; double ld_unused_64 = 0; double l_low_80 = 0; double l_high_88 = 0; for (int li_96 = 0; li_96 <= limit; li_96++) { g_ibuf_88[li_96] = 0; g_ibuf_92[li_96] = 0; } for (li_96 = 0; li_96 <= limit; li_96++) { l_high_88 = High; l_low_80 = Low; ld_72 = (High[li_96] + Low[li_96]) / 2.0; if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32; else ld_24 = 0.0; ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999); g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0; ld_32 = ld_24; ld_56 = g_ibuf_84[li_96]; } for (li_96 = 0; li_96 <= limit; li_96++) { if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1; if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1; } return (0); } Coding help Heeeeelp!!! 趋势指标 Mladen Rakic 2014.03.05 15:32 #2379 popej30: 你在哪里插入你的电话号码?我的号码0039 555-23-45。在哪里输入?例如。 #property indicator_separate_window #property indicator_minimum -1.1 #property indicator_maximum 1.1 #property indicator_buffers 2 #property indicator_color1 Aqua #property indicator_color2 Lime extern int period = 25; extern int limit = 5000; double g_ibuf_84[]; double g_ibuf_88[]; double g_ibuf_92[]; int init() { IndicatorBuffers(3); SetIndexStyle(0, DRAW_ARROW); SetIndexStyle(1, DRAW_ARROW); SetIndexStyle(2, DRAW_NONE); SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); SetIndexArrow(0, 233); SetIndexArrow(1, 234); SetIndexBuffer(0, g_ibuf_88); SetIndexBuffer(1, g_ibuf_92); SetIndexBuffer(2, g_ibuf_84); IndicatorShortName("BR16"); return (0); } int start() { double ld_72; double ld_24 = 0; double ld_32 = 0; double ld_unused_40 = 0; double ld_unused_48 = 0; double ld_56 = 0; double ld_unused_64 = 0; double l_low_80 = 0; double l_high_88 = 0; for (int li_96 = 0; li_96 <= limit; li_96++) { g_ibuf_88[li_96] = 0; g_ibuf_92[li_96] = 0; } for (li_96 = 0; li_96 <= limit; li_96++) { l_high_88 = High; l_low_80 = Low; ld_72 = (High[li_96] + Low[li_96]) / 2.0; if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32; else ld_24 = 0.0; ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999); g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0; ld_32 = ld_24; ld_56 = g_ibuf_84[li_96]; } for (li_96 = 0; li_96 <= limit; li_96++) { if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1; if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1; } return (0); } 这里有一个很好的解释,你怎么能做到这一点。 Mladen Rakic 2014.03.05 18:52 #2380 Jim Clark: 指标不会自动刷新。 在这里,我有一个很适合我交易的指标。不幸的是,他不会自己更新。我必须总是手动刷新他的更新。有什么办法解决这个问题吗?这将是非常有帮助的!!谢谢。 P.S.: 附上我的所有资料。 吉姆 与其重写整个事情,不如添加一个限制来计算条形,然后所有这些条形被重新计算。这应该可以解决刷新的问题(只要把BarsTocalculate保持在某个合理的位置--不要太大,也不要太小。我使用了1000作为默认值,这样做似乎是可以的)。试试吧 附加的文件: macfibo_v1.1_1.mq4 6 kb 1...231232233234235236237238239240241242243244245...786 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
是否有机会增加选择的选项?
比如说。
分开,购买,和单独销售
修改一下。BE全部买入0,或+1,或+2点,或全部卖出BE 0,1或2点?
有可能吗?
be.mq4
你好,Mladen ,
谁能告诉我我做错了什么,我主要是用FX Gen写我的EA,用mq4编译器和在线论坛上的例子编写代码,我试图用代码编写我的策略以方便交易,我已经能够用这个代码成功选择最后一笔订单。
空白的OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // None open.
for (int i=OrdersTotal()-1; i >= 0; i--)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket()。
如果(OrderType() == OP_BUY || OrderType() == OP_SELL
&& Ask - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder()。
}
}
如果(OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
return(lastTicket)。
}
否则
Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。
}
你能看一下这段代码吗?我试图用日期时间和订单票据先删除最古老的订单,例如,如果打开的订单>2,就删除最古老的订单。
//-------------------------------------------------------------
// Etasoft Inc.外汇EA和脚本生成器4.1版EA
//-------------------------------------------------------------
// 关键词。MT4,外汇EA生成器,创建EA,专家顾问开发者
#property copyright "Copyright © 2011, Etasoft Inc.外汇EA生成器 v4.1"
#property link
#include
#include
//导出的变量
extern int OrderId = 1;
extern int Slippage = 2;
extern double Lots = 0.01;
extern int MaxOrdersAllowed = 2;//允许操作买入和操作卖出
extern int Grid = 10; // 与开仓订单的总距离(点数)。
Extern string EAComment = "564 testing";
// 本地变量
double PipValue=1; // 这个变量是用来支持5位数的经纪商的。
bool Terminated = false;
string LF = "\n"; // 在你需要换行的自定义或实用程序块中使用这个变量
int NDigits = 4; // 主要用于Flex类型块中的NormalizeDouble。
int ObjCount = 0; // 计算图表上创建的所有对象,允许创建具有唯一名称的对象
int current = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // 清除图表
Comment(""); // 清除图表
}
// 专家开始
int start()
{
如果(Bars < 10)
{
Comment("没有足够的条数")。
返回(0)。
}
如果(Terminated == true)
{
Comment("EA终止了。")。
返回(0)。
}
OnEveryTick1();
}
空白 OnEveryTick1()
{
如果(true == false && false)PipValue = 10。
如果(true && (NDigits == 3 || NDigits == 5))PipValue = 10。
IfOrderDoesNotExist2()。
IfOrderDoesNotExist4();
最大订单()。
}
空白 IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
{
如果(OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
存在 = 真。
}
}
否则
{
Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。
}
如果(existence == false)
{
BuyPendingOrder()。
}
}
void IfOrderDoesNotExist4()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
{
如果(OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
存在 = 真。
}
}
否则
{
Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。
}
如果(existence == false)
{
SellPendingOrder()。
}
}
空白的BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Ask-((Ask-Bid)/2), NDigits) + Grid*PipValue*Point;
双重SL = 价格 - 0*PipValue*Point。
如果(0 == 0)SL = 0。
双重TP = 价格 + 0*PipValue*Point。
如果(0 == 0)TP = 0。
如果(0 == 0)expire = 0。
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue) 。
如果(ticket == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()))。
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;
双重 SL = 价格 + 0*PipValue*Point。
如果(0 == 0)SL = 0。
双重TP = 价格 - 0*PipValue*Point。
如果(0 == 0)TP = 0。
如果(0 == 0)expire = 0。
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red) 。
如果(ticket == -1)
{
Print("OrderSend()错误 - ", ErrorDescription(GetLastError()))。
}
}
空白的MaximumOrder()
{
如果(MaxOrdersAllowed> 0)
{
OrderCount()。
}
}
空白的OrderCount()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(OrderSymbol() == Symbol()
如果(OrderMagicNumber() == OrderId)
如果(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
否则
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()))。
}
如果(count > MaxOrdersAllowed )
{
DeleteOldestOrder()。
}
}
空白的DeleteOldestOrder()
{
datetime lastTime = 0;
int lastTicket = -1; // 无开放。
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
如果(OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red)。
}
}
}
return(lastTicket)。
}
否则
Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。
}
int deinit()
{
如果(false)ObjectsDeleteAll()。
}
Hello Mladen ,
谁能告诉我我做错了什么,我主要是用FX Gen写我的EA,用mq4编译器和在线论坛上的例子来编写代码。
空白的OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // None open.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket()。
如果(OrderType() == OP_BUY || OrderType() == OP_SELL
&& Ask - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder()。
}
}
如果(OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
return(lastTicket)。
}
否则
Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。
}
你能看一下这段代码吗?我试图用日期时间和订单票据先删除最古老的订单,例如,如果打开的订单>2,就删除最古老的订单。
//-------------------------------------------------------------
// Etasoft Inc.外汇EA和脚本生成器4.1版EA
//-------------------------------------------------------------
// 关键词。MT4,外汇EA生成器,创建EA,专家顾问开发者
#property copyright "Copyright © 2011, Etasoft Inc.外汇EA生成器 v4.1"
#property link
#include
#include
//导出的变量
extern int OrderId = 1;
extern int Slippage = 2;
extern double Lots = 0.01;
extern int MaxOrdersAllowed = 2;//允许操作买入和操作卖出
extern int Grid = 10; // 与开仓订单的总距离(点数)。
Extern string EAComment = "564 testing";
// 本地变量
double PipValue=1; // 这个变量是用来支持5位数的经纪商的。
bool Terminated = false;
string LF = "\n"; // 在你需要换行的自定义或实用程序块中使用这个变量
int NDigits = 4; // 主要用于Flex类型块中的NormalizeDouble。
int ObjCount = 0; // 计算图表上创建的所有对象,允许创建具有唯一名称的对象
int current = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // 清除图表
Comment(""); // 清除图表
}
// 专家开始
int start()
{
如果(Bars < 10)
{
Comment("没有足够的条数")。
返回(0)。
}
如果(Terminated == true)
{
Comment("EA终止了。")。
返回(0)。
}
OnEveryTick1();
}
空白 OnEveryTick1()
{
如果(true == false && false)PipValue = 10。
如果(true && (NDigits == 3 || NDigits == 5))PipValue = 10。
IfOrderDoesNotExist2()。
IfOrderDoesNotExist4();
最大订单()。
}
空白 IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
{
如果(OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
存在 = 真。
}
}
否则
{
Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。
}
如果(existence == false)
{
BuyPendingOrder()。
}
}
void IfOrderDoesNotExist4()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
{
如果(OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
存在 = 真。
}
}
否则
{
Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。
}
如果(existence == false)
{
SellPendingOrder()。
}
}
空白的BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Ask-((Ask-Bid)/2), NDigits) + Grid*PipValue*Point;
双重SL = 价格 - 0*PipValue*Point。
如果(0 == 0)SL = 0。
双重TP = 价格 + 0*PipValue*Point。
如果(0 == 0)TP = 0。
如果(0 == 0)expire = 0。
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue) 。
如果(ticket == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()))。
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;
双重 SL = 价格 + 0*PipValue*Point。
如果(0 == 0)SL = 0。
双重TP = 价格 - 0*PipValue*Point。
如果(0 == 0)TP = 0。
如果(0 == 0)expire = 0。
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red) 。
如果(ticket == -1)
{
Print("OrderSend()错误 - ", ErrorDescription(GetLastError()))。
}
}
空白的MaximumOrder()
{
如果(MaxOrdersAllowed> 0)
{
OrderCount()。
}
}
空白的OrderCount()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(OrderSymbol() == Symbol()
如果(OrderMagicNumber() == OrderId)
如果(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
否则
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()))。
}
如果(count > MaxOrdersAllowed )
{
DeleteOldestOrder()。
}
}
空白的DeleteOldestOrder()
{
datetime lastTime = 0;
int lastTicket = -1; // 无开放。
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
如果(OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
如果(OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red)。
}
}
}
return(lastTicket)。
}
否则
Print("OrderSelect()错误 - ", ErrorDescription(GetLastError()))。
}
int deinit()
{
如果(false)ObjectsDeleteAll()。
}
尝试使用这样的函数。
{
datetime lastTime = Time[0]+Period()*60;
int lastTicket = -1; // None open.
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
}
}
if (lastTicket>-1)
if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}谢谢Mladen
它工作得完美无缺,另外,我为在论坛上发布这么长的代码感到抱歉。我还在适应这个界面。谢谢你。
指标不能自动刷新。
我有一个非常适合我交易的指标。
不幸的是,他不能自动更新。我必须总是手动刷新他,使其更新。
有什么办法解决这个问题吗?
这将是非常有帮助的!!
谢谢。
P.S.: 附上我的所有资料。
他想收到短信通知。代码是怎样的?
他想发送通知短信。这段代码看起来如何?
popej30
像这样做。
SendNotification("你想发送的通知信息")。
你在哪里插入你的电话号码?我的号码是0039 555-23-45。在哪里输入?
例子。
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}你在哪里插入你的电话号码?我的号码0039 555-23-45。在哪里输入?
例如。
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}这里有一个很好的解释,你怎么能做到这一点。
指标不会自动刷新。
在这里,我有一个很适合我交易的指标。
不幸的是,他不会自己更新。我必须总是手动刷新他的更新。
有什么办法解决这个问题吗?
这将是非常有帮助的!!
谢谢。
P.S.: 附上我的所有资料。吉姆
与其重写整个事情,不如添加一个限制来计算条形,然后所有这些条形被重新计算。这应该可以解决刷新的问题(只要把BarsTocalculate保持在某个合理的位置--不要太大,也不要太小。我使用了1000作为默认值,这样做似乎是可以的)。试试吧