Modificar 2 parâmetros no Código EA MQL5

Other Traduction

Tâche terminée

Temps d'exécution 19 heures
Commentaires du client
Excelente desenvolvedor!
Commentaires de l'employé
Cliente excelente. Muita clareza no trabalho e cordialidade. Obrigado!

Spécifications

#include <Trade\Trade.mqh>
CTrade trade;
input double Lote=1;
input double step=2000;
input group  "Horário"
input string StartHour      = "09:00";     
input string StopHour       = "17:30";   
 double alt,baix;
double at,ask,bid,dif,r1,r2,s1,s2;
bool libera;
int n;
string inicialStartTime;
int OnInit()
  {
  
    if(inicialStartTime!=StartHour){
    
      inicialStartTime=StartHour;
     }

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
    ObjectDelete(0,"r1");
    ObjectDelete(0,"r2");
    ObjectDelete(0,"r3");
       ObjectDelete(0,"s1");
    ObjectDelete(0,"s2");
    ObjectDelete(0,"s3");
    Comment(" ");
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
      at=iClose(_Symbol,PERIOD_CURRENT,0);
      ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);

       if ( iTime(_Symbol,_Period,15)  >=  iTime(_Symbol,PERIOD_D1,0)   )  
        libera=true;
       else  libera=false; 

    n=0;
    for(int i = 0; i<=300; i++)
   {  if ( iTime(_Symbol,_Period,i) >= iTime(_Symbol,PERIOD_D1,0)  )
        n++;           
   }
   

 
   alt=iClose(_Symbol,_Period,n-1);
   baix=iOpen(_Symbol,_Period,n-1);
   for(int i = n-1; i>=n-15; i--)      
   { 
     if ( iTime(_Symbol,_Period,i) >= iTime(_Symbol,PERIOD_D1,0) && iTime(_Symbol,_Period,i) <= iTime(_Symbol,_Period,n-15)  )
           {
                  if ( iClose(_Symbol,_Period,i) > alt   )
                   {
                    alt=iClose(_Symbol,_Period,i);
                   } 
                  if ( iOpen(_Symbol,_Period,i) < baix  )
                     baix=iOpen(_Symbol,_Period,i);  
          }       
         
         
   }
   
   dif=alt-baix;
   
   r1=alt+dif;
   r2=alt+2*dif;
   s1=baix-dif;
   s2=baix-2*dif;
 
   if ( n>= 15 )
    {
           ObjectCreate(_Symbol,"r1",OBJ_HLINE,0,0,alt); 
           ObjectCreate(_Symbol,"r2",OBJ_HLINE,0,0,r1);
           ObjectCreate(_Symbol,"r3",OBJ_HLINE,0,0,r2);           
           ObjectSetInteger(0,"r2",OBJPROP_COLOR,clrGreen);
           ObjectSetInteger(0,"r3",OBJPROP_COLOR,clrGreen);           
           ObjectCreate(_Symbol,"s1",OBJ_HLINE,0,0,baix);
           ObjectCreate(_Symbol,"s2",OBJ_HLINE,0,0,s1);      
           ObjectCreate(_Symbol,"s3",OBJ_HLINE,0,0,s2);            
           ObjectSetInteger(0,"s2",OBJPROP_COLOR,clrGreen);
           ObjectSetInteger(0,"s3",OBJPROP_COLOR,clrGreen);
   }        
   
  
           
    if (  !PositionSelect(_Symbol) && n >= 15  && ProfitDoDia() == 0   )
      {  
        if (   iOpen(_Symbol,_Period,1) <= r1  && iClose(_Symbol,_Period,1) > r1    )  {
          trade.Buy(Lote,NULL,ask,alt-step*_Point,r2-step*_Point);
          Comment(" Compra:  ",trade.ResultRetcodeDescription(),"   às  ",TimeToString(TimeCurrent(),TIME_SECONDS)); 
          }              
        if (   iOpen(_Symbol,_Period,1) >= s1  && iClose(_Symbol,_Period,1) < s1    )  {
          trade.Sell(Lote,NULL,bid,baix+step*_Point,s2+step*_Point);  
          Comment(" Venda:  ",trade.ResultRetcodeDescription(),"   às  ",TimeToString(TimeCurrent(),TIME_SECONDS));  
          }            
      }         
           
   if ( !validTime() && PositionSelect(_Symbol)  )
     {   for(int i = PositionsTotal()-1; i>=0; i--)
         {  string symbol = PositionGetSymbol(i);
            ulong  tic = PositionGetTicket(i);
           if(  symbol == _Symbol   ) { 
            trade.PositionClose(tic);
            Comment("   Fechou pelo horário às:   ",TimeToString(TimeCurrent(),TIME_SECONDS));
              }
         } 
     
     }
  }  
 double ProfitDoDia() 
{
   double profit = 0;
   string CurrDate = TimeToString(TimeCurrent(), TIME_DATE);
   if (HistorySelect(StringToTime(CurrDate), TimeCurrent()))
   for (int i = HistoryDealsTotal(); i >= 0; i--) {
      const ulong Ticket = HistoryDealGetTicket(i);
      if(  HistoryDealGetString(Ticket, DEAL_SYMBOL) == _Symbol  )
         profit += HistoryDealGetDouble(Ticket, DEAL_PROFIT);    
   }
   return profit;
}   


bool validTime(){

   if(StartHour=="" || StopHour=="")
     return false;
     
   string atual=TimeToString(TimeCurrent(),TIME_MINUTES);
   
   if(atual>=StartHour && atual<StopHour){
     return true;
   }
   
   return false;
}

Esse EA leva em consideração as primeiras 15 velas, dentre essas primeiras 15 velas ele calcula qual foi o maior open e maior close e desenha um canal.

*Eu gostaria que ele calculasse os valores máximos dessas 15 velas. Ou seja quero um canal com as máximas das primeiras 15 velas.

Esse EA replica o canal desenhado anteriormente para cima e para baixo na intenção de realizar as entradas, e o parâmetro "Step" é a distância que ficará o S/L e o T/P.

*Eu gostaria de remover o "Step" do parâmetro T/P.


Répondu

1
Développeur 1
Évaluation
(135)
Projets
163
40%
Arbitrage
11
27% / 73%
En retard
25
15%
Gratuit
2
Développeur 2
Évaluation
(5)
Projets
5
0%
Arbitrage
0
En retard
1
20%
Gratuit
3
Développeur 3
Évaluation
(47)
Projets
79
11%
Arbitrage
4
25% / 75%
En retard
2
3%
Gratuit
4
Développeur 4
Évaluation
(36)
Projets
57
37%
Arbitrage
10
50% / 30%
En retard
20
35%
Travail
5
Développeur 5
Évaluation
(2)
Projets
2
0%
Arbitrage
0
En retard
0
Gratuit

Informations sur le projet

Budget
11+ USD
Pour le développeur
9.9 USD