Aidez un débutant - Fonctions jour et heure - page 3

 

Désolé abstract_mind


Le format du code ne le montre pas de la bonne façon ici, comme tu l'as décrit ci-dessus.

 
EagleEye:

Alors, à quoi devrait ressembler le code ?

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

Essayez ceci. J'espère que je n'ai pas manqué quelque chose tard dans la nuit.

Je sais que les conditions peuvent être emballées en une seule ligne, mais je voulais laisser les autres membres faire quelques posts LOL.

En effet, de cette façon (plus de lignes séparées) c'est plus compréhensible, au moins pour un débutant.

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

Essayez ceci. J'espère que je n'ai pas manqué quelque chose, tard dans la nuit.

Je sais que les conditions peuvent être regroupées en une seule ligne, mais je voulais laisser les autres membres faire quelques posts LOL.

Merci meikel.


Je reçois toujours les erreurs :


'bool' - point-virgule attendu Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 1)
'(' - initialisation attendue Z:\ForexTrading\GabEA_From MikeGAPeaOnlySunday.mq4 (86, 20)
TimeDayOfWeek' - virgule ou point-virgule attendu Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 21)
')' - parenthèse droite non équilibrée Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 52)
')' - parenthèse droite non équilibrée Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (86, 68)
'(' - initialisation attendue Z:\ForexTrading\GabEA_From MikeGAPeaOnlySunday.mq4 (87, 20)
TimeDayOfWeek' - virgule ou point-virgule attendu Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 21)
')' - parenthèse droite non équilibrée Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 48)
')' - parenthèse droite non équilibrée Z:\ForexTrading\GabEA_From Mike\GAPeaOnlySunday.mq4 (87, 52)
et ensuite il continue avec le ')' - parenthèse droite déséquilibrée.

 
sans le code complet, il n'y a plus rien à faire pour nous.
 
meikel:
sans le code complet il n'y a plus rien à faire pour nous.

Le code complet est ici :



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

Le code complet est ici :



Le reste du code :


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

résolu

première erreur, parenthèse manquante

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


deuxième erreur, && manquant (mon code LOL)

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

aucune erreur, aucun avertissement

Je ne fais pas ça souvent, mais la télé aujourd'hui est horrible et j'ai utilisé ce fil de discussion et cette énigme comme divertissement.

Dossiers :
debug.mq4  5 kb
 
meikel:

résolu

première erreur, parenthèse manquante


deuxième erreur, && manquant (mon code LOL)

pas d'erreur, pas d'avertissement



meikel..... Ça marche ! Je veux dire "aucune erreur" :)


Maintenant, je dois le tester dimanche pour voir s'il fonctionne.


Merci pour votre aide.


Je vous tiendrai au courant après dimanche.

 
EagleEye:

meikel..... Ça marche ! Je veux dire "aucune erreur" :)


Maintenant je dois le tester dimanche pour voir si ça marche.


Merci pour votre aide.


Je vous tiendrai au courant après dimanche.

Vous pouvez le tester maintenant ou demain, il suffit de changer les valeurs du jour et de l'heure ...

 
meikel:

vous pouvez le tester maintenant ou demain, il suffit de changer les valeurs du jour et de l'heure ...

La seule chose que je peux tester pour l'instant est que l'EA n'effectue pas de transactions pendant la semaine comme il le faisait avant b 4.


Et ensuite, attendez le gap du dimanche et voyez-le trader comme il devrait le faire.

Raison: