Ayuda a un novato - Funciones de día y hora - página 3

 

Lo siento abstract_mind


El formato del código no lo muestra de la manera correcta aquí como lo describiste arriba.

 
EagleEye:

¿Cómo debería ser el 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();

Intenta esto. Espero que no se me haya escapado algo a última hora de la noche.

se que las condiciones pueden ser empaquetadas en una linea, pero queria que los otros miembros tambien hicieran algunos posts LOL

de hecho, de esta manera (más líneas separadas) es más comprensible, al menos para un 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:

Intenta esto. Espero que no se me haya escapado algo a última hora de la noche.

Sé que las condiciones se pueden empaquetar en una línea, pero quería dejar que los otros miembros también hacer algunos puestos LOL

Gracias meikel.


Todavía tengo los errores:


bool' - punto y coma esperado Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 1)
'(' - inicialización esperada Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 20)
TimeDayOfWeek' - se esperaba una coma o un punto y coma Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 21)
Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 52)
')' - paréntesis derecho desequilibrado Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 68)
'(' - inicialización esperada Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 20)
TimeDayOfWeek' - se esperaba una coma o un punto y coma Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 21)
Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 48)
')' - paréntesis derecho desequilibrado Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 52)
y luego continúa con el ')' - paréntesis derecho desequilibrado

 
sin el código completo no hay nada más que hacer por nosotros.
 
meikel:
sin el código completo no hay nada más que hacer para nosotros.

El código completo está aquí:



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

El código completo está aquí:



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

resuelto

primer error, falta el paréntesis

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


segundo, faltaba && (mi 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;}

no hay errores, no hay advertencia

No hago esto muy a menudo, pero la televisión hoy es horrible y por eso he usado este hilo y el acertijo como entretenimiento

Archivos adjuntos:
debug.mq4  5 kb
 
meikel:

resuelto

primer error, falta el paréntesis


segundo, faltaba && (mi código LOL

no hay errores, no hay advertencia



meikel..... ¡¡¡Funciona!!! Me refiero a que no hay errores :)


Ahora tengo que probarlo el domingo para ver si funciona.


Gracias por tu ayuda.


Os mantendré informados después del domingo.

 
EagleEye:

meikel..... ¡¡Funciona!! Me refiero a que no hay errores :)


Ahora tengo que probarlo el domingo para ver si funciona.


Gracias por tu ayuda.


Te mantendré informado después del domingo.

puedes probarlo ahora o mañana, simplemente cambia los valores del día y la hora ...

 
meikel:

puedes probarlo ahora o mañana, simplemente cambia los valores del día y la hora ...

Lo único que puedo probar ahora mismo es que el EA no está operando durante la semana como solía hacer b 4.


Y luego esperar al gap del domingo y ver como comercia como debería hacerlo.