Ajude um novato - Funções de dia e hora - página 3

 

Desculpa abstract_mind


O formato do código não o mostra da maneira correta aqui, como você descreveu acima.

 
EagleEye:

Então, como deve ser o código?

//+------------------------------------------------------------------+
//| 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();

Tente isto. Espero não ter perdido algo tarde da noite.

eu sei que as condições podem ser empacotadas em uma linha, mas eu queria deixar que os outros membros também fizessem alguns cargos LOL

De fato, desta forma (mais linhas separadas) é mais compreensível, pelo menos para um novato.

// 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:

Tente isto. Espero que eu tenha perdido algo tarde da noite.

sei que as condições podem ser empacotadas em uma linha, mas eu queria deixar os outros membros também fazer alguns cargos LOL

Obrigado meikel.


Eu ainda recebo os erros:


bool - ponto-e-vírgula esperado Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 1)
(' - inicialização esperada Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 20)
TimeDayOfWeek' - vírgula ou ponto-e-vírgula esperado Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 21)
Z:\GabEA_From Mike GAPeaOnlySunday.mq4 (86, 52)
Z:\GabEA_From Mike GAPeaOnlySunday.mq4 (86, 68)
(' - inicialização esperada Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 20)
TimeDayOfWeek - vírgula ou ponto-e-vírgula esperado Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 21)
Z:\GabEA_From Mike GAPeaOnlySunday.mq4 (87, 48)
Z:\GabEA_From Mike GAPeaOnlySunday.mq4 (87, 52)
e depois continua com o ')' - parêntese direita desequilibrada

 
sem o código completo, não há mais nada a fazer por nós.
 
meikel:
sem o código completo, não há mais nada a fazer por nós.

O código completo está aqui:



//+------------------------------------------------------------------+
//|                                                        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:

O código completo está aqui:



O resto do código:


//+------------------------------------------------------------------+
//| 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);
  }
//+------------------------------------------------------------------+
 

resolvido

primeiro erro, parênteses ausentes

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


segundo, desaparecido && (meu código LOL

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

sem erros, sem aviso

eu não faço isso com muita freqüência, mas a TV hoje em dia é horrível e por isso usei esse fio e enigma como entretenimento

Arquivos anexados:
debug.mq4  5 kb
 
meikel:

resolvido

primeiro erro, parênteses ausentes


segundo, desaparecido && (meu código LOL

sem erros, sem advertência



meikel..... Funciona!! Quero dizer "sem erros" :)


Agora eu preciso testá-lo no domingo para ver se funciona.


Obrigado por sua ajuda.


Mantê-lo informado depois de domingo.

 
EagleEye:

meikel..... Funciona!! Quero dizer "sem erros" :)


Agora eu preciso testá-lo no domingo para ver se funciona.


Obrigado por sua ajuda.


mantê-lo informado depois de domingo.

você pode testá-lo agora ou amanhã, simplesmente mude os valores de dia e hora ...

 
meikel:

você pode testá-lo agora ou amanhã, simplesmente mudar os valores de dia e hora ...

A única coisa que posso testar agora mesmo é que a EA não está negociando durante a semana como costumava fazer b 4.


E depois esperar pela brecha de domingo e vê-la comerciar como deve ser.