Meu robô vai abrindo ordens normalmente, até de derrepente ele começa a abrir ordem em cima da média.
Não entendo de programação, mas esta função não faz disparar ordem constantemente?
" if(latest_price.last > maTickCerto && volumeVal[0]"
Olá, vou dar duas sugestões.
1) Coloque a definição dos manipuladores e o ArraySetAsSeries no OnInit()..., pois só é necessário defini-los uma vez !
maHandle = iMA(_Symbol,_Period,EMA_Periodo,0,MODE_EMA,PRICE_CLOSE); ArraySetAsSeries(maVal,true);
volumeHandle = iVolumes(_Symbol,_Period,VOLUME_REAL); ArraySetAsSeries(volumeVal,true);
2) Altere o código.
double maTickCerto = (MathRound(maCerto/ticksize)*ticksize); para double maTickCerto = NormalizeDouble(MathRound(maCerto/ticksize)*ticksize,_Digits);
Olá, vou dar duas sugestões.
1) Coloque a definição dos manipuladores e o ArraySetAsSeries no OnInit()..., pois só é necessário defini-los uma vez !
2) Altere o código.
Eu fiz isso, mas não deu certo, mesmo assim muito obrigado. Eu estou refazendo o código. Nesse trecho ele verifica se o resultado do último trade foi no GAIN ou no LOSS. O problema é que ele fica executando a cada tick. Queria verificar só uma vez isso, tem como?
//VERIFICA SE JÁ ATINGIU A META bool trade_money = true; if(GAIN_DIARIO > 0 || LOSS_DIARIO > 0) { datetime end = TimeCurrent(); datetime start = StringToTime("09:00"); HistorySelect(start,end); int deals =HistoryDealsTotal(); int returns = 0; double profit = 0; double loss = 0; for(int i=0; i<deals; i++) { ulong deal_ticket = HistoryDealGetTicket(i); if(deal_ticket>0) { string symbol =HistoryDealGetString(deal_ticket,DEAL_SYMBOL); datetime time =HistoryDealGetInteger(deal_ticket,DEAL_TIME); ulong order =HistoryDealGetInteger(deal_ticket,DEAL_ORDER); long order_magic =HistoryDealGetInteger(deal_ticket,DEAL_MAGIC); long pos_ID =HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID); ENUM_DEAL_ENTRY entry_type=(ENUM_DEAL_ENTRY)HistoryDealGetInteger(deal_ticket,DEAL_ENTRY); if(order_magic == MagicNumber) { //printf("Magic number ok"); } if(entry_type == DEAL_ENTRY_OUT) { returns++; double results = HistoryDealGetDouble(deal_ticket,DEAL_PROFIT); if(results>0) profit+=results; if(profit >= (GAIN_DIARIO+(loss*-1))) { texto="DESATIVADO. Meta atingida!!!"; trade_money = false; } if(results<0) loss+=results; if((loss+profit) <= (LOSS_DIARIO*-1)) { texto="DESATIVADO. Stop atingido!!!"; trade_money = false; } } } else { PrintFormat("We couldn't select a deal, with the index %d. Error %d", i,GetLastError()); } } /*PrintFormat("The total number of %d deals with a financial result. Profit=%.2f , Loss= %.2f", returns,profit,loss);*/ } //VERIFICA SE JÁ ATINGIU A META
Eu fiz isso, mas não deu certo, mesmo assim muito obrigado. Eu estou refazendo o código. Nesse trecho ele verifica se o resultado do último trade foi no GAIN ou no LOSS. O problema é que ele fica executando a cada tick. Queria verificar só uma vez isso, tem como?
Olá, acredito que pode lhe ajudar este artigo. Troque o ontick pelo OnTradeTransaction.
https://www.mql5.com/pt/docs/event_handlers/ontradetransaction
- www.mql5.com
Olá, acredito que pode lhe ajudar este artigo. Troque o ontick pelo OnTradeTransaction.
https://www.mql5.com/pt/docs/event_handlers/ontradetransaction
Consegui resolver...obrigado.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Meu robô vai abrindo ordens normalmente, até de derrepente ele começa a abrir ordem em cima da média.
Se eu deixo assim funciona normalmente:
if(latest_price.last > maCerto
Agora se deu deixo assim da erro:
if(latest_price.last > maTickCerto