该死的错误130到地狱 - 页 3

 
delcor wrote>>

旺格罗什

谢谢你的建议

你能帮助我了解一下吗?

这是否正确?

我做了一个自动跟踪的EA

如果(OrderType()==OP_SELL && OrderSymbol()==Symbol())

{
如果(OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); //放置一个TP和SL。
}
如果((OrderOpenPrice()-Ask)>(Point*TrailingStop))//放置TP
{
如果(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) //检查是否为真。
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) //如果是真的就修改订单。
Print("Error_Modify - ",GetLastError())。
else str=StringConcatenate("/n 我的票号是", OrderTicket(), " 我的止损设置是", DoubleToStr(Ask+Point*TrailingStop,Digits); // 新代码
}
}
}

这是我在另一篇文章中写的,解释了不同的方法。

>>这里有一个简单的解决方法,就是检查新的止损价格是否比旧的止损价格至少大1点。对于卖出订单,只需做相反的操作。

      if (OrderType() == OP_BUY)
      {      
         if(Bid-OrderOpenPrice() > (Point* TrailingStop))
         {       
            double oldStopLoss = OrderStopLoss();
            double newStopLoss = Bid-Point* TrailingStop;
            double nextStopLoss = oldStopLoss + Point; // Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79            
                       
            if( newStopLoss >= nextStopLoss) // checking that the new stoploss price is at least 1 point or greater then the old stoploss
            {                              
               OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss,0,0,Green);
               return;
            }
         }
      }


这里是我使用的完整函数。现在我想起来了,我本可以用一个更好的var名称,而不是nextStopLoss,而且我还应该在OrderModify()中加入错误检查。

另外,我的追踪止损函数是在一个可以同时开出多个订单的EA中,这就是为什么它有这些参数,以便我可以同时更新多个订单的追踪止损。

void CheckTrailingStop(int order_Ticket, int trailingStopValue)
{
   double oldStopLoss;
   double newStopLoss;
   double nextStopLoss;
   int _trailingStop = trailingStopValue;
   
   if ( order_Ticket < 0) return;
                                    
   if(OrderSelect( order_Ticket, SELECT_BY_TICKET, MODE_TRADES) == false)
   {
      Print("CheckTrailingStop() - OrderSelect returned the error of ", GetLastError());
      return;   
   }
         
   if (OrderType() == OP_BUY)
   {      
      if(Bid-OrderOpenPrice() > Point*_trailingStop)
      {       
         oldStopLoss = OrderStopLoss();
         newStopLoss = Bid-Point*_trailingStop;
         nextStopLoss = oldStopLoss + Point; // Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79            
                    
         if( newStopLoss >= nextStopLoss)
         {                              
            OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss,0,0,Green);
            return;
         }
      }
   }
                                             
   if (OrderType() == OP_SELL)
   {               
      if(OrderOpenPrice()-Ask > Point*_trailingStop)
      {
         oldStopLoss = OrderStopLoss();
         newStopLoss = Ask+Point*_trailingStop;
         nextStopLoss = oldStopLoss - Point; // Subtracting 1 point from oldStopLoss, i.e. 76.78 to 76.77
                    
         if( newStopLoss <= nextStopLoss || (OrderStopLoss() == 0))
         {                              
            OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss,0,0,Green);
            return;
         }
      }
   }
}

然后在我的start()函数中,我有。

void start()
{                      
   if ( validTimePeriod == false) return;
   if ( validTrailingStop == false) return;
        
   //---- Start Main program ----
   Main();
   
   if ( EnableHedging == true)
   {
      HedgeStopLossCheck();
      CheckHedges();
   }
   
   if ( TrailingStop > 0) CheckTrailingStop( currentOrderTicket, TrailingStop);               
           
   CheckWaiting();
   
   GetOpenTradeLots();   
      
   CheckIfCurrentOrder_Closed();
}

我把其他函数调用留在那里,只是为了让你看到,我喜欢尽可能地把我的代码划分为特定的函数。这使事情变得更容易。

祝你的EA好运。

 
vangrosh:

以下是我在另一个帖子中写的内容,解释了不同的方法。

>>这里有一个简单的解决方法,只需检查新的止损价是否比旧的止损价至少大1点。对于卖出订单,只需做相反的操作。


这里是我使用的完整功能。现在我想起来了,我本可以用一个更好的var名称,而不是nextStopLoss,而且我还应该在OrderModify()中加入错误检查。

另外,我的追踪止损函数是在一个可以同时开出多个订单的EA中,这就是为什么它有这些参数,以便我可以同时更新多个订单的追踪止损。

然后在我的start()函数中,我有。

我把其他函数调用留在那里,只是为了让你看到,我喜欢尽可能地把我的代码划分为特定的函数。这使事情变得更容易。

祝你的EA好运。

谢谢你 - 它看起来不错

那么,你是否将你的start()函数 放在EA的底部?

 
我也有一个问题,就是可怕的错误。问题是,我没有止损或止盈,它只是不能下挂单,离市场有很多点的距离,应该没有问题......
 
TheEconomist wrote>>
我也有一个问题,就是可怕的错误。问题是,我没有止损或止盈,它只是不能下挂单,离市场很多点,应该没有问题......

好的130的问题是,它表明(其中一个)一类或一组错误,并不导致任何即时修复。
你甚至可以修复一个问题,但它仍然存在

这里唯一出现的是一个错字?

也许你输入的是高于卖出价的买入限价,而你的目的是买入止损单?

顺便说一句

-BB-

 
BarrowBoy:

好的130的问题是,它指示(其中之一)一类或一组错误,并不导致任何即时修复。
你甚至可以修复一个问题,但它仍然存在

这里唯一出现的是一个错字?

也许你输入的是高于卖出价的买入限价,而你的目的是买入止损单?

顺便说一句

-BB-

我有一个选择操作类型的功能。

int SellOperation(double ToCompare)
  {
   int op;
   if (Bid> ToCompare)
     op=OP_SELLSTOP;
   if (Bid== ToCompare)
     op=OP_SELL;
   if (Bid< ToCompare)
     op=OP_SELLLIMIT;        
   return( op);   
  }
  
  
int BuyOperation(double ToCompare)
  { 
   int op;
   if (Ask> ToCompare)
     op=OP_BUYLIMIT;
   if (Ask== ToCompare)
     op=OP_BUY;
   if (Ask< ToCompare)
     op=OP_BUYSTOP;
   return( op);
  }

int WhatOperation(int operation, double ToCompare)
  { 
   if ( operation==OP_BUY)
     return( BuyOperation( ToCompare));
   if ( operation==OP_SELL)
     return( SellOperation( ToCompare));     
  }       

像这样。

09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,日报。开盘卖出水平2的塔架0 @ 0.8024而买入= 0.8016
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily:OrderSenderror 130
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,Daily:ReliableOrderSend错误 : 130 : 无效止损。


 

你好,经济学家

只是一些简单的问题...

1.在ToCompare上没有看到任何规范化,除非WhatOperation()被保证有规范化的实际给出。

2.2. 双重组合有问题--例如,"条件语句失败......[一筹莫展] if ( 1.4225 > 1.4225) is NOT TRUE!!!!!!

3.你是否遵循https://book.mql4.com/appendix/limits 中的指导?

问候

 

我一直在研究这个帖子,希望能用130解决我在"快速问题 " 中的错误。 订单发送功能和带打印功能的日记账都在那里,你们有人知道发生了什么吗?

谢谢。

鲍尔男孩

 

.

正如在.../24681上看到的那样

if( isBuying ) 
{ 
  if( stopLoss > 0)
  ACCTSL = Ask - ( stopLoss*Point* MyDig);

  if( takeProfit > 0)
  ACCTTP = Ask + ( takeProfit*Point* MyDig);
  // Buy
  ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, slippage, ACCTSL, ACCTTP, 
  nameEA, 16384,0,Red); 
  Print ("Stop Loss Value", ACCTSL);
  Print ("Take Profit Value", ACCTTP);

1.StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL);

SL,TP必须 买入价 至少StopLevel 点数。

见下文(**)


2.ACCTxx = NormalizeDouble(Ask ...(.),Digits)。


3.Print("Bid=",DoubleToString(Ask,Digits),", Ask=",DoubleToString(Bid,Digits))。


4.Print("Stop Loss Value",DoubleToString( ACCTSL,Digits),", stopLoss=",stopLoss)。
Print ("Take Profit Value", DoubleToString( ACCTTP,Digits),", takeProfit=",takeProfit);

为什么是DoubleToString()?Print() 只显示四个数字



Btw,我也会在某处至少 打印一次 Print("MyDig=",MyDig); 为什么?可能看起来很琐碎,但你会惊讶于围绕着这些简单的东西所产生的趣事!


5.通过在你的指尖上获得所有可用的信息并显示出来,你的所有问题都可以轻松解决。

然后,用好的老式的纸+铅笔, 可以看到 错误的理解在哪里。



(**)

参考:https://book.mql4.com/appendix/limits

StopLevel最小距离限制。

如果以下任何条件被破坏,交易操作将不会被执行。

订单类型 开盘价 止损(SL) 获利(TP)
买入
禁止修改 买入-SL 止损水平 TP-Bid StopLevel
卖出
禁止修改 SL-Ask StopLevel Ask-TP StopLevel
买入限价
问价-公开价格 止损点 公开价格-SL StopLevel TP-OpenPrice StopLevel
卖出限价
开盘价-出价 止损点 SL-OpenPrice StopLevel 开盘价-TP 止损点
买入止损
开盘价-叫价 止损点 开盘价-SL StopLevel TP-OpenPrice StopLevel
卖出止损
买入价-开盘价 止损点 SL-OpenPrice StopLevel 开盘价-TP StopLevel

 
fbj wrote>>

.

正如在.../24681上看到的那样

1.StopLevel= MarketInfo(Symbol(),MODE_STOPLEVEL);

SL,TP必须 买入价 至少StopLevel 点数。

见下文(**)


2.ACCTxx = NormalizeDouble(Ask ...(.),Digits);


3.Print("Bid=",DoubleToString(Ask,Digits),", Ask=",DoubleToString(Bid,Digits))。


4.Print("Stop Loss Value",DoubleToString( ACCTSL,Digits),", stopLoss=",stopLoss)。
Print ("Take Profit Value", DoubleToString( ACCTTP,Digits),", takeProfit=",takeProfit);

为什么是DoubleToString()?Print() 只显示四个数字



Btw,我也会在某个地方至少 打印一次 Print("MyDig=",MyDig); 为什么?可能看起来很琐碎,但你会惊讶于围绕着这种简单的东西所产生的趣事!


5.你的所有问题都可以通过在你的指尖获得所有可用的信息并显示出来 而轻松解决。

然后,用好的老式的纸+铅笔, 可以看到 错误的理解在哪里。



(**)

参考:https://book.mql4.com/appendix/limits

StopLevel最小距离限制。

如果以下任何条件被破坏,交易操作将不会被执行。

订单类型 开盘价 止损(SL) 获利(TP)
买入
禁止修改 买入-SL 止损水平 TP-Bid StopLevel
卖出
禁止修改 SL-Ask StopLevel Ask-TP StopLevel
买入限价
问价-公开价格 止损点 公开价格-SL StopLevel TP-OpenPrice StopLevel
卖出限价
开盘价-买入价 止损点 SL-OpenPrice StopLevel 开盘价-TP 止损点
买入止损
开盘价-叫价 止损点 开盘价-SL StopLevel TP-OpenPrice StopLevel
卖出止损
买入价-开盘价 止损点 SL-OpenPrice StopLevel 开盘价-TP StopLevel

真的不知道发生了什么事,为什么会这样?

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: OrderSend (Trender Beta Test ) failed with error #130

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: MyDig=10

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Take Profit Value1.43155, takeProfit=110

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Stop Loss Value1.42255, stopLoss=200

2009.08.05 14:32:26 Trender Beta Test EURUSD,H1: Bid=1.44255, Ask=1.44229







 
Bauer_Boy wrote>>

真的不知道发生了什么,为什么会这样?

真的是时候展示整个代码了。如果你犹豫不决,你可以使用PM。

我看到你的TP比较低,那么Bid