新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1347 1...134013411342134313441345134613471348134913501351135213531354...1953 新评论 Порт-моне тв 2021.01.10 05:30 #13461 我无法完成专家顾问的工作。其本质很简单--首先我画一个矩形,这是一个买入触发器,以防价格进入其区域,然后我画第二个--当价格到达那里时,交易应该被关闭。 但相反的情况发生了--价格开始在该区域内开盘和收盘。我做错了什么? //+------------------------------------------------------------------+ //| RECTANGLES OP_BUY.mq4| //+------------------------------------------------------------------+ #财产版权"" #属性链接"" #财产版本 "1.00" #属性严格 外置 int Magic = 777701; 外来的双数Lot = 0.01。 外置 int Slippage = 3; int票。 int OrderOfSymbol; //+------------------------------------------------------------------+ //|专家初始化功能| //+------------------------------------------------------------------+ int OnInit() { //--- return(INIT_SUCCEEDED)。 } //+------------------------------------------------------------------+ //|专家去初始化函数| //+------------------------------------------------------------------+ 空白的OnDeinit(const int reason)。 { //--- } //+------------------------------------------------------------------+ //|专家勾选功能| //+------------------------------------------------------------------+ 空白的OnTick() { //--- //检查一个矩形。 如果(ObjectsTotal(OBJ_RECTANGLE)==0) {Comment("画一个矩形 来开一个买入交易!");}。 //获得该矩形的NAME。 for(int n=0;n<ObjectsTotal();n++) { string name=ObjectName(n)。 如果(ObjectType(name)==OBJ_RECTANGLE) { datetime t1a = (datetime) ObjectGet(name,OBJPROP_TIME1); datetime t2a = (datetime) ObjectGet(name,OBJPROP_TIME2); double p1a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits)。 double p2a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits)。 OrderOfSymbol=CounterOrderTradeType(-1)。 如果(OrderOfSymbol<1) 如果(Close[1]>Open[1])。 如果(TimeCurrent()>t1a && TimeCurrent()< t2a &&) 出价 < p1a && 出价 > p2a ) { ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "open buy order", Magic, 0, Blue); } } } //检查是否已经有了第二个矩形。 如果(ObjectsTotal(OBJ_RECTANGLE)==1) {Comment("绘制第二个矩形 来关闭买入交易!");}。 //获得该矩形的NAME。 for(int n=0;n<ObjectsTotal();n++) { string name=ObjectName(n); 如果(ObjectType(name)==OBJ_RECTANGLE) { datetime t1b = (datetime) ObjectGet(name,OBJPROP_TIME1); datetime t2b = (datetime) ObjectGet(name,OBJPROP_TIME2); double p1b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits)。 double p2b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits)。 如果(TimeCurrent()>t1b &&TimeCurrent()< t2b &&) 出价 < p1b && Bid > p2b ) CloseBuyPositions1()。 } } //检查是否已经有了第二个矩形。 如果(ObjectsTotal(OBJ_CHANNEL)==2) {Comment("买入订单的开仓和平仓区域已设定--交易开始了!");}。 } //+------------------------------------------------------------------+ 空白的CloseBuyPositions1()。 { for(int i = OrdersTotal() - 1; i >= 0; i--) 如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 如果(OrderMagicNumber() == Magic) 如果(OrderSymbol() == Symbol()) { 如果(OrderType()==OP_BUY) { 如果(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close"); } } } } //+------------------------------------------------------------------+ //| 顺序计数| //+------------------------------------------------------------------+ int CounterOrderTradeType(ENUM_ORDER_TYPE order_type) { int cnt=0。 //---- for(int pos=OrdersTotal()-1;pos>=0;pos--) { 如果(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) 继续。 如果(OrderSymbol()!=_Symbol)继续。 如果(order_type == OrderType() || order_type == -1) cnt++; } //---- return(cnt)。 } Any questions from newcomers 初学者的问题 MQL4 MT4 MetaTrader 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Tretyakov Rostyslav 2021.01.10 09:39 #13462 Порт-моне тв: 有一个功能是用来发布这样的代码的,这将使大家更容易读到你的代码,以提供帮助。 Alexey Viktorov 2021.01.10 09:46 #13463 MakarFX: 有一个发布这样的代码的功能,这将使大家更容易读到你的代码来帮助。 这对他没有帮助。空白的线条只有像他这样的人才能读懂。 Tretyakov Rostyslav 2021.01.10 10:03 #13464 Порт-моне тв: 我做错了什么? 广场的名称没有唯一性,你有任何广场作为买卖的条件。 Tretyakov Rostyslav 2021.01.10 10:06 #13465 Порт-моне тв: 这也将帮助你 Tretyakov Rostyslav 2021.01.10 13:36 #13466 请告知如何纠正这一错误 //+------------------------------------------------------------------+ #property copyright "Copyright 2020," #property version "1.0" #property strict //--- Inputs int side_position = 1; input ENUM_BASE_CORNER CornerInfo = CORNER_RIGHT_UPPER; input ENUM_BASE_CORNER CornerInfo1 = CORNER_LEFT_UPPER; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if(side_position == 2) { CornerInfo = CORNER_RIGHT_LOWER; CornerInfo1 = CORNER_LEFT_LOWER; } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ 这里有一个错误 'CornerInfo' - constant cannot be modified Wa.mq4 22 1 'CornerInfo1' - constant cannot be modified Wa.mq4 23 1 2 errors, 0 warnings 3 1 Aleksei Stepanenko 2021.01.10 13:47 #13467 Forallf:谢谢你! 不客气 ) MakarFX: 你能告诉我如何纠正这个错误吗?这里有一个错误 输入变量 不能被改变。 你可以这样做。 input ENUM_BASE_CORNER CornerInfo = CORNER_RIGHT_UPPER; ENUM_BASE_CORNER MyCornerInfo = CornerInfo; ....... if(side_position == 2) { MyCornerInfo = CORNER_RIGHT_LOWER; Tretyakov Rostyslav 2021.01.10 13:50 #13468 Aleksei Stepanenko:不客气 )输入变量 不能被改变。你可以这样做。 谢谢,知道了。 Порт-моне тв 2021.01.11 01:14 #13469 MakarFX:这也会帮助你。 它没有。我意识到,平方值并不是像它们应该的那样取自两个,而是取自最后一个。我不知道怎样才能打败它。我难道不会自己想出来吗。我不精通mql,这就是为什么我在这里问你,而你却给我提供梳子。 Tretyakov Rostyslav 2021.01.11 06:31 #13470 Порт-моне тв:没有任何帮助。我意识到,平方值并不是像它们应该的那样取自两个,而是取自最后一个。我不知道怎样才能打败它。我自己也猜不到。我不精通mql,这就是为什么我问你,而你却给我提供梳子。 我为你提供梳子,使你的代码对那些你解决的人来说容易阅读(这里没有恶意)。 至于你的方块,为了正确识别它们,你需要了解它们的来源,即你画的或顾问画的。 1...134013411342134313441345134613471348134913501351135213531354...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我无法完成专家顾问的工作。其本质很简单--首先我画一个矩形,这是一个买入触发器,以防价格进入其区域,然后我画第二个--当价格到达那里时,交易应该被关闭。
但相反的情况发生了--价格开始在该区域内开盘和收盘。我做错了什么?
//+------------------------------------------------------------------+
//| RECTANGLES OP_BUY.mq4|
//+------------------------------------------------------------------+
#财产版权""
#属性链接""
#财产版本 "1.00"
#属性严格
外置 int Magic = 777701;
外来的双数Lot = 0.01。
外置 int Slippage = 3;
int票。
int OrderOfSymbol;
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int OnInit()
{
//---
return(INIT_SUCCEEDED)。
}
//+------------------------------------------------------------------+
//|专家去初始化函数|
//+------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
//---
}
//+------------------------------------------------------------------+
//|专家勾选功能|
//+------------------------------------------------------------------+
空白的OnTick()
{
//---
//检查一个矩形。
如果(ObjectsTotal(OBJ_RECTANGLE)==0)
{Comment("画一个矩形 来开一个买入交易!");}。
//获得该矩形的NAME。
for(int n=0;n<ObjectsTotal();n++)
{
string name=ObjectName(n)。
如果(ObjectType(name)==OBJ_RECTANGLE)
{
datetime t1a = (datetime) ObjectGet(name,OBJPROP_TIME1);
datetime t2a = (datetime) ObjectGet(name,OBJPROP_TIME2);
double p1a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits)。
double p2a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits)。
OrderOfSymbol=CounterOrderTradeType(-1)。
如果(OrderOfSymbol<1)
如果(Close[1]>Open[1])。
如果(TimeCurrent()>t1a && TimeCurrent()< t2a &&)
出价 < p1a && 出价 > p2a )
{
ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "open buy order", Magic, 0, Blue);
}
}
}
//检查是否已经有了第二个矩形。
如果(ObjectsTotal(OBJ_RECTANGLE)==1)
{Comment("绘制第二个矩形 来关闭买入交易!");}。
//获得该矩形的NAME。
for(int n=0;n<ObjectsTotal();n++)
{
string name=ObjectName(n);
如果(ObjectType(name)==OBJ_RECTANGLE)
{
datetime t1b = (datetime) ObjectGet(name,OBJPROP_TIME1);
datetime t2b = (datetime) ObjectGet(name,OBJPROP_TIME2);
double p1b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits)。
double p2b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits)。
如果(TimeCurrent()>t1b &&TimeCurrent()< t2b &&)
出价 < p1b && Bid > p2b )
CloseBuyPositions1()。
}
}
//检查是否已经有了第二个矩形。
如果(ObjectsTotal(OBJ_CHANNEL)==2)
{Comment("买入订单的开仓和平仓区域已设定--交易开始了!");}。
}
//+------------------------------------------------------------------+
空白的CloseBuyPositions1()。
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
如果(OrderMagicNumber() == Magic)
如果(OrderSymbol() == Symbol())
{
如果(OrderType()==OP_BUY)
{
如果(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close"); }
}
}
}
//+------------------------------------------------------------------+
//| 顺序计数|
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
{
int cnt=0。
//----
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
如果(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) 继续。
如果(OrderSymbol()!=_Symbol)继续。
如果(order_type == OrderType() || order_type == -1) cnt++;
}
//----
return(cnt)。
}
有一个功能是用来发布这样的代码的,这将使大家更容易读到你的代码,以提供帮助。
有一个发布这样的代码的功能,这将使大家更容易读到你的代码来帮助。
这对他没有帮助。空白的线条只有像他这样的人才能读懂。
Порт-моне тв:
我做错了什么?
广场的名称没有唯一性,你有任何广场作为买卖的条件。
这也将帮助你
请告知如何纠正这一错误
这里有一个错误
'CornerInfo' - constant cannot be modified Wa.mq4 22 1 'CornerInfo1' - constant cannot be modified Wa.mq4 23 1 2 errors, 0 warnings 3 1
谢谢你!
不客气 )
你能告诉我如何纠正这个错误吗?
这里有一个错误
输入变量 不能被改变。
你可以这样做。
不客气 )
输入变量 不能被改变。
你可以这样做。
谢谢,知道了。
这也会帮助你。
它没有。我意识到,平方值并不是像它们应该的那样取自两个,而是取自最后一个。我不知道怎样才能打败它。我难道不会自己想出来吗。我不精通mql,这就是为什么我在这里问你,而你却给我提供梳子。
没有任何帮助。我意识到,平方值并不是像它们应该的那样取自两个,而是取自最后一个。我不知道怎样才能打败它。我自己也猜不到。我不精通mql,这就是为什么我问你,而你却给我提供梳子。
我为你提供梳子,使你的代码对那些你解决的人来说容易阅读(这里没有恶意)。
至于你的方块,为了正确识别它们,你需要了解它们的来源,即你画的或顾问画的。