Job finished
Execution time 19 hours
Feedback from customer
Excelente desenvolvedor!
Feedback from employee
Cliente excelente. Muita clareza no trabalho e cordialidade. Obrigado!
Specification
#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.
Responded
1
Rating
Projects
163
40%
Arbitration
11
27%
/
73%
Overdue
25
15%
Free
2
Rating
Projects
5
0%
Arbitration
0
Overdue
1
20%
Free
3
Rating
Projects
79
11%
Arbitration
4
25%
/
75%
Overdue
2
3%
Free
4
Rating
Projects
57
37%
Arbitration
10
50%
/
30%
Overdue
20
35%
Working
5
Rating
Projects
2
0%
Arbitration
0
Overdue
0
Free
Project information
Budget
11+ USD
For the developer
9.9
USD