Metatrader no Brasil - BMF Bovespa - página 20

 
Jonatan Allan Oliveira Souza:

Ok esterei vendo sim, mas o que eu fiz foi somente dar um check nas propriedades do gráfico de BT e a linha Ask aparece com essa diferença de 500 pontos. Então não é o código que gera essa linha de preço, mas sim o MT5. Alguém pode conferir pra mim? Noix...


O problema esta no código, não no terminal. 

 

Nossa e agora? O pior é que não sei onde pode estar esse erro. vou postar abaixo o meu OnInit(), OnDeInit() e OnTick(); Caso veja algo, por favor me aponte pra resolver isso :)


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() {

   EventSetTimer(1);
   TesterHideIndicators(true);

   RefreshRates();
   ticks = 1;
   ArraySetAsSeries(quotes, true); 
         
   if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) { 
      Alert("Autotrading in the terminal is disabled, Expert Advisor will be removed."); 
      ExpertRemove(); 
      return(-1); 
   } 

   if(AccountInfoInteger(ACCOUNT_TRADE_MODE) == ACCOUNT_TRADE_MODE_REAL) { 
      Alert("Expert Advisor cannot trade on a real account!"); 
      ExpertRemove(); 
      return(-2); 
   } 
   if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)) { 
      Alert("Trading on this account is disabled"); 
      ExpertRemove(); 
      return(-3); 
   } 
   
   stepvol       = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
   minvol        = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN);
   maxvol        = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
                                        
   if(open_order_D1) {
     handle_adx_D1     = iADX(_Symbol, period_D1, adx_period);
     handle_short_0_D1 = iMA(_Symbol, period_D1, short_period, shift_act_0, short_method, applied_price);
     handle_mean_0_D1  = iMA(_Symbol, period_D1, mean_period, shift_act_0, mean_method, applied_price);
     handle_long_0_D1  = iMA(_Symbol, period_D1, long_period, shift_act_0, long_method, applied_price);   
     handle_short_1_D1 = iMA(_Symbol, period_D1, short_period, shift_ant_1, short_method, applied_price);
     handle_mean_1_D1  = iMA(_Symbol, period_D1, mean_period, shift_ant_1, mean_method, applied_price);
     handle_long_1_D1  = iMA(_Symbol, period_D1, long_period, shift_ant_1, long_method, applied_price);   
     handle_short_2_D1 = iMA(_Symbol, period_D1, short_period, shift_ant_2, short_method, applied_price);
     handle_mean_2_D1  = iMA(_Symbol, period_D1, mean_period, shift_ant_2, mean_method, applied_price);
     handle_long_2_D1  = iMA(_Symbol, period_D1, long_period, shift_ant_2, long_method, applied_price);
     handle_sto_D1     = iStochastic(_Symbol, period_D1, Sto_Kperiod, Sto_Dperiod, Sto_slowing, Sto_method, Sto_price_field);
     handle_trix_D1    = iTriX(_Symbol, period_D1, Trix_period, Trix_applied_price);
     handle_trixma_D1  = iMA(_Symbol, period_D1, TrixMa_period, shift_act_0, TrixMa_method, handle_trix_D1);
     handle_bb_D1      = iBands(_Symbol, period_D1, BB_period, shift_act_0, ketner_fct, BB_applied_price); 
   }

   if(handle_short_1_D1 == INVALID_HANDLE || handle_mean_1_D1 == INVALID_HANDLE || handle_long_1_D1 == INVALID_HANDLE || handle_short_2_D1 == INVALID_HANDLE || handle_mean_2_D1 == INVALID_HANDLE || handle_long_2_D1 == INVALID_HANDLE) {
      PrintFormat("Falha ao criar o manipulador do indicador iMA_D1 para o símbolo %s/%s, código de erro %d",
                  _Symbol,
                  EnumToString(period_D1),
                  GetLastError());
      return(INIT_FAILED);
   }

   if(handle_sto_D1 == INVALID_HANDLE) {
      PrintFormat("Falha ao criar o manipulador do indicador iStochastic_D1 para o símbolo %s/%s, código de erro %d",
                  _Symbol,
                  EnumToString(period_D1),
                  GetLastError());
      return(INIT_FAILED);
   }
   
   if(handle_trix_D1 == INVALID_HANDLE) {
      PrintFormat("Falha ao criar o manipulador do indicador iTriX_D1 para o símbolo %s/%s, código de erro %d",
                  _Symbol,
                  EnumToString(period_D1),
                  GetLastError());
      return(INIT_FAILED);
   }
   
   if(handle_trixma_D1 == INVALID_HANDLE) {
      PrintFormat("Falha ao criar o manipulador do indicador iTriX_MA_D1 para o símbolo %s/%s, código de erro %d",
                  _Symbol,
                  EnumToString(period_D1),
                  GetLastError());
      return(INIT_FAILED);
   }
   
   if(handle_bb_D1 == INVALID_HANDLE) {
      PrintFormat("Falha ao criar o manipulador do indicador iBands_D1 para o símbolo %s/%s, código de erro %d",
                  _Symbol,
                  EnumToString(period_D1),
                  GetLastError());
      return(INIT_FAILED);
   }
     
   trade.SetTypeFilling(fill_type);
   trade.SetDeviationInPoints(dev);
   trade.SetExpertMagicNumber(magic_n);
   
   return(INIT_SUCCEEDED);
}
  
  
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
  EventKillTimer();
  IndicatorRelease(handle_adx_D1);
  IndicatorRelease(handle_short_1_D1);
  IndicatorRelease(handle_mean_1_D1);
  IndicatorRelease(handle_long_1_D1);
  IndicatorRelease(handle_short_2_D1);
  IndicatorRelease(handle_mean_2_D1);
  IndicatorRelease(handle_long_2_D1);
  IndicatorRelease(handle_sto_D1);
  IndicatorRelease(handle_trix_D1);
  IndicatorRelease(handle_trixma_D1);
  IndicatorRelease(handle_bb_D1);
  Comment("");
}

  
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() { 
   if(_StopFlag) return;
   
   //if(acc_info.Balance() <= 0) {
     //Print("Not Money to trade!");
     //ExpertRemove(); 
   //}
     
   copied = CopyTicks(_Symbol, mqltk_array, COPY_TICKS_ALL, 0, ticks); 
   if(copied < 0) Comment("Ticks could not be loaded. GetLastError(): ", GetLastError());
   else { CopyRates(_Symbol, _Period, 0, Bars(_Symbol, _Period), quotes); spread = quotes[shift_act_0].spread; }
      
   if(!SymbolInfoTick(_Symbol, mqltk)) {
     Alert("Error on get info Tick at Symbol: ", _Symbol, " with error: ", GetLastError());
     return;
   } else { ask = mqltk.ask; bid = mqltk.bid; last = mqltk.last;}
  
   if(lot <= minvol) lotmod = minvol;
   if(lot >= maxvol) lotmod = maxvol;  
   if(lotmod <= lot) lotmod = lot;
   if(lotmod > lot)  lotmod = lotmod;
   if(lotmod <= 0)   lotmod = 1.0;
        
   if(open_order_D1) {
     if(handle_adx_D1     != INVALID_HANDLE) if(!FillArraysFromBuffers_ADXW_D1(ADXBuffer_D1, DI_plusBuffer_D1, DI_minusBuffer_D1, handle_adx_D1, 1)) return;
     if(handle_short_1_D1 != INVALID_HANDLE) if(!FillArrayFromBuffer_IMA_D1(ShortBuffer_1_D1, shift_act_0, handle_short_1_D1, 1)) return;
     if(handle_mean_1_D1  != INVALID_HANDLE) if(!FillArrayFromBuffer_IMA_D1(MeanBuffer_1_D1, shift_act_0, handle_mean_1_D1, 1)) return;
     if(handle_long_1_D1  != INVALID_HANDLE) if(!FillArrayFromBuffer_IMA_D1(LongBuffer_1_D1, shift_act_0, handle_long_1_D1, 1)) return;
     if(handle_short_2_D1 != INVALID_HANDLE) if(!FillArrayFromBuffer_IMA_D1(ShortBuffer_2_D1, shift_act_0, handle_short_2_D1, 1)) return;
     if(handle_mean_2_D1  != INVALID_HANDLE) if(!FillArrayFromBuffer_IMA_D1(MeanBuffer_2_D1, shift_act_0, handle_mean_2_D1, 1)) return;
     if(handle_long_2_D1  != INVALID_HANDLE) if(!FillArrayFromBuffer_IMA_D1(LongBuffer_2_D1, shift_act_0, handle_long_2_D1, 1)) return;
     if(handle_sto_D1     != INVALID_HANDLE) if(!FillArraysFromBuffers_STO_D1(StochasticBuffer_D1, SignalBuffer_D1, handle_sto_D1, 1)) return;
     if(handle_trix_D1    != INVALID_HANDLE) if(!FillArrayFromBuffer_TRIX_D1(TrixBuffer_D1, handle_trix_D1, 1)) return;
     if(handle_trixma_D1  != INVALID_HANDLE) if(!FillArrayFromBuffer_IMA_TRIX_D1(TrixMABuffer_D1, shift_act_0, handle_trixma_D1, 1)) return;
     if(handle_bb_D1      != INVALID_HANDLE) if(!FillArraysFromBuffers_BB_D1(MiddleBuffer_D1, UpperBuffer_D1, LowerBuffer_D1, shift_act_0, handle_bb_D1, 1)) return; 
   }
   
   bbw_D1 = BBWidth(bbu_ant_1_D1, bbl_ant_1_D1, bbc_ant_1_D1);
      
   for(int i = 254; i >= 0; i--) Calculate_data_D1(i);
      
   order_buy_opend = false; order_sell_opend = false;
   
   if(OrdersTotal() < 1001) {
     for(int i = PositionsTotal() -1; i >= 0; i--) {
       string position_symbol = PositionGetString(POSITION_SYMBOL);                       
       ulong  magic           = PositionGetInteger(POSITION_MAGIC);                      
       ENUM_POSITION_TYPE type= (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);   

       if(position_symbol == _Symbol && magic == magic_n) { 
         if(type == POSITION_TYPE_BUY)  order_buy_opend  = true; else order_buy_opend  = false; 
         if(type == POSITION_TYPE_SELL) order_sell_opend = true; else order_sell_opend = false;
         break;
       }  
     } 
   }
   
   if(!order_buy_opend  && buy_ticket_D1  > 0) { buy_ticket_D1  = 0; flag_B_D1 = false; }
   if(!order_sell_opend && sell_ticket_D1 > 0) { sell_ticket_D1 = 0; flag_S_D1 = false; }
   
   if(!order_buy_opend && !order_sell_opend) be_active = false;         
   if((order_buy_opend || order_sell_opend) && !be_active && trigger_be > 0)    BreakEven(last);        
   if((order_buy_opend || order_sell_opend) &&  be_active && trigger_trail > 0) TrailingStop(last);
        
   if(buy_signal_D1 && !order_buy_opend && buy_ticket_D1 <= 0 && Time_Trade())    Buy(lotmod, last, 0, 0); 
   if(sell_signal_D1 && !order_sell_opend && sell_ticket_D1 <= 0 && Time_Trade()) Sell(lotmod,last, 0, 0);
  
   if((!buy_signal_D1 && order_buy_opend && buy_ticket_D1 > 0) || (!sell_signal_D1 && order_sell_opend && sell_ticket_D1 > 0)) Close_Order_D1();

}
  
 

Removi tudo o que estava dentro de OnTick(), e mesmo assim o spread está em 500 pontos.


 
Jonatan Allan Oliveira Souza:

Removi tudo o que estava dentro de OnTick(), e mesmo assim o spread está em 500 pontos.


Rapaz, nessa última imagem que vc postou que consegui perceber o que está acontecendo.

Em primeiro lugar o spread é de 50 pontos, e não de 500.

Você está fazendo um teste com o WDOK19 em janeiro de 2019 !!!

O WDOK19 tem vencimento em 1/5. Em janeiro, esse ativo não devia ter nenhuma liquidez. Só tinha os robôs dos market makers inserindo ofertas e um ou outro gato pingado fazendo hedging pra comércio exterior, ou alguma estratégia especulativa de longo prazo. 

Esses 50 pontos de spread que vc tá vendo aí devem ser do robô de um dos market maker, que fica mantendo uma oferta de compra e uma de venda com essa distância de 50 pontos.

Pra fazer um teste realista vc tem que usar sempre o contrato futuro com vencimento mais próximo, pois somente esse vencimento tem liquidez suficiente pra negociar.

Vc tá construindo um robô pra negociar contrato futuro e não sabe disso??? Tá perdidinho, hein? 

Use as séries perpétuas WIN$N, WIN@N, WIN$D, WIN@D, WIN$, ou WIN@ (nomes usados na Modal).

obs: algumas corretoras nomeiam essas séries como WINFUT** em vez de WIN**

Para entender as diferenças entre elas, leia este comentário aqui:  https://www.mql5.com/pt/forum/269032#comment_8219733


Média Móvel - Minicontrato
Média Móvel - Minicontrato
  • 2018.07.29
  • www.mql5.com
Galera, muito bom dia...
 

Obrigado pela dica e puxão de orelha. kkkkkkkkkkk

Vou ver sim. Sou novo  na b3.

 

Pessoal uma outra questão. Notei que quando fecha um dia e abre outro em gap a ordem fecha como tp no BT, mas o preço foi em direção oposta ao tp. Como resolvo isso e se tem como claro. valeuuuu


 
Anjinho:

Vou criar este tópico e me colocar a disposição, caso alguém tenha dúvidas na utilização do Metatrader 5 no Brasil.

 

Posso ajudar tanto na linguagem de programação, como na utilização do sistema em si.

 

Abraços,

Carlos Erbesdobler - Anjinho

Niterói - RJ 

 
tamiresalvv:
Olá, vc poderia me ajudar em saber onde vejo minhas ordens que estão abertas e como posso abri-las e fecha -las manualmente? Obrigada!
 
tamiresalvv:
Olá, vc poderia me ajudar em saber onde vejo minhas ordens que estão abertas e como posso abri-las e fecha -las manualmente? Obrigada!

Aba "exposição", clica com botão direito do mouse e seleciona "Fechar posição".

 
Algum indicador de analise de fluxo para opera mini? Obriggado
Razão: