谁能帮助解决机器人的问题,为什么它不工作了? - 页 3

 
对于GIM
如果你只想开单,那么指定0而不是SL / TP。如果SL或TP为0,你将不得不在你的请求中输入0,如果你输入一个值,你将不得不计算出订单关闭的价格
 
Dmitriy Gizlyk:
对于GIM
如果你只想开单,那么指定0而不是SL / TP。对于未来,你必须检查:如果SL或TP是0,那么你必须在请求中指定0。 如果你指定一个值,那么计算订单的收盘价
我想让专家顾问根据所有交易的总利润来开仓和平仓....。
 
AdikAmir:

外来的双倍Lots=0.1。
外来的双倍FastMAPeriod=5。
Extern int FastMAMethod=0; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
外部int FastMAPrice=0; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
外置 int SlowMAPeriod=75;
外部intn SlowMAMethod=3; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
外部int SlowMAPrice=3; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
外置 int TP=500; //takeprofit
extern int SL=250; //stop loss
双重提法。

int start(){

double fast_ma1=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,1)。
double slow_ma1=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod, SlowMAPrice,1)。
double fast_ma2=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,2)。
double slow_ma2=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod, SlowMAPrice,2)。

如果(OrdersTotal()==0)
{
如果(fast_ma1>slow_ma1 && (fast_ma2<slow_ma2))
{ ticet = OrderSend(Symbol(,OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);
如果(ticet==0)Print("ERROR")。
}
如果(slow_ma1>fast_ma1 && (slow_ma2<fast_ma2))
{
ticet = OrderSend(Symbol(,OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE)。
如果(ticet==0)Print("ERROR")。
}

}

return(0);
}




阅读日志。也许那里有关于在编译时没有检测到的错误的信息。

这里有一个错误 OrderSend(Symbol(,OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE)。

你需要做以下工作 OrderSend(Symbol(),OP_SELL,Lots,Bid,Bid,3,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE) 。

当你卖出时,止损应该在当前价格之上,而拿货则在下面。 在你的案例中,恰恰相反,你把止损放在价格之下,而拿货则在上面。

 
GIM:
我想让专家顾问按所有交易的总利润开仓和平仓....。

在这种情况下,开仓时,把SL=0,TP=0。

为了关闭一个头寸,我们需要在每个tick上将获得的利润与设定的值进行比较。而当利润达到指定值时,我们需要通过OrderClose(....)关闭循环中的所有订单。

就确定当前的利润而言,根据所设定的任务,可能会有变化。如果你看账户的利润,你可以简单地采取AccountProfit(),但更费力的方式可能是通过一个循环(那么我们可以只计算必要订单的利润)。

   double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
Dmitriy Gizlyk:

在这种情况下,开仓时,把SL=0,TP=0。

为了关闭一个头寸,我们需要在每个tick上将获得的利润与设定的值进行比较。而当利润达到指定值时,我们需要通过OrderClose(....)关闭循环中的所有订单。

就确定当前的利润而言,根据所设定的任务,可能会有变化。如果你看每个账户的利润,你可以简单地采取AccountProfit(),但可能更费力的方式是通过一个周期(那么你可以只计算必要订单的利润)。

extern double  lots       = 0.01;
extern int  stop_loss      = 0;  
extern int take_profit    = 0;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, Bid - stop_loss * Point, Ask + take_profit * Point,  "", 1, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, Ask+ stop_loss * Point, Bid - take_profit * Point,  "", 1, 0, clrRed);      
}
   return(0); 
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
GIM:
如果止损和止盈的货币是存款的货币
extern double  lots       = 0.01;
extern int  stop_loss      = 10;  /* Указываем в валюте депозита */
extern int take_profit    = 20;   /* Указываем в валюте депозита */
extern int Magic          = 1;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, 0, 0,  "", Magic, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, 0, 0,  "", Magic, 0, clrRed);      
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 int requot=0;
 if(profit>=take_profit || (-profit)>=stop_loss)
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),50,clrRed))
               requot=0;
            else
              {
               requot++;
              }
         if(requot>10)
              {
               i++;
               requot=0;
              }
            i--;
        }
     }
   return(0); 
}
 
Dmitriy Gizlyk:
如果在存款货币 中指定了止损和止盈

for(int i=0;i<OrdersTotal();i++)

错误:"i"

 
谁知道呢?
extern int Magic          = 1;


что означает??
[删除]  
GIM:
谁知道呢

专家顾问订单的标识符,这样它就只对自己的订单起作用。

 
Vladimir Zubov:

专家顾问订单的标识符,这样它就只对自己的订单起作用。

你的意思是,只用自己的订单....