[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 450

 
T-G:
是的,但问题的关键是前一个订单是以负数平仓的,函数没有时间显示这个,首先订单在几个点后被打开,然后函数才显示最后的损失,但订单已经被打开。
我写了一个带检查的代码骨架
 
我这样做了,再次说没有时间 检查,首先它通过了,好像没有麋鹿,打开了一个交易,然后它来到了他,有一个麋鹿。
 
artmedia70:

为什么不使用 "到期 "挂单参数。

当然,也有可能无法使用这个参数。

在一些交易服务器上,挂单的到期时间可能被禁止。在这种情况下,当试图在过期 参数中设置一个非零值时,将产生一个错误147(ERR_TRADE_EXPIRATION_DENIED)。

这是唯一的办法,当然...

我按照你的建议修改了这一行,专家顾问停止了工作......。

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PriceDistance*Point,3,Ask+PriceDistance*Point-StopLoss*Point,Ask+PriceDistance*Point+TakeProfit*Point, "PD",1,TimeCurrent()+10*60,Green)

同时,我知道肯定没有禁令。

请告知错误可能出在哪里。

 
T-G:
我这样做了,再次说没有时间 检查,首先它通过了,好像没有麋鹿,打开了一个交易,然后它来到了他,有一个麋鹿。
奇迹不会发生。你应该去见一个心灵感应者...
 
OlegArH:

我按照你的建议对该行进行了修改,专家顾问停止了工作......。

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PriceDistance*Point,3,Ask+PriceDistance*Point-StopLoss*Point,Ask+PriceDistance*Point+TakeProfit*Point, "PD",1,TimeCurrent()+10*60,Green)

同时,我知道肯定没有禁令。

请告知错误可能出在哪里。

它不太可能停止工作,但你的标准很可能是有缺陷的。没有代码,就很难想出EA不工作的原因。
 
artmedia70:
它不太可能停止工作,但你的标准可能是跛脚。没有代码,很难想到EA不工作的原因...

这是我到目前为止潦草写下的所有内容。

外部双倍TakeProfit = 50;
外置双倍止损=100。
外来的双倍PriceDistance = 50;
外来的双倍Lots = 1;
外来的双倍TrailingStop = 50。
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total;

total=OrdersTotal()。
如果(total<1)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PriceDistance*Point,3,Ask+PriceDistance*Point-StopLoss*Point,Ask+PriceDistance*Point+TakeProfit*Point, "PD",1,0,Green);
睡眠(10000)。
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-PriceDistance*Point,3,Bid-PriceDistance*Point+StopLoss*Point,Bid-PriceDistance*Point-TakeProfit*Point, "PD",2,0,Red)
}

for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。
如果(OrderType()<=OP_SELL && // 检查开仓情况
OrderSymbol()==Symbol()) //检查符号
{
如果(OrderType()==OP_BUY) // 多头头寸被打开。
{
//应该关闭吗?
如果(1!=1)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // 关闭头寸
return(0); // 退出
}
// 检查拖曳式止损
如果(TrailingStop>0)
{
如果(Bid-OrderOpenPrice()>Point*TrailingStop)
{
如果(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green) 。
return(0);
}
}
}
}
否则 // 转入空头头寸
{
//应该关闭吗?
如果(1!=1)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // 关闭位置
return(0); // 退出
}
// 检查拖曳式止损
如果(TrailingStop>0)
{
如果((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
如果((OrderStopLoss()>(Ask+Point*TrailingStop)) ||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red) 。
return(0);
}
}
}
}
}
}
return(0);
}

//结束。

它是这样工作的....但是,相应地,开启了无限期的交易,爬行者。

提前感谢!

 
OlegArH:

这是我到目前为止潦草写下的所有内容。

外部双倍TakeProfit = 50;
外置双倍止损=100。
外来的双倍PriceDistance = 50;
外来的双倍Lots = 1;
外来的双倍TrailingStop = 50。
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total;

total=OrdersTotal()。
如果(total<1)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PriceDistance*Point,3,Ask+PriceDistance*Point-StopLoss*Point,Ask+PriceDistance*Point+TakeProfit*Point, "PD",1,0,Green);
睡眠(10000)。
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-PriceDistance*Point,3,Bid-PriceDistance*Point+StopLoss*Point,Bid-PriceDistance*Point-TakeProfit*Point, "PD",2,0,Red)
}

for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)。
如果(OrderType()<=OP_SELL && // 检查开仓的情况
OrderSymbol()==Symbol()) //检查符号
{
如果(OrderType()==OP_BUY) // 多头头寸被打开。
{
//应该关闭吗?
如果(1!=1)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // 关闭头寸
return(0); // 退出
}
// 检查拖曳式止损
如果(TrailingStop>0)
{
如果(Bid-OrderOpenPrice()>Point*TrailingStop)
{
如果(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green) 。
return(0);
}
}
}
}
否则 // 转入空头头寸
{
//应该关闭吗?
如果(1!=1)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // 关闭位置
return(0); // 退出
}
// 检查拖曳式止损
如果(TrailingStop>0)
{
如果((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
如果((OrderStopLoss()>(Ask+Point*TrailingStop)) ||(OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red) 。
return(0);
}
}
}
}
}
}
return(0);
}

//结束。

它是这样工作的....但是,相应地,开启了无限期的交易,爬行者。

提前感谢!


学习如何插入代码--全部 阅读
 
Roman.:

学习如何插入代码--全部 阅读

罗曼,谢谢你的回答!
我所要做的是,让机器人从自动开启交易的那一刻起就开启交易的时间。

例如,机器人打开一个TARGET交易,自动设置到期时间为当前时间的+600秒,就是这样....。

在这种情况下,当他自己删除他们的选项不适合,因为TC上,我 "训练 "有限制的修改挂单,如果价格接近10点+点差的开盘价,包括那些尚未打开订单。

此外,重点是,如果一个订单已经打开,它不应该被删除,但我们应该让它 "玩完",泡到它 "死"。而如果我们设置了orderdelite,该函数也将关闭已经触发的订单。(?)

至于教科书--好吧,从气质上讲我不是一个程序员,我是一个出色的人道主义者--我画画、做模型、作曲,不为其他事情磨刀霍霍!)

我一直在努力真诚地进入它。有些是有意义的,有些则是没有意义的。

这就是我在这里的原因.....

 
OlegArH:

罗曼,谢谢你的答复
这只是一个问题,让机器人从自动开启交易的那一刻起就按时开启交易。

例如,机器人打开一个TARGET交易,自动设置到期时间为当前时间的+600秒,就是这样....。

在这种情况下,当他自己删除他们的选项不适合,因为TC上,我 "训练 "有限制的修改挂单,如果价格接近10点+点差的开盘价,包括那些尚未打开订单。

此外,重点是,如果一个订单已经打开,它不应该被删除,而是应该允许它 "玩完",然后失败。而如果我们设置了orderdelite,该函数也将关闭已经触发的订单。(?)

至于教科书--好吧,从气质上讲我不是一个程序员,我是一个出色的人道主义者--我画画、做模型、作曲,不为其他事情磨刀霍霍!)

我一直在努力真诚地进入它。有些是有意义的,有些则是没有意义的。

这就是我在这里的原因.....

试着用文字描述你在这里写的东西。

extern double TakeProfit = 50;
extern double StopLoss=100;
extern double PriceDistance = 50;
extern double Lots = 1;
extern double TrailingStop = 50;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
   int cnt, ticket, total;

   total=OrdersTotal();
   if(total<1) {
      ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+PriceDistance*Point,3,Ask+PriceDistance*Point-StopLoss*Point,
                       Ask+PriceDistance*Point+TakeProfit*Point,"PD",1,0,Green);
      Sleep (10000);
      ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-PriceDistance*Point,3,Bid-PriceDistance*Point+StopLoss*Point,
                       Bid-PriceDistance*Point-TakeProfit*Point,"PD",2,0,Red);
      }

   for(cnt=0;cnt<total;cnt++) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&                         // check for opened position
         OrderSymbol()==Symbol()) {                      // check for symbol
         if(OrderType()==OP_BUY) {                       // long position is opened
            if(1!=1) {
               OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
               return(0);                                // exit
               }
                                                         // check for trailing stop
            if(TrailingStop>0) {
               if(Bid-OrderOpenPrice()>Point*TrailingStop) {
                  if(OrderStopLoss()<Bid-Point*TrailingStop) {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                     }
                  }
               }
            }
         else {                                          // go to short position
                                                         // should it be closed?
            if(1!=1) {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
               return(0);                                // exit
               }
                                                         // check for trailing stop
            if(TrailingStop>0) {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                     }
                  }
               }
            }
         }
      }
   return(0);
}

就我个人而言,第一眼看到的是一个难题,你的想法是:如果一不等于一,那么就关闭订单......

之后我没有再看其他的节目...

ZS,不要尝试,甚至不要认为有可能在一个周期内编写一个正常的EA......

 
OlegArH:

...如果你放了orderdelite,该函数也会关闭已经被触发的订单。(?)

...


不, 仔细看一下。被触发的挂单成为市场订单--这个功能与它无关。

"删除先前设定的待定订单。如果函数成功完成,返回TRUE。返回FALSE

如果该函数没有成功完成,则为调用GetLastError()来获取错误信息。"