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

Rogerio Figurelli
Moderador
61280
Rogerio Figurelli  

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

Dois EA´s, dois Profit´s

sergiomt, 2019.08.25 16:34

Voltando ao tema. Estou estudando um EA que opera dois ativos ao mesmo tempo identificados como Symbol0 e Symbol1 no trecho do código abaixo. Minha intenção é abrir compras somente naquele em que o seu Profit esteja abaixo de zero (dando prejuízo). Lá em cima nos inputs eu coloquei double pos_profit0=0; e double pos_profit1=0; e coloquei também o bloco abaixo GET SYMBOL PROPERTIES. Mas não funciona, não abre ordem. Se eu não colocar o pos_profit aí volta a abrir ordens.  Como corrijo isso ? 


 if(Use_Symbol0 && && pos_profit0<0)

         OpenPosition(m_symbols0.Name(),PosType,Symbol0_Lot);

 if(Use_Symbol1 && && pos_profit1<0)

         OpenPosition(m_symbols1.Name(),PosType,Symbol1_Lot);


//+------------------------------------------------------------------+

//| GETTING SYMBOL PROPERTIES                                        |

//+------------------------------------------------------------------+

void GetPositionProperties()

  {

   if(Use_Symbol0)

   pos_profit0 =PositionGetDouble(POSITION_PROFIT);


   if(Use_Symbol1)

   pos_profit1 =PositionGetDouble(POSITION_PROFIT);

  }

//+------------------------------------------------------------------+


Rogerio Figurelli
Moderador
61280
Rogerio Figurelli  

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

Abrir nova posição apenas num novo Candle

Rogerio Figurelli, 2019.09.06 18:15

Olá  tito.vinicius, examinando seu código e o retorno do método isNewBar() no referido documento, me parece que você está com a lógica invertida.

Ou seja, ao invés de ...

!current_chart.isNewBar(new_time)

deveria ser ...

current_chart.isNewBar(new_time)

ou ainda (conforme o método usado, retornando um inteiro ao invés de um booleano) ...

current_chart.isNewBar()>0


Sds.,
Rogério Figurelli


Rogerio Figurelli
Moderador
61280
Rogerio Figurelli  

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

trade.Buy/Sell somente funciona com Mini Índice

Rogerio Figurelli, 2019.09.16 01:29

Olá  ThunderCaS, a função em tese é simples, mas recomendo você agregar outras funções da classe CTrade para análise dos erros, como por exemplo a ResultRetcode(), para melhor análise dos códigos de retorno do servidor nesse ou em qualquer outro caso futuro (abaixo).

ResultRetcode
https://www.mql5.com/pt/docs/standardlibrary/tradeclasses/ctrade/ctraderesultretcode

Códigos de Retorno do Servidor de Negociação
https://www.mql5.com/pt/docs/constants/errorswarnings/enum_trade_return_codes

Sds.,
Rogério Figurelli

Rogerio Figurelli
Moderador
61280
Rogerio Figurelli  

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

Dificuldade em Codificar Martingale.

Henrique Araújo, 2019.09.07 07:37

Olá! Estou desenvolvendo um pequeno EA, baseado em alguns indicadores que tenho aqui. Quero adicionar a função Martingale nele, porém, do jeito que está, ele simplesmente abre lotes de forma crescente, e não faz o martingale apenas após o loss.

Aqui está o resultado do meu codigo > Screenshot_4


//+------------------------------------------------------------------+
//|                                                        FX_EA.mq4 |
//|                                                  Henrique Araújo |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Henrique Araújo"
#property link      ""
#property version   "1.00"
#property strict


extern string Note="PZ_DayTrading EA";
extern double LotSize=0.01;
double MgSize = LotSize;
extern int TakeProfit=30;
extern int StopLoss=100;
extern int Slippage=3;
extern int MagicNumber= 333456;
extern string Note2 = "Martingale";
extern bool UseMartingale = false;
extern double Martingale_Ad = 0.02;



double FL03_buy_signal=0;
double FL03_sell_signal=0;
double joker_filter=0;
double broom_sell_signal=0;
double broom_buy_signal=0;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void getindi()
  {
   FL03_buy_signal=iCustom(NULL,0,"FL03",0,1);
   FL03_sell_signal=iCustom(NULL,0,"FL03",1,1);
   joker_filter=iCustom(NULL,0,"JokerFilter",0,1);
   broom_sell_signal=iCustom(NULL,0,"broom",1,1);
   broom_buy_signal=iCustom(NULL,0,"broom",2,1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void openbuy()
  {
   OrderSend(_Symbol,OP_BUY,LotSize,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"FX_EA by Henrique",MagicNumber,0,clrAqua);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void opensell()
  {
   OrderSend(_Symbol,OP_SELL,LotSize,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"FX_EA by Henrique",MagicNumber,0,clrMagenta);
  }




bool mgbuy=true;
bool confmgbuy=false;
double TP_buy;
double SL_buy;

bool mgsell=true;
bool confmgsell=false;
double TP_sell;
double SL_sell;
void entry_order()
  {   
    if(UseMartingale==true){
    if(FL03_buy_signal!=0  && broom_buy_signal>0 &&joker_filter==1.0 && OrdersTotal()==0 && mgbuy==true)
        {
         openbuy();
         TP_buy = Bid+TakeProfit*Point;
         SL_buy = Bid-StopLoss*Point;
         confmgbuy=true;
         mgbuy=false;
        }
        if(confmgbuy=true){
        if(Bid>TP_buy){
        LotSize=MgSize;
        confmgbuy=false;
        mgbuy=true;
        }
        if(Bid<SL_buy){
        LotSize=LotSize+Martingale_Ad;
        confmgbuy=false;
        mgbuy=true;
        }
        }
        
      if(FL03_sell_signal!=0 && broom_sell_signal<0 &&joker_filter==2147483647.0 && OrdersTotal()==0 && mgsell==true)
        {
         opensell();
         TP_sell = Bid+TakeProfit*Point;
         SL_sell = Bid-StopLoss*Point;
         confmgsell=true;
         mgsell=false;
        }
        if(confmgsell=true){
        if(Bid<TP_sell){
        LotSize=MgSize;
        confmgsell=false;
        mgsell=true;
        }
        if(Bid>SL_sell){
        LotSize=LotSize+Martingale_Ad;
        confmgsell=false;
        mgsell=true;
        }
    
    }
   
}
}
  


int last_bars;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   getindi();
   if(last_bars!=Bars)
     {
      entry_order();
      last_bars=Bars;
     }

  //Comment(joker_filter);
  }
//+------------------------------------------------------------------+

Rogerio Figurelli
Moderador
61280
Rogerio Figurelli  

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

Codigo priorcote max e minina do dia

Nelson Silva, 2019.09.13 07:45

    Hello, amigo!

    

  //Máximas:
  
  iHigh(NULL, PERIOD_D1, 0); //Máxima do dia
  iHigh(NULL, PERIOD_D1, 1); //Máxima do dia anterior

   
  

   

   Sugiro que consulte a documentação, questões como essa estão à vista lá.

   FLW!


Rogerio Figurelli
Moderador
61280
Rogerio Figurelli  

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

Volume do preço

prsc, 2019.08.30 18:48

Boa tarde.

Estou tentando fazer um indicador quase parecido com o volume por preço, mas sem aquelas áreas de "poc, vah, val".

Preciso apenas capturar o preço com o maior volume em valor financeiro.

Tentei fazer algo de forma simples, mas está dando o erro "array ou of range", mas no modo que fiz não sei como resolver isso e nem sei se vai funcionar.


Pensei em pegar o volume da posição tick.last e inserir em uma variável com a mesma posição, para depois sim atribuir a uma variável que vai recebendo sempre o maior volume por preço.
#property indicator_buffers 1

//---
double vl[];

//---
int OnInit()
  {
   SetIndexBuffer(0,vl,INDICATOR_DATA);
 
   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
               const int prev_calculated,
               const datetime &Time[],
               const double &Open[],
               const double &High[],
               const double &Low[],
               const double &Close[],
               const long &TickVolume[],
               const long &Volume[],
               const int &Spread[])
  {
   int i;
   MqlTick tick;
   SymbolInfoTick(_Symbol,tick);
   
   if(prev_calculated == 0) i = 1;
   else i = prev_calculated-1;
   while(i < rates_total)
     {
        vl[(int)tick.last] += Volume[(int)tick.last];
     
        i++;
     }
   return(rates_total-1);
  }

Rogerio Figurelli
Moderador
61280
Rogerio Figurelli  

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

Como bloquear um EA, por prazo de validade e para funcionar em uma unica conta?

Nelson Silva, 2019.09.22 16:23

   Hello!


   Vou te orientar, proceda os seguintes passos:


   

//Inicialize a variável que ira armazenar o AccountNumber

  int sAccount;



//Vamos fazer uma verificação simples por comparação;
 
  sAccount = AccountInfoInteger(ACCOUNT_LOGIN);
   
  int sUserAccount = 666666; //Conta a ser liberada
  bool sLiberado = false;    //GatilhoTrueFalse 

  if(sAccount == 666666) {SLiberado = true;} 
   


//Verifique o gatilho no seu escopo para executar as funções;

//-------------------------(0.o)------------------
  

  FLW!


Rogerio Figurelli
Moderador
61280
Rogerio Figurelli  

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

Como postar trecho de um código da maneira correta

Davi Silva, 2019.09.20 16:33

Bom dia

Clique em Código(Alt+s)

Coloque o seu código já formatado conforme o meu

//+------------------------------------------------------------------+
//|  Function                                                        |
//+------------------------------------------------------------------+
void print()
  {
   int n =1;

   if(n>0)
      Print("Olá mundo");
  }
//+------------------------------------------------------------------+

Rogerio Figurelli
Moderador
61280
Rogerio Figurelli  

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

Desenvolvimento Indicador - Contagem de Candle

Nelson Silva, 2019.09.26 03:36

   Olá, como vai vcs?

   

   

//Avaliação quantitativa de candles 

  
//1 Passo - Vamos criar as variáveis que armazenarão dos dados

int sVelasPositivas =0;
int sVelasNegativas =0;
double sOpen =0, sClose=0;

//2 Passo - Girar o histórico num bloco for e processar as informações.
int Candles =6; 

for(int i=0; i <= Candles; i++){

  sOpen = iOpen(NULL, PERIOD_CURRENT, i);
  sClose = iClose(NULL, PERIOD_CURRENT, i);
  
  (sClose - sOpen) > 0?  sVelasPositivas ++: sVelasNegativas ++;

}

//3 Os contadores estão armazenados em sVelasPositivas/sVelasNegativas.


 ============================== ^-^===========================================


helciobtc
11
helciobtc  
Oi bom dia
Tem alguém online? Queria saber como faço pra mandar os sinais do meu Indicador para um canal Telegram, alguem pode ajudar? 😁