[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 394

 

好的!!!!如果没有想要的订单,X仍然等于零,有想要的魔数,订单将被打开。如果有,X等于2,就不会再开单。

那么还有什么问题呢?

- 在第一时间,你使用OrderSelect函数 选择了一个不存在的订单。

在第一个循环中for(int Uy=OrdersTotal();Uy<=-1;Uy--)所以呢,好在循环运行更多的是希望,然后我把它改成了0,工作没有变化,这些都不是错误,它们没有变化,我道歉。

 
插入了一个警报,以跟踪周期的工作。我什么都不明白。这个变量,在循环中,只有一次,在开始的时候,数值为0,然后卖出止损0,买入止损130,这也是令人惊讶的,它们是对称的!!!!。而在2.5米的铭文后已经显示错误148(经纪人禁止许多订单)。
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X;       
//----
       for(int Uy=OrdersTotal();Uy==0;Uy--){
OrderSelect( Uy,SELECT_BY_POS );Alert ("Uy",Uy);
if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol())
{X ++;}}  
if (X<=2){
   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

哦,真是一派胡言。 而一开始,每一次的日期都不正确,大约49次。是的!!!! X总是保持为0,而且写得很好。在2个订单中。

 
PRICE_OPEN !!!!- 你不能使用这个价格!它只对指标起作用。使用买入或卖出。
 
Dimka-novitsek:

好的!!!!如果没有想要的订单,X仍然等于零,有想要的魔数,订单将被打开。如果有,X等于2,就不会再开单。

那么还有什么问题呢?

- 在第一时间,你使用OrderSelect函数选择了一个不存在的订单。

在第一个循环中for(int Uy=OrdersTotal();Uy<=-1;Uy--)所以呢,循环运行更多的是 希望,然后我把它改为0,工作没有变化,这些都不是错误,它们没有变化,我道歉。

它的运行时间怎么能超过

无论有多少订单,条件Uy<=-1不会立即得到满足,因为订单数量 立即大于或等于零。

 

帮助我找到错误的原因。

谢谢你

void TrailPositions()
{
//-----
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL*Point
      && BuySL*Point > OrderStopLoss())// && BuySL*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL*Point
      && SelSL*Point < OrderStopLoss())// && SelSL*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
    }
  }
}

 
PapaYozh:


如果蜱虫在运行,EA的图标是 "微笑",EA应该进行交易(即出现交易条件),但它没有进行交易,那么就有必要进行调试。

在EA的代码中安排price() 命令,特别是在那些被比较的地方,看看到底在比较什么。也许,你有一个关于类型为double 的变量相等的比较,比较结果总是假的,而你却认为这些变量是相等的。

非常感谢你的提示!!!。我的问题已经解决了。事实证明,我在下市场订单时需要的经纪人,即根据条件,不具备同时下止损位的能力。现在下的订单没有任何止损位,我在每个订单后立即设置止损位。我有一个问题:只有很少一部分订单被修改,而大部分订单在 "专家顾问 "部分显示如下结果。

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: open #30906670 sell 0.01 CLM1 at 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15: OrderModify函数的无效票据
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5: open #30906787 buy 0.01 ESM1 at 1337.50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15: OrderModify函数的无效票据

以下是代码文本。

{
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red)。


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point, Ask-TakeProfit*Point,0,Red)。
return(0);

}

而这是专家顾问启动后修改的第一个订单!

自然,我在代码中把顺序修改错了......请指教!

 
所以谁能帮助提供一个显示ZZ上最后两个极值的函数?
 
尊敬的程序员,我想请教如何改进专家顾问:有一个未平仓的头寸,一段时间后,有一个相同方向的重新开仓信号。我想只有在第一笔订单已经获利的情况下才填补第二笔信号。我通过比较余额大小和净值来实现这一点(如果净值高于余额,所开的订单就在加号中)。
你能建议一个代码来确定你的最后一个未平仓订单的利润/亏损吗?
 
以点为单位测量,是最可靠的。
 
Roger:
以点为单位测量,是最可靠的。
你能给我一个密码吗?