[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 77 1...707172737475767778798081828384...1145 新评论 [删除] 2009.04.21 18:41 #761 大家好 请教一下,为什么Scoop会买入,但当条件成熟时却不平仓? /---- 输入参数 外来的Int PerRSI=8; 外置 int MagicNamber=77771。 外来的双倍Lots=1.0。 //+------------------------------------------------------------------+ int start() { 䵮䵮 cnt, // 订单索引 ticket, // 订单识别号 total; // 已经开出的订单数 双 rsi_0, //值。rsi_0 电流 rsi_1; // 值。rsi_1第一条 如果(Bars<100) { Print("小于100的条形图")。 return(0); } total=OrdersTotal()。 如果(total<1) { rsi_0=iRSI(NULL,0, PerRSI,0,0); // 当前栏位 rsi_1=iRSI(NULL,0, PerRSI,0,1); // 当前小节加1 如果(rsi_0 < rsi_1 && rsi_0 < 30) // 如果线已经越过30 { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green); 如果(ticket>0) { 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL订单 打开:",OrderOpenPrice()) } else Print("错误打开卖出订单:",GetLastError())。 return(0); } for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)。 if(OrderType()<=OP_BUY &&OrderSymbol()==Symbol()) //这是一个未结头寸吗?OP_BUY或OP_SELL { 如果(OrderType()==OP_BUY)//多头开仓 { 如果(rsi_0 > rsi_1 && rsi_0 > 70) // 如果线已经越过70 { OrderClose(OrderTicket(),1,Bid,3,Violet); //关闭头寸 return(0); // 退出 }}}}}} [WARNING CLOSED!] Any newbie my ea does not [存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. Yury Reshetov 2009.04.21 19:07 #762 KoZaNOStra >> : ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green); 如果(ticket>0) { 如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("卖出订单开仓:",OrderOpenPrice()) } 这到底是什么?OrderSelect()的作用是什么? 其余的部分很难理解,因为代码的布局没有缩进,人们无法跟随括号--我不想破坏我的视野。 Columbus 2009.04.21 19:52 #763 我如何使图表脱色以显示后缘的运动? [Deleted] 2009.04.21 20:08 #764 anat писал(а)>> 非常感谢您的帮助!也是对秃鹰--y。现在又出现了另一个问题。例如,我们已经开了10个买入头寸。当我们使用止损或止盈关闭1、2、3等仓位时,如果有买入信号,专家顾问就开始买入。但我需要所有的订单先被关闭,然后,当没有一个未结头寸时,新的交易周期将开始。换句话说,我们需要一个计数器。首先将仓位开到给定的数字,然后在平仓时,将仓位开到零。我想提前感谢。 这正是现在的做法。只要有至少一个未平仓的订单,另一个订单就不会平仓。如果你想不这样做,你必须更加精确。然后你必须选择--如果有未结头寸,你的订单是否被打开。 [Deleted] 2009.04.21 21:43 #765 这里有一个问题。 MetaTrader中是否有任何调试工具? 请分享你的经验 - 你是如何调试脚本和EA的? 这都是关于数字、参数、算法的愿景等等。你如何捕捉算法中的错误? Yury Reshetov 2009.04.21 21:47 #766 Ryan_ryan >> : 这里有一个问题。 MetaTrader中是否有任何调试工具? 请分享您的经验 - 您是如何调试脚本和专家顾问的? 如果我需要进行调试,我会通过Print()来进行。 但在大多数情况下,不会出现这种需要。 Дмитрий 2009.04.22 14:13 #767 RefreshRates(); if(OrderType()==OP_SELL && OrderMagicNumber()==mnum bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen); if (sellclose) { PlaySound("money.wav"); } else { Print("Ошибка : ",Error(GetLastError())); PlaySound("timeout.wav"); } 你能告诉我为什么在这个设计中,在关闭一个订单后,"timeout.wav "首先响起,"no error "等于要关闭的订单数量(如果关闭2个订单,"no error "将弹出两次,等等),然后是 "money.wav "响起。有趣的是,这只适用于短线交易,对于长线交易,一切运作正常。谁知道诀窍是什么,如何解决? [WARNING CLOSED!] Any newbie 能够做到一键平仓吗? Dear Mr. Rosh,To close [Deleted] 2009.04.22 14:39 #768 Dimoncheg писал(а)>> RefreshRates(); if(OrderType()==OP_SELL && OrderMagicNumber()==mnum bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen); if (sellclose) { PlaySound("money.wav"); } else { Print("Ошибка : ",Error(GetLastError())); PlaySound("timeout.wav"); } 你能告诉我为什么在这个设计中,在关闭一个订单后,"timeout.wav "首先响起,"no error "等于要关闭的订单数量(如果关闭了2个订单,"no error "将弹出两次,等等),然后是 "money.wav "响。有趣的是,这只适用于短线交易,对于长线交易,一切运作正常。谁知道诀窍是什么,如何才能解决这个问题? 如果关闭了第一项,那么括号内的内容不是吗? 如果(OrderType()==OP_SELL && OrderMagicNumber()==mnum) 这条线不知怎么就掉了。 Alexander Sevastyanov 2009.04.22 14:53 #769 Dimoncheg >> : RefreshRates(); if(OrderType()==OP_SELL && OrderMagicNumber()==mnum bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen); if (sellclose) { PlaySound("money.wav"); } else { Print("Ошибка : ",Error(GetLastError())); PlaySound("timeout.wav"); } 你能告诉我为什么在这个设计中,在关闭一个订单后,"timeout.wav "首先响起,"no error "等于要关闭的订单数量(如果关闭了2个订单,"no error "将弹出两次,等等),然后是 "money.wav "响。有趣的是,这只适用于短线交易,长线交易一切正常。谁知道诀窍是什么,如何解决? 第一个条件性 "如果 "运算符中的条件只影响它后面的下一个运算符(下一行)。 其他的则被执行,除非该订单被关闭。 也就是说,即使没有关闭订单的命令,其中一个播放音也会起作用。 正确的方法是这样的。 RefreshRates(); if(OrderType()==OP_SELL && OrderMagicNumber()== mnum) { bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen); if ( sellclose) PlaySound("money.wav"); else { Print("Ошибка : ", Error(GetLastError())); PlaySound("timeout.wav"); } } Дмитрий 2009.04.22 15:22 #770 infinum13 >> : 在第一个 "如果 "之后,括号不是关闭了吗? 如果(OrderType()==OP_SELL && OrderMagicNumber()==mnum) 这条线不知为何没有关闭。 关闭,这是我无意中删除的,否则,如果不是这样就不会编译,如果(OrderType()==OP_SELL && OrderMagicNumber()==mnum,那么就会落空,但在短线和长线交易上都能发挥作用,而且错误 "没有错误",声音 "超时"。wav "只适用于短线交易,对于长线交易,它工作得很好,有相同的括号,一切都相同。 1...707172737475767778798081828384...1145 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
大家好
请教一下,为什么Scoop会买入,但当条件成熟时却不平仓?
/---- 输入参数外来的Int PerRSI=8;
外置 int MagicNamber=77771。
外来的双倍Lots=1.0。
//+------------------------------------------------------------------+
int start()
{
䵮䵮
cnt, // 订单索引
ticket, // 订单识别号
total; // 已经开出的订单数
双
rsi_0, //值。rsi_0 电流
rsi_1; // 值。rsi_1第一条
如果(Bars<100)
{
Print("小于100的条形图")。
return(0);
}
total=OrdersTotal()。
如果(total<1)
{
rsi_0=iRSI(NULL,0, PerRSI,0,0); // 当前栏位
rsi_1=iRSI(NULL,0, PerRSI,0,1); // 当前小节加1
如果(rsi_0 < rsi_1 && rsi_0 < 30) // 如果线已经越过30
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL订单 打开:",OrderOpenPrice())
}
else Print("错误打开卖出订单:",GetLastError())。
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)。
if(OrderType()<=OP_BUY &&OrderSymbol()==Symbol()) //这是一个未结头寸吗?OP_BUY或OP_SELL
{
如果(OrderType()==OP_BUY)//多头开仓
{
如果(rsi_0 > rsi_1 && rsi_0 > 70) // 如果线已经越过70
{
OrderClose(OrderTicket(),1,Bid,3,Violet); //关闭头寸
return(0); // 退出
}}}}}}
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
如果(ticket>0)
{
如果(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("卖出订单开仓:",OrderOpenPrice())
}
这到底是什么?OrderSelect()的作用是什么?
其余的部分很难理解,因为代码的布局没有缩进,人们无法跟随括号--我不想破坏我的视野。
非常感谢您的帮助!也是对秃鹰--y。现在又出现了另一个问题。例如,我们已经开了10个买入头寸。当我们使用止损或止盈关闭1、2、3等仓位时,如果有买入信号,专家顾问就开始买入。但我需要所有的订单先被关闭,然后,当没有一个未结头寸时,新的交易周期将开始。换句话说,我们需要一个计数器。首先将仓位开到给定的数字,然后在平仓时,将仓位开到零。我想提前感谢。
这正是现在的做法。只要有至少一个未平仓的订单,另一个订单就不会平仓。如果你想不这样做,你必须更加精确。然后你必须选择--如果有未结头寸,你的订单是否被打开。
这里有一个问题。
MetaTrader中是否有任何调试工具?
请分享你的经验 - 你是如何调试脚本和EA的?
这都是关于数字、参数、算法的愿景等等。你如何捕捉算法中的错误?
这里有一个问题。
MetaTrader中是否有任何调试工具?
请分享您的经验 - 您是如何调试脚本和专家顾问的?
如果我需要进行调试,我会通过Print()来进行。
但在大多数情况下,不会出现这种需要。
RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}
你能告诉我为什么在这个设计中,在关闭一个订单后,"timeout.wav "首先响起,"no error "等于要关闭的订单数量(如果关闭2个订单,"no error "将弹出两次,等等),然后是 "money.wav "响起。有趣的是,这只适用于短线交易,对于长线交易,一切运作正常。谁知道诀窍是什么,如何解决?
RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}
你能告诉我为什么在这个设计中,在关闭一个订单后,"timeout.wav "首先响起,"no error "等于要关闭的订单数量(如果关闭了2个订单,"no error "将弹出两次,等等),然后是 "money.wav "响。有趣的是,这只适用于短线交易,对于长线交易,一切运作正常。谁知道诀窍是什么,如何才能解决这个问题?
如果关闭了第一项,那么括号内的内容不是吗?
如果(OrderType()==OP_SELL && OrderMagicNumber()==mnum)
这条线不知怎么就掉了。
RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}
你能告诉我为什么在这个设计中,在关闭一个订单后,"timeout.wav "首先响起,"no error "等于要关闭的订单数量(如果关闭了2个订单,"no error "将弹出两次,等等),然后是 "money.wav "响。有趣的是,这只适用于短线交易,长线交易一切正常。谁知道诀窍是什么,如何解决?
第一个条件性 "如果 "运算符中的条件只影响它后面的下一个运算符(下一行)。
其他的则被执行,除非该订单被关闭。 也就是说,即使没有关闭订单的命令,其中一个播放音也会起作用。
正确的方法是这样的。
在第一个 "如果 "之后,括号不是关闭了吗?
如果(OrderType()==OP_SELL && OrderMagicNumber()==mnum)
这条线不知为何没有关闭。
关闭,这是我无意中删除的,否则,如果不是这样就不会编译,如果(OrderType()==OP_SELL && OrderMagicNumber()==mnum,那么就会落空,但在短线和长线交易上都能发挥作用,而且错误 "没有错误",声音 "超时"。wav "只适用于短线交易,对于长线交易,它工作得很好,有相同的括号,一切都相同。