Aiuta un principiante - Funzioni di giorno e ora - pagina 3

 

Scusa abstract_mind


Il formato del codice non lo mostra nel modo giusto qui, come hai descritto sopra.

 
EagleEye:

Come dovrebbe essere il codice?

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

Provate questo, spero di non essermi perso qualcosa a tarda notte.

So che le condizioni possono essere impacchettate in una sola linea, ma volevo che anche gli altri membri facessero qualche post LOL

infatti in questo modo (più linee separate) è più comprensibile, almeno per un principiante.

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

Provate questo. Spero di non essermi perso qualcosa a tarda notte.

So che le condizioni possono essere impacchettate in una riga, ma volevo che anche gli altri membri facessero qualche post LOL

Grazie meikel.


Ricevo ancora gli errori:


'bool' - punto e virgola previsto Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 1)
'(' - inizializzazione prevista Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 20)
'TimeDayOfWeek' - attesa virgola o punto e virgola Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 21)
')' - parentesi destra sbilanciata Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 52)
')' - parentesi destra sbilanciata Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 68)
'(' - inizializzazione prevista Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 20)
'TimeDayOfWeek' - attesa virgola o punto e virgola Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 21)
')' - parentesi destra sbilanciata Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 48)
')' - parentesi destra sbilanciata Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 52)
e poi continua con la ')' - parentesi destra sbilanciata

 
senza il codice completo non c'è più niente da fare per noi.
 
meikel:
senza il codice completo non c'è più niente da fare per noi.

Il codice completo è qui:



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

Il codice completo è qui:



Il resto del codice:


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

risolto

primo errore, staffa mancante

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


secondo, mancante && (il mio codice LOL

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

nessun errore, nessun avvertimento

Non lo faccio molto spesso, ma la TV oggi è terribile e così ho usato questo thread e l'enigma come intrattenimento

File:
debug.mq4  5 kb
 
meikel:

risolto

primo errore, staffa mancante


secondo, mancante && (il mio codice LOL

nessun errore, nessun avvertimento



meikel..... Funziona! Voglio dire "nessun errore" :)


Ora ho bisogno di testarlo domenica per vedere se funziona.


Grazie per il vostro aiuto.


Vi terrò informati dopo domenica.

 
EagleEye:

meikel..... Funziona! Voglio dire "nessun errore" :)


Ora ho bisogno di testarlo domenica per vedere se funziona.


Grazie per il tuo aiuto.


Ti tengo aggiornato dopo domenica.

puoi testarlo ora o domani, semplicemente cambiando i valori del giorno e dell'ora ...

 
meikel:

puoi testarlo ora o domani, semplicemente cambiando i valori del giorno e dell'ora ...

L'unica cosa che posso testare in questo momento è che l'EA non fa trading durante la settimana come faceva b 4.


E poi aspettare il gap di domenica e vederlo scambiare come dovrebbe fare.