[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 1121

 

白天/晚上好

我试图用这种原始的方法来逆转交易,但这种方法不起作用(专家顾问按点计算)。

if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // 确定是否有买单 && 是否有蜡烛收盘价低于低位

{

CheckForClose(); // 关闭订单。

OpenSell(); // 打开一个卖出 订单

返回。

}

请告知我哪里做错了?我也很感谢那些能让我弥补这一差距的链接。

 

dzhini:

我正试图用这种原始的方式进行反向交易,但这并不奏效(专家顾问按点计算)。

如果(CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) //它检查是否有买入订单&&如果蜡烛收于底部水平以下。


在这个函数中,你可能会计算所有的订单。
 

我如何确定时间1和时间2之间有多少分钟?

datetime Time_1     = D'2011.01.12 13:30';
datetime Time_2     = D'2011.01.05 10:30'; 

минут = Time_1- Time_2
 
sergeev:
这可能是你计算所有订单的函数。这应该是购买 。

这是一个标准函数。

int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0。
for(int i=0;i<OrdersTotal();i++)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
如果(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
如果(OrderType()==OP_BUY) buys++;
如果(OrderType()==OP_SELL) sells++;
}
}

if(buys>0) return(buys)。
否则返回(-sells)。

}

如果>0则为买单,如果<0则为卖单 ))))

 
Eliza:

我如何确定时间1和时间2之间有多少分钟?

的差值,返回秒数。

除以60,就得到了分钟数。

 
逆转交易。改变了专家顾问的结构 - 删除了功能。如何在特定条件下使其在一根蜡烛上收盘和开盘。

extern double TP = 70; //takrofit
extern double SL = 0; //stoploss
extern double Lot = 0.1;

double HighLevel;
double LowLevel;
int resBuy=0;
int resSell=0;


//+
//| expert initializationfunction|
//+ ------------------------------------------------------------------+
int init()
{
HighLevel=High[1];
LowLevel=Low[1];
return;
}

//+------------------------------------------------------------------+
//|专家函数 |
//+------------------------------------------------------------------+

void start()
{

if(Bars<100 && IsTradeAllowed()==false) return;


if(resBuy==0 && resSell==0 && CheckBreak() ==-)
{
resSell=OrderSend(Symbol(,OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}

if(resBuy==0 && resSell==0 && CheckBreak()==-& CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask+TP,",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}

if(resBuy!=0 && resSell==0 && Close[1]<LowLevel) //------------------------------------- 对这部分感兴趣:在一个柱子上收盘和开盘
{
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue);
// while(! IsTradeAllowed()Sleep(100);
resSell=OrderSend(Symbol(,OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}

if(resSell!=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- 对这部分感兴趣:在一个柱子上收盘和开盘
{
bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red);
// while(! IsTradeAllowed()

Sleep(100);
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}

//----------------------------------------------------------------- Check Low&。High break (Func)

double CheckBreak()
{
double candle=Open[1]-Close[1];

if(candle>0 && Low[1]<LowLevel) return(-1);
if(candle<0 && High[1]>HighLevel) return(1);
}
 
sergeev:

差异返回秒数。

除以60,就可以得到分钟数。

我只是得到日期1971.03.04 12:00,也许这需要转换?

extern datetime Time_1     = D'2011.01.12 13:30'; 
extern datetime Time_2     = D'2011.01.05 10:30'; 

bool   Commentari      = true;

int start()
  {

if (Commentari){
 Comment(
         "\n Дата  =  " + TimeToStr((Time_1-Time_2)/60)," минут",
      
         "\n==============================");}
   return(0);
  }
 
Eliza:

我只是得到了日期,也许它需要被转换?

首先,你为什么要乘以60?

第二 - 如果你想把分钟数显示为一个时间,如00:15。
你不需要除以或乘以60。

 
sergeev:

首先,你为什么要乘以60?

第二--如果你想在屏幕上把分钟数表示成一个时间,比如00:15。
你不需要除以或乘以60。

是的,我纠正了分部,但年份是1970.01.01 02:51

我不需要它的屏幕,我只想找到没有日期的分钟数,对于那个时间间隔....。

即使不进行除法,也会输出日期,还是应该减去函数所依据的日期?

  • datetime 是日期和时间,是一个无符号的整数,包含1970年1月1日0时以来的秒数。
  • extern datetime Time_1     = D'2011.01.12 13:30'; 
    extern datetime Time_2     = D'2011.01.05 10:30'; 
    
    datetime me_2     = D'1970.01.01 00:00'; 
    
    bool   Commentari      = true;
    
    int start()
      {
    
    if (Commentari){
     Comment(
             "\n Дата  =  " + TimeToStr(me_2-(Time_1-Time_2))," минут",
          
             "\n==============================");}
       return(0);
      }

  • 如果我减去日期1970.01.01 02:51,它就会抛出无效的时间,我只需要从这个时间间隔中得到的分钟数,如果它在这个间隔中的25000分钟,我需要这个数字25000......类似的东西(
  • 还是不可能通过μl语言得到这个?
 

如果你只是想要一个分钟数,你完全没有理由使用TimeToStr

时间是一个正常的int数字。

或者,只使用TimeToStr TIME_MINUTE 标志

原因: