Tudo sobre Programação, com código fonte exemplo - página 4

 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Forcas Vendedoras e compradoras

Joscelino Celso de Oliveira, 2019.03.15 01:58

//-- PRE-CALCULO VOLUMES DE TICKS NAS PONTAS COMPRADORA E VENDEDORA

   MqlTick tick_array[]; 
   CopyTicks(_Symbol,tick_array,COPY_TICKS_TRADE,0,10);
   MqlTick tick = tick_array[0];

if(hora>=hora_abertura && hora<=close_time)
  {
   if(( tick.flags&TICK_FLAG_BUY)==TICK_FLAG_BUY)          //-- Se for um tick de compra
      {
        sumVolBuy+=(long)tick.volume;
        
      }
   else if(( tick.flags&TICK_FLAG_SELL)==TICK_FLAG_SELL)   //-- Se for um tick de venda
      {
        sumVolSell+=(long)tick.volume;
        
      }
    }

Estou tentando capturar as somatórias de ticks nas pontas vendedoras e compradoras, conforme trecho do cogido a seguir.

Ocorre que não tenho confiança nos valores que estão sendo retornados. Alguém com sucesso neste tipo de abordagem e estrategia?


 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Separação de milhar - formatação

Angelo Bruno Hess, 2019.04.29 18:48

Fiz uma função par isto, segue o código:


string separarMilhar(long ws_numero)

{

   string ws_string = IntegerToString(ws_numero);

   

   int ws_length = StringLen(ws_string);

   

   string ws_string01 = "";

   string ws_string02 = ws_string;

   while (ws_length > 3)

   {

      ws_string01 = "." + StringSubstr(ws_string02,(ws_length - 3),3) + ws_string01;

      ws_string02 = StringSubstr(ws_string02,0,ws_length - 3);

      ws_length = StringLen(ws_string02);

      if (ws_length < 4)

      {

         ws_string01 = ws_string02 + ws_string01;

      }

   }

   ws_string = ws_string01;

   return ws_string;

}


 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Metatrader no Brasil - BMF Bovespa

Jonatan Allan Oliveira Souza, 2019.04.29 20:46

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

}
  

 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Metatrader no Brasil - BMF Bovespa

Jonatan Allan Oliveira Souza, 2019.04.29 20:46

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

}
  

 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Como fazer uma linha de um indicador passar a borda Direita do gráfico.

Marlon Viana, 2019.04.15 18:30

OBRIGADO! A solução foi colocar no OnCalculate: 

 PlotIndexSetInteger(0,PLOT_SHIFT,rates_total); //Assim sempre que for desenhado, a linha é empurrada para a última barra (Tick Atual).

 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Você tem alguma questão sobre Metatrader 5! Pergunte Aqui!

Vinicius Lehmann, 2019.04.14 16:10

Meu robô não encerra posição. Somente entra, não respeitando o SL e o TP definidos no request. Estou utilizando DEMO.


MqlTradeRequest request;
   MqlTradeResult result;
   MqlTradeCheckResult checkResult;
   
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(checkResult);
   
   request.action=TRADE_ACTION_DEAL;
   request.type=ORDER_TYPE_BUY;
   request.symbol=_Symbol;
   request.volume=lote;
   request.magic=EA_Magic;
   request.deviation=2.0;
   request.type_filling=ORDER_FILLING_RETURN;
   request.price=NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK), 2);
   request.sl=NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK) - 2.0, 2);
   request.tp=NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK) + TP, 2);

 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Você tem alguma questão sobre Metatrader 5! Pergunte Aqui!

jscatharina, 2019.04.20 01:36

ola, alguem pode me ajudar, o que de errado nesta linha em vermelho, iBarShift



double Resistance(int time_interval,bool fixed_tod,int hh,int mm,bool draw,int shift)

  {

   int start_index=shift;

   int count=time_interval/PeriodSeconds();

   if(fixed_tod)

     {

      datetime start_time;

      datetime Time[];

      ArraySetAsSeries(Time,true);

      CopyTime(Symbol(),Period(),0,Bars(Symbol(),Period())-count,Time);

      if(shift==0)

         start_time=TimeCurrent();

      else

         start_time=Time[shift-1];

      datetime dt=StringToTime(TimeToString(start_time,TIME_DATE)+" "+(string)hh+":"+(string)mm); //closest time hh:mm

      if(dt>start_time)

         dt-=86400; //go 24 hours back

      int dt_index = iBarShift(Symbol(), Period(), dt, true);

      datetime dt2 = dt;

      while(dt_index<0 && dt>Time[Bars(Symbol(),Period())-1-count]) //bar not found => look a few days back

        {

         dt-=86400; //go 24 hours back

         dt_index=iBarShift(Symbol(),Period(),dt,true);

        }

      if(dt_index<0) //still not found => find nearest bar

         dt_index =iBarShift(Symbol(), Period(), dt2, false);

      start_index=dt_index+1; //bar after S/R opens at dt


 

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Você tem alguma questão sobre Metatrader 5! Pergunte Aqui!

LeonardoKalyn, 2019.02.15 13:29

Eu tenho o seguinte código:


CSymbolInfo symbolInfo;

symbolInfo.Name(_Symbol);

void OnTick() {
  if(!symbolInfo.RefreshRates()){
    return;
  }

  double ask = symbolInfo.Ask();
  double bid = symbolInfo.Bid();

  printf("Ask - %f", ask);
  printf("Bid - %f", bid);
}


Quando rodo ele no back-test ele retorna os valores de ask e bid corretamente, porem quando rodo na conta demo, ele retorna 0.00000 para ambos.

A mesma coisa acontece com outras formas de pegar o ask e o bid, por exemplo utilizando o LastTick ou GetDoubleInfo. Alguém sabe o porque isso acontece e como posso resolver?

PS: outros valores como volume e last quote são retornados corretamente, apenas o ask e bid retornam como 0.

 

Sinceramente esta Thread é completamente inútil...

O propósito do Fórum é fomentar discussões a respeito do MT5/MT4, que é 90% é programação...

Portanto tópicos específicos com nomes de Threads são sempre bem-vindos...

Ter uma thread com este assunto vai virar um balde gigantesco de assuntos correlatos que nem o Google Search vai conseguir decifrar...

Sem contar que o mecaniscmo de Busca do site MQL5 é bem ruim...


;)

 
Flavio Jarabeck:

Sinceramente esta Thread é completamente inútil...

O propósito do Fórum é fomentar discussões a respeito do MT5/MT4, que é 90% é programação...

Portanto tópicos específicos com nomes de Threads são sempre bem-vindos...

Ter uma thread com este assunto vai virar um balde gigantesco de assuntos correlatos que nem o Google Search vai conseguir decifrar...

Sem contar que o mecaniscmo de Busca do site MQL5 é bem ruim...


;)

Olá Flavio Jarabeck, obrigado pelo contraponto, sempre bem-vindo, mas note que o objetivo desse tópico é reunir dúvidas com códigos fontes e não qualquer dúvida geral. 
A ideia é justamente reforçar a relevância de quem publica seus códigos fonte, de forma colaborativa e corajosa, no meu entender, ao invés de ficar em perguntas apenas onde os colaboradores e moderadores precisam "decifrar" o que foi feito por "engenharia reversa virtual".
Sds.,
Rogério Figurelli
Razão: