我如何设置小于5点的TP? - 页 5

 
你的意思是这种方式?
extern double TPforBuys=1;
extern double TPforSells=1;
extern double TimeForEA=120;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
for(int a=OrdersTotal()-1;a>=0;a--)

double TPbuy = TPforBuys / 10000;
if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_BUY && OrderSymbol()==Symbol() )
double TPB=OrderOpenPrice()+ TPbuy;

// Close Buys
if(Bid>TPB)
{
   
      if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_BUY && TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60)  &&
      OrderSymbol()==Symbol() )
         if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
            Print("OrderClose failed, error: ", GetLastError());
            }



double TPsell = TPforSells / 10000;
if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_SELL && OrderSymbol()==Symbol() )
double TPS=OrderOpenPrice()- TPsell;



// Close Sells
if(Ask<TPS)
{
   
      if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_SELL &&  TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60) &&
      OrderSymbol()==Symbol() )
         if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
            Print("OrderClose failed, error: ", GetLastError());
            }


return(0);
}
 
ats:
你的意思是这种方式?
我不知道 ......这能满足你的要求吗?
 
RaptorUK:
我不知道......这能满足你的要求吗?
不,它没有!这又是不正确的!
 
也许你可以解释一下你到底想做什么? 为了我的利益,为了onewithzachy 的利益,当然也为了你的利益。
 

当然了!对不起!我没有考虑到这一点。我没有考虑过这个问题!

我们做这个EA是为了剥头皮!EA应该以1个点的利润关闭每个剥头皮的订单为了不关闭长期订单,我们使用了OrderOpenTime()命令。剥头皮的订单是手动设置的!它的作用类似于TP,但只有1个点的利润!

谢谢你

 
啊,我明白了,你不想让EA关闭非缩放的短线订单。
 
RaptorUK:
啊,我明白了,你不希望EA关闭非缩放的短线订单 . . .
正是如此!
 

好吧,一些评论......

1.你的循环几乎什么都没做,你需要把你想在循环中做的事情用大括号{ }括起来 . .

2.你有两个OrderSelect()的调用,如果你把所有东西都放到循环中,你只需要一个 ...

3. 平仓买入部分应该只对买入订单执行,平仓卖出应该只对卖出订单 执行。

4.你的1点利润是针对4位数货币对的硬编码,所以它对美元指数等货币对不起作用。

 

也许像这样的事情......。

extern double TPforBuys=1;
extern double TPforSells=1;
extern double TimeForEA=120;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
for(int a=OrdersTotal()-1;a>=0;a--)
   {
   double TPbuy = TPforBuys / 10000;
   
   if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
   OrderType()==OP_BUY && OrderSymbol()==Symbol() )  // order type and Symbol checked here
      {
      double TPB=OrderOpenPrice()+ TPbuy;
      
      // Close Buys
      if(Bid>TPB)
         {
         
         if( TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60) )  // no need to check type and symbol here
            if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
               {
               Print("OrderClose failed, error: ", GetLastError());
               }
            else continue;        // if order has been closed move to the next position, no need to check if it's a SELL
         } // end of if(Bid>TPB)
      } // end of if( OrderSelect(a 
      
   double TPsell = TPforSells / 10000;
   
   if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
   OrderType()==OP_SELL && OrderSymbol()==Symbol() )
      {
      double TPS=OrderOpenPrice()- TPsell;

      // Close Sells
      if(Ask<TPS)
         {
   
         if( TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60) )
            if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
               Print("OrderClose failed, error: ", GetLastError());
            
         } // end of if(Ask<TPS)
      } // end of if( OrderSelect(a
   } // end of for(int a=OrdersTotal()

return(0);
}
 
RaptorUK:

也许像这样的事情......。

顺便说一下,我还没有编译或测试这段代码 .. .