帮助新手 - 日期和时间功能 - 页 3

 

对不起,Abstract_mind


在这里,代码的格式并没有像你上面描述的那样,以正确的方式显示出来。

 
EagleEye:

那么,代码应该是什么样子的呢?

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()

// oneliner start
bool sunday_cond = (TimeDayOfWeek(TimeCurrent())==0) && (Hour()>=23);
bool monday_cond = (TimeDayOfWeek(TimeCurrent())==1) && (Hour()<=15);
bool mytradeallowed = false;
if   (
       (OrdersTotal()==0)
        &&
       ( sunday_cond || monday_cond )
     )
      {
       mytradeallowed = true;  
      }


if (Bars<100 || IsTradeAllowed()==false || mytradeallowed==false){ return;}
// oneliner end

if( CalculateCurrentOrders(Symbol())==0) CheckForOpen();

试试这个。我希望我没有在深夜错过什么。

我知道这些条件可以装在一行里,但我想让其他成员也发一些帖子 LOL

的确,这样的方式(更多的独立行)更容易理解,至少对新手来说是这样。

// oneliner start
if (
     (Bars<100 || IsTradeAllowed()==false)
     || 
     (
      ( 
       (TimeDayOfWeek(TimeCurrent())==0) && (Hour()>=23)
       ||
       (TimeDayOfWeek(TimeCurrent())==1) && (Hour()<=15)
      )
      (OrdersTotal()==0)  
     )
    ) 
   { return;}
// oneliner end

//now in one line, i coulndt resist LOL
if ((Bars<100 || IsTradeAllowed()==false)||(((TimeDayOfWeek(TimeCurrent())==0) && (Hour()>=23)|| (TimeDayOfWeek(TimeCurrent())==1) && (Hour()<=15))(OrdersTotal()==0))){ return;}
 
meikel:

试试这个。我希望我没有在深夜错过什么。

我知道条件可以装在一行中,但我想让其他成员也做一些帖子,LOL

谢谢meikel。


我还是会出错。


'bool' - 预计分号 Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 1)
'(' - 初始化预期 Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 20)
'TimeDayOfWeek' - 预计是逗号或分号 Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 21)
')' - 不平衡的右括号 Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 52)
')' - 不平衡的右括号 Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 68)
'(' - 预计初始化 Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 20)
'TimeDayOfWeek' - 预计是逗号或分号 Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 21)
')' - 不平衡的右括号 Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 48)
')' - 不平衡的右括号 Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 52)
然后它继续用')' - 不平衡的右括号

 
没有完整的代码,就没有什么可以为我们做的了。
 
meikel:
如果没有完整的代码,就没有什么可以为我们做的了。

完整的代码在这里。



//+------------------------------------------------------------------+
//|                                                        GAPea.mq4 |
//+------------------------------------------------------------------+

extern double    Lots = 1;
extern int       iTakeProfit=10000;
extern int       iStopLoss=1000;
extern int       iTrailingStop=100;
extern int       min_gapsize=20;
extern int       MagicNumber=13;

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

//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0, sells=0;

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }

   if( buys>0) return( buys);
   else       return(- sells);
  } 


//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {

   double current_openprice=iOpen(Symbol(), PERIOD_M15, 0);
   double previous_highprice=iHigh(Symbol(), PERIOD_M15, 1);
   double previous_lowprice=iLow(Symbol(), PERIOD_M15, 1);
   double point_gap=MarketInfo(Symbol(), MODE_POINT);
   int spread_gap=MarketInfo(Symbol(), MODE_SPREAD);
   datetime current_time=iTime(Symbol(), PERIOD_M15, 0);
   

   if( current_openprice > previous_highprice + ( min_gapsize + spread_gap)* point_gap )
      {
      OrderSend(Symbol(),OP_SELL, Lots,Bid,3,Bid+ iStopLoss*Point,Bid- iTakeProfit*Point,"Sell#", MagicNumber,0,Red);
      }

    if( current_openprice < previous_lowprice - ( min_gapsize + spread_gap)* point_gap )
      {
      OrderSend(Symbol(),OP_BUY, Lots,Ask,3,Ask- iStopLoss*Point,Ask+ iTakeProfit*Point,"Buy#", MagicNumber,0,Green);
      }
   return;
}

Continues below (text to long)
 
EagleEye:

完整的代码在这里。



代码的其余部分。


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()

bool sunday_cond = (TimeDayOfWeek(TimeCurrent())==0) && (Hour()>=23);
bool monday_cond = (TimeDayOfWeek(TimeCurrent())==1) && (Hour()<=15);
bool mytradeallowed = false;
if (
     (Bars<100 || IsTradeAllowed()==false)
     || 
     (
      ( 
       (TimeDayOfWeek(TimeCurrent())==0) && (Hour()>=23)
       ||
       (TimeDayOfWeek(TimeCurrent())==1) && (Hour()<=15)
      )
      (OrdersTotal()==0)  
     )
    ) 
   { return;}

   if( CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   
   if ( CalculateCurrentOrders(Symbol()) != 0)
   {
      if(OrderType()==OP_BUY)
      {
         if(Bid-OrderOpenPrice()>Point* iTrailingStop)
         {
            if(OrderStopLoss()<Bid-Point* iTrailingStop)
            {
               OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point* iTrailingStop,OrderTakeProfit(),0,Blue);
            }
         }
      }
      if(OrderType()==OP_SELL)
      {
         if(OrderOpenPrice()-Ask > Point* iTrailingStop)
         {
            if(OrderStopLoss() > Ask+Point* iTrailingStop)
            {
               OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point* iTrailingStop,OrderTakeProfit(),0,Blue);
            }
         }
      }
   }

//----
    Comment("GAPea v1\n",
            ".................................\n",
            "FX Acc Server:",AccountServer(),"\n",
            "Date: ",Month(),"-",Day(),"-",Year()," Server Time: ",Hour(),":",Minute(),":",Seconds(),"\n",
            "Minimum Lot Sizing: ",MarketInfo(Symbol(),MODE_MINLOT),"\n",
            "Account Balance:  $",AccountBalance(),"\n",
            "Symbol: ", Symbol(),"\n",
            "Price:  ",NormalizeDouble(Bid,4),"\n",
            "Pip Spread:  ",MarketInfo("EURUSD",MODE_SPREAD),"\n",
            "...............................","\n",
            "Lots=" + Lots,"\n",
            "TakeProfit=" + iTakeProfit,"\n",
            "StopLoss=" + iStopLoss,"\n",
            "TrailingStop=" + iTrailingStop,"\n",
            "MagicNumber=" + MagicNumber,"\n");
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

已解决

第一个错误,缺少括号

int start()
{ // <- this one, i have overseen this in the first posts
bool


第二个错误,缺少&&(我的代码LOL

if (
     (Bars<100 || IsTradeAllowed()==false)
     || 
     (
      ( 
       (TimeDayOfWeek(TimeCurrent())==0) && (Hour()>=23)
       ||
       (TimeDayOfWeek(TimeCurrent())==1) && (Hour()<=15)
      )
      && /// <- i have forgot this
      (OrdersTotal()==0)  
     )
    ) 
   { return;}

没有错误,也没有警告

我不经常这样做,但今天的电视很糟糕,所以我用这个话题和谜语作为娱乐。

附加的文件:
debug.mq4  5 kb
 
meikel:

已解决

第一个错误,缺少括号


第二个错误,缺少&&(我的代码 LOL

没有错误,没有警告



meikel.....它成功了!我的意思是 "没有错误" :)


现在我需要在周日进行测试,看看它是否有效。


谢谢你的帮助。


周日之后再向你通报。

 
EagleEye:

meikel.....它成功了!我的意思是 "没有错误" :)


现在我需要在周日进行测试,看看它是否有效。


谢谢你的帮助。


周日之后再通知你。

你可以现在或明天测试它,只需改变日期和时间值...

 
meikel:

你可以现在或明天测试它,只需改变日期和时间值即可...

我现在唯一能测试的是,该EA在一周内不像以前那样进行交易。


然后等待周日的缺口,看看它是否像它应该做的那样交易。