[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 77

 

大家好

请教一下,为什么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); // 退出
}}}}}}
 
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()的作用是什么?


其余的部分很难理解,因为代码的布局没有缩进,人们无法跟随括号--我不想破坏我的视野。

 
我如何使图表脱色以显示后缘的运动?
 
anat писал(а)>>

非常感谢您的帮助!也是对秃鹰--y。现在又出现了另一个问题。例如,我们已经开了10个买入头寸。当我们使用止损或止盈关闭1、2、3等仓位时,如果有买入信号,专家顾问就开始买入。但我需要所有的订单先被关闭,然后,当没有一个未结头寸时,新的交易周期将开始。换句话说,我们需要一个计数器。首先将仓位开到给定的数字,然后在平仓时,将仓位开到零。我想提前感谢。

这正是现在的做法。只要有至少一个未平仓的订单,另一个订单就不会平仓。如果你想不这样做,你必须更加精确。然后你必须选择--如果有未结头寸,你的订单是否被打开。

 

这里有一个问题。

MetaTrader中是否有任何调试工具?

请分享你的经验 - 你是如何调试脚本和EA的?

这都是关于数字、参数、算法的愿景等等。你如何捕捉算法中的错误?

 
Ryan_ryan >> :

这里有一个问题。

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 "响起。有趣的是,这只适用于短线交易,对于长线交易,一切运作正常。谁知道诀窍是什么,如何解决?

 
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)

这条线不知怎么就掉了。

 
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");  
     }
  }
 
infinum13 >> :

在第一个 "如果 "之后,括号不是关闭了吗?

如果(OrderType()==OP_SELL && OrderMagicNumber()==mnum)

这条线不知为何没有关闭。

关闭,这是我无意中删除的,否则,如果不是这样就不会编译,如果(OrderType()==OP_SELL && OrderMagicNumber()==mnum,那么就会落空,但在短线和长线交易上都能发挥作用,而且错误 "没有错误",声音 "超时"。wav "只适用于短线交易,对于长线交易,它工作得很好,有相同的括号,一切都相同。

原因: